微网站建设方案财政,个人简历模板在线编辑,wordpress连接微信,微信oa系统linux运维面试题
面试
K8S篇(高可用)
Q#xff1a;k8s是什么#xff1f;架构#xff1f;
Kubenetes是一个开源的容器集群管理系统。主要用于容器编排#xff0c;解决容器调度问题。当应用请求时#xff0c;k8s需要合理分配请求到空闲node节点上去。k8s使用的主从模式k8s是什么架构
Kubenetes是一个开源的容器集群管理系统。主要用于容器编排解决容器调度问题。当应用请求时k8s需要合理分配请求到空闲node节点上去。k8s使用的主从模式至少有一个主节点Master和多个工作节点Node。
master主要用于暴露API调度部署和节点的管理。包括apiServer、scheduler、controller、etcd以及各种插件(dns)。etcd保存了整个集群状态。master会运行有大量副本控制器抽象的service通过label调度一组pod。
Node是K8s集群操作的单元是工作节点。node核心组件有kubeletkube-proxykubelet用于维护声明周期以及和master通信。kube-proxy用于集群内部的服务发现、负载均衡等。
pod是k8s中最小的调度单元, 包含多个相关容器。pod一般是短暂的实体。每个pod都会有一个pause根容器和其它业务容器容器可以通过共享内存进行通信。作用: 评估健康状态设置Ip地址实现Pod内部通信。 etcd是k8s必不可少的存储组件。
Q什么是etcd?
ETCD是用于共享配置和服务发现的分布式KV存储系统。基于Go语言实现。
特点
简单支持 REST 风格的 HTTPJSON API算法易理解。
安全支持 HTTPS 方式的访问
快速支持并发 1k/s 的写操作
可靠支持分布式结构基于 Raft 的一致性算法Raft 是一套通过选举主节点来实现分布式系统一致性的算法。
raft算法
raft算法包括3个子问题选举、 日志复制、 安全性。
选举
Raft算法中任何服务器都可以扮演下面三个角色之一领袖、群众、候选人。
Leader领导者负责日志的同步管理处理来自客户端的请求(日志)负责保证其他节点与他的日志同步。
Follower追随者刚启动时所有节点为Follower状态响应Leader的日志同步请求响应Candidate的请求把请求到Follower的事务转发给Leader。
Candidate候选者从Follower转为Candidate发起选举选举出Leader后从Candidate转为Leader状态。
Raft运行时提供服务的时候只存在Leader与Follower两种状态。选举由定时器来触发每个周期不定。
日志复制
所有日志请求都必须先经过Leader处理保证了一致性。
安全性
安全性是用于保证每个节点都执行相同序列的安全机制。
保证选举出来的Leader一定包含先前 commited Log。
QETCD适应的场景
服务发现、消息发布与订阅、负载均衡、分布式锁。
服务发现主要解决在同一个分布式集群中的进程或服务要如何才能找到对方并建立连接。
etcd使用raft算法保持了强一致性所以很容易实现分布式锁。锁服务有两种使用方式一是保持独占二是控制时序。
Q为什么用etcd而不用Zookeeper
Zookeeper缺点
复杂。部署维护复杂使用也复杂需要安装客户端官方只提供了java和C两种语言的接口。
Java编写。Java会引入大量的依赖。
发展缓慢。Apache基金会庞大的结构以及松散的管理导致项目发展缓慢。
Qk8s用法?
在单机上使用k8s需要安装kubectl与minikube。
Minikube 是一种可以在本地轻松运行一个单节点 Kubernetes 群集的工具。
Kubectl 是一个命令行工具可以部署应用、检查和管理集群资源、查看日志。
kubelet在每个Node上都会启动一个kubelet服务进程该进程用于处理Master下发到本节点的任务管理Pod及Pod中的容器。
其他
1、基础概念
QLinux 命令
Linux kill命令
Linux kill 命令向进程发送信号。
常用信号
1 (HUP)重新加载进程。
9 (KILL)杀死一个进程。
15 (TERM)正常停止一个进程。
SIGUSR1/SIGUSR2: 这表示用户定义的条件
例
kill -9 123456
kill -HUP 53
kill 12345
Linux 关机重启命令
重启Reboot shutdown-r是重启
关机halfshutdown-s
netstat是显示网络状态
linux 检测远程端口是否打开
telnet
nc
nmap
linux 012的含义 例echo “hello” t.log
21将标准错误输出重定向到标准输出
21将标准错误输出重定向到名为1的文件里
nohup java -jar app.jar log 21
把1和2都理解是一个指针,本来1-屏幕 执行log后 1-log
执行21后 2-1 (2指向1而1指向log,因此2也指向了log)
”log” “log 21””log”
在Linux中命令后加表示该进程后台运行
nohup 英文全称 no hang up不挂起用于在系统后台不挂断地运行命令退出终端不会影响程序的运行。nohup 在默认情况下非重定向时会输出一个名叫 nohup.out 的文件到当前目录下如果当前目录的 nohup.out 文件不可写输出重定向到 $HOME/nohup.out 文件中。
ps -aux | grep
ps 为我们提供了进程的一次性的查看
a : 显示所有程序 ; u : 以用户为主的格式来显示 ; x : 显示所有程序不区分终端机
grep RE) ,全面搜索正则表达式并把行打印出来
ps aux | grep go_gateway | grep -v ‘grep’ | awk ‘{print $2}’ | xargs kill
查询当前进程中是否包含go_gateway如包含则杀死
grep -v 不包含
ps -ef|grep erp-api.jar|grep -v grep|awk ‘{print $2}’ 获取第二个参数
xargs 将前面获取到的进程号通过空格分割杀死所有进程
awk 命令:逐行扫描文件
“#!/bin/sh”
#!/bin/sh是对shell的声明说明你所用的是那种类型的shell及其路径所在。
QLinux 进程状态
就绪状态、执行状态、阻塞状态
进程没有睡眠状态有睡眠状态的是线程
2、日常命令
cd、pwd、ls、cat、uname
cd -返回上一次所在的目录cd ~主目录cd /根目录
echo P A T H 查看变量 PATH查看变量 PATH查看变量PATH的值
单引号所见即所得双引号是先把变量解析之后再输出。在双引号中
\ 反斜杠是转义字符 反引号代表引用命令。
星号表示一个或者多个字符问号代表一个字符。
删除目录: rmkir;rm -r
创建文件的几种方式
touch;echo;printf;cat;vi/vim个人认为最好用gedit
trap用于指定在接收到信号后将要采取的动作.
如trap exit 2
CtrlShiftC进行复制CtrlShiftV进行文本粘贴
“.deb” 是 ubuntu 、debian 的格式。
sudo apt install XXX3、函数
echo number:$# 获取参数个数echo scname:$0 获取脚本名称echo first:$1 获取第一个参数echo second:$2 获取第二个参数echo argume:$ 获取所有参数echo show parm list :$* 数据参数的listecho show process id :$$ 获取进程idecho show precomm stat:$? 获取命令执行的结果grep abc xx 搜索XX文件里有abc的行锁:fcntl ()、flock()、unlock()4、vim命令
正常模式可以使用快捷键命令或按:输入命令行。
插入模式可以输入文本在正常模式下按i、a、o等都可以进入插入模式。
可视模式正常模式下按v可以进入可视模式 在可视模式下移动光标可以选择文本。按V进入可视行模式 总是整行整行的选中。ctrlv进入可视块模式。
替换模式正常模式下按R进入
:w – 保存修改。
:q – 退出。
:q! – 退出并且不保存修改。
:wq 、:x – 保存并退出。
删除多行正常模式下输入“10dd”
5、linux目录 6、docker
命令 docker ps #仅显示正在运行的容器
docker ps -a#所有容器
docker search xxx
docker rmi -f ID
# -d后台运行容器-h或者–hostname指定容器主机名为my-rabbit
-name是指定容器名称为some-rabbit-p指的是端口, rabbitmq的镜像名:latestf 实时监控容器日志 -it进入终端
docker根目录: /var/lib/docker
例子
1、
docker run -d --name rabbit -p 5672:5672 -p 15672:15672 -p 25672:25672 -v /data/rabbitmq:/var/lib/rabbitmq rabbitmq --restartalways
docker run -d --name mysql -p 3306:3306 mysql --restartalways
2、
docker run -d --hostname my-rabbit --name rabbit -p 5672:5672 -p 15672:15672 -p 25672:25672 -v /data/rabbitmq:/var/lib/rabbitmq rabbitmq:management
3、sudo docker run -itd -v ~/docker_test:/home ubuntu /bin/bash
冒号前后分别为本地路径 和 docker内的路径
/bin/bash的作用是因为docker后台必须运行一个进程,否则容器就会退出,在这里表示启动容器后启动bash.非必要
4、rabbitmq
加载rabbitmq的管理器插件
docker exec some-rabbit rabbitmq-plugins enable rabbitmq_management
新增用户
rabbitmqctl add_user name passwd
赋予权限
rabbitmqctl set_user_tags name administrator
rabbitmqctl list_users
docker login -u 用户名 -p 密码
5、exec
docker exec -it ID bash
docker start/restart id
6、docker run -d -p 16379:6379 --name redis redis:latest
最后参数为指定镜像
7、docker build -t test:v1 .
8、docker run -it nginx:latest /bin/bash
使用镜像nginx:latest以交互模式启动一个容器,在容器内执行/bin/bash命令。
9、docker attach
进入容器
架构
docker快速入门https://docker.easydoc.net
Docker三个概念dockerfile、image、container
Image类似虚拟机的快照。里面包含你要部署的应用程序以及它所关联的所有库。
一个镜像可以创建多个不同的容器每个容器独立。一个容器对应一个镜像
Dockerfile自动化脚本 Volume数据卷(共享文件夹)
基础命令
$ docker volume create test
$ docker volume ls
$ docker inspect test
$ docker volume rm test
如果启动容器时带的容器不存在那么 docker 会创建一个。 例docker run -p 27018:27017 --name mongo -v mongo-data:/data -d mongo:4.4
Docker-compose.yml可定义多个容器
docker compose up运行所有容器
多容器通信(***)
创建虚拟网络
k8s 8、LVS LVS 是四层负载均衡建立在传输层之上传输层有 TCP/UDP
LVS (Linux Virtual Server)是一种集群(Cluster)技术采用IP负载均衡技术和基于内容请求分发技术。LVS架构从逻辑上可分为负载调度器、服务器池和共享存储。
**负载调度器:**它是整个集群对外面的前端机负责将客户的请求发送到一组服务器上执行而客户认为服务是来自一个IP地址我们可称之为虚拟IP地址上的。
**服务器池:**是一组真正执行客户请求的服务器执行的服务一般有WEB、MAIL、FTP和DNS等。
**共享存储:**它为服务器池提供一个共享的存储区这样很容易使得服务器池拥有相同的内容提供相同的服务。
**术语**DSDirector Server。指的是前端负载均衡器节点。
RSReal Server。后端真实的工作服务器。
VIP向外部直接面向用户请求作为用户请求的目标的 IP 地址。
LBload balancer
Lvs常用的3种调用算法
· **基本轮询调度 rr**调度器会将所有的请求平均分配给每个真实服务器
· 加权最小连接调度 wlc
把新的连接请求分配到当前连接数最小的服务器。最小连接调度是一种动态的调度算法它通过服务器当前活跃的连接数来估计服务器的情况。
· **加权轮询调度 wrr**根据性能给每台服务器添加权值。权值越高处理请求越多。
Lvs 3种模式
NAT模式
NAT 模式下网络数据的进出都要经过 LVS 处理LVS 需要作为真实服务器的网关。
客户请求越来越多时,lb压力越来越大 TUN IP隧道模式
请求由 LVS 接受由真实提供服务的服务器(RS)直接发放给用户返回的时候不经过 LVS。
缺点暴露真实服务器地址RS必须支持IP隧道协议有IP隧道的开销 DR(直接路由)模式
请求由 LVS 接受由真实提供服务的服务器(RS)直接发放给用户返回的时候不经过 LVS。
返回的数据打包给给路由包装器统一返回。
DR 负载均衡模式数据分发过程中不修改 IP 地址只修改 Mac 地址不需要通过负载均衡服务器进行地址转换 8、“.d”
linux中“.d”文件表示的是1、依赖文件其中d是dependence的意思2、默认配置文件其中d是default的意思3、动态意义的文件其中d是Dynamic的意思。
9、请你说说IO多路复用select、poll、epoll*
IO多路复用是指单个线程或进程能够处理多个IO请求。select调用主要统计有多少个文件描述符需要进行IO操作。缺点内存开销大支持的的文件描述符的个数有限。poll和select调用差别不大主要是底层数据结构变成了链表支持的文件描述符的个数无上限。epoll调用是更加高效的方式底层数据结构使用了红黑树和链表避免了大量的内存分配和轮询。