cpu利用率和cpu负载的区别
cpu利用率指的是cpu的繁忙程度,是从时间维度来衡量,比如200ms内有100ms在使用,使用率就是50%。
cpu负载是综合反映cpu和磁盘IO的使用情况,负载=等待磁盘IO的任务数量(D)+运行任务的数量(R),磁盘IO越高,负载会越高。
nginx如何优化
可以从指令优化和内核参数优化来回答,详情:https://blog.51cto.com/liuping0906/6065527
k8s pause的作用是什么
pause主要作用为pod中各个容器提供namespace,比如提供网络空间共享。
其他:https://blog.csdn.net/MssGuo/article/details/125267817
k8s是如何实现超卖的
基于cgroup实现超卖,拿cpu来说,request对应的是cpu_share值,这个是相对值,指的是cpu调度权重
limit对应的是cpu_quota,这个实际限制能够使用多少cpu。
容器网络有几种模式
网络模式 | 简介 |
bridge | 为每一个容器分配、设置 IP 等,并将容器连接到一个 |
host | 容器将不会虚拟出自己的网卡,配置自己的 IP 等,而是使用宿主机的 IP 和端口。 |
none | 容器有独立的 Network namespace,但并没有对其进行任何网络设置,如分配 veth pair 和网桥连接,IP。 |
container | 新创建的容器不会创建自己的网卡和配置自己的 IP,而是和一个指定的容器共享 IP、端口范围等。 |
deployment和statefulset的区别
statefulset的podname是稳定的、唯一不变的,而deployment是不断变化的。
etcd的选主过程:三种状态,leader(领袖),follower(群众),candidate(候选者)
- 所有节点启动时都是follower状态;
- 在一段时间内如果没有收到来自 leader 的心跳,从 follower 切换到 candidate,且 term(任期值)+1并发起选举;
- 如果收到 majority(N/2+1) 的投票(含自己的一票)则切换到 leader 状态;
- 如果发现其他节点 term 比自己更新,则主动切换到 follower。
- https://juejin.cn/post/7035179267918938119
k8s为何选择etcd,而不是数据库
- etcd是golang实现的,提供了丰富的API,K8S也是golang语言实现
- 是一个分布式的,一致的
key-value
存储服务,主要用于共享配置和服务发现 - 提供了数据
TTL
失效、数据改变监视、多值、目录监听、分布式锁原子操作 - 提供存储以及获取数据的接口,它通过协议保证
etcd
集群中的多个节点数据的强一致性。用于存储元信息以及共享配置。 - 提供监听机制,客户端可以监听某个
key
或者某些key
的变更(v2
和v3
的机制不同)。用于监听和推送变更。 - 提供
key
的过期以及续约机制,客户端通过定时刷新来实现续约(v2
和v3
的实现机制也不一样)。用于集群监控以及服务注册发现。 - 提供原子的
CAS
(Compare-and-Swap
)和CAD
(Compare-and-Delete
)支持(v2
通过接口参数实现,v3
通过批量事务实现)。用于分布式锁以及leader
选举。
request和limit的区别
- Request: 容器使用的最小资源需求,作为容器调度时资源分配的判断依赖。 只有当节点上可分配资源量>=容器资源请求数时才允许将容器调度到该节点。 但Request参数不限制容器的最大可使用资源。
- Limit: 容器能使用资源的资源的最大值,设置为0表示使用资源无上限。
calico网络
- https://feisky.gitbooks.io/kubernetes/content/network/calico/calico.html
- https://www.niewx.cn/2022/04/04/2022-04-04-calico-network-mode-of-k8s/
- https://blog.frognew.com/2021/07/relearning-container-22.html
- https://blog.csdn.net/qq_24433609/article/details/126156145
- Calico是一个基于BGP的纯三层的网络方案,与OpenStack、Kubernetes、AWS、GCE等云平台都能够良好地集成。
- Calico在每个计算节点都利用Linux Kernel实现了一个高效的vRouter来负责数据转发。每个vRouter都通过BGP协议把在本节点上运行的容器的路由信息向整个Calico网络广播,并自动设置到达其他节点的路由转发规则。
- Calico保证所有容器之间的数据流量都是通过IP路由的方式完成互联互通的。Calico节点组网时可以直接利用数据中心的网络结构(L2或者L3),不需要额外的NAT、隧道或者Overlay Network,没有额外的封包解包,能够节约CPU运算,提高网络效率。
推广k8s的过程有有遇到哪些问题
- 使用习惯问题,用户习惯使用ssh登录ecs,pod不允许,统一在cmdb页面通过websocket网页登录。
- IP归属问题,ECS IP是静态的,pod IP是动态的,将pod ip缓存到cmdb一段时间,记录ip的使用记录。
- java JIT问题:java启动时会预热使用更多的cpu,启动完成后会下降,limit值设置的更大。
- java OOM问题:jvm内存没有超过限制,pod重启了,发现使用了很多堆外内存,研究java进程内存模型。
- pod调度问题:初期request和limit设置不合理,导致机器资源使用率不高。
业务如何快速伸缩
- 制定扩缩容指标,比如cpu利用率,QPS,延迟等指标
- 结合业务特性,定时扩缩容,比如外卖业务有波峰波谷
- 针对核心业务,设置较低的阈值
推广skywalking遇到的问题
- 开发担心skywalking影响业务性能:对服务进行压测,给出压测报告和性能对比
- skywalking故障是否会影响业务:在测试环境演练,确认无影响
- kafka消息堆积:优化消费kafka的配置,将集群分成Receiver和Aggregator角色
- 存储成本高:对服务进行采样
- 部分服务启动变慢:定位到是kafka reporter导致,优化reporter
推广skywalking你主要负责什么
- 如何更加方便的接入
- 全链路监控选型,从pinpoint,cat,skywalking,综合考虑skywalking
- 项目进度推进和问题汇总以及解决
- 搭建和维护skywalking
- 文档输出和日常答疑
遇到问题如何排查的
这个根据实际案例来回答,需要平时积累问题案例。
双活如何实现
http://kaito-kidd.com/2021/10/15/what-is-the-multi-site-high-availability-design/
https://zhuanlan.zhihu.com/p/32009822
redis大key如何删除
https://www.51cto.com/article/715874.html
select,poll,epoll的区别
- epoll性能更高,select和poll每次调用都需要把文件描述符从用户态拷贝到内核态,epoll保证每个描述符只拷贝一次
- select和poll通过遍历文件描述符来获取已经就绪的socket,epoll通过回调机制获取就绪socket
进程间通信方式有哪几种
- 同步互斥
- 共享内存
- 过程调用
- 消息传递
tcp状态问题
- 为什么会有4次挥手,因为tcp连接是全双工的,两边都可以通信,并且可以处于半关闭状态,关闭的一方还可以接收数据。
- 主动关闭的一方会出现time_wait,close_wait状态基本不会出现,除非被动关闭的一方没有调用close释放连接。
- 双方同时关闭连接会出现closing状态。
- time_wait状态是确保最后的ack送达,保证连接正常关闭。在短连接服务中会出现大量的time_wait,可以设置timewait的上限,内核参数net.ipv4.tcp_max_tw_buckets。