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 等,并将容器连接到一个 ​​docker0​​ 虚拟网桥,默认为该模式。

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网络
推广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。

面试总结_IP