k8s的交互过程

前言

k8s的交互过程可以简单概括为: 用户通过kubectl客户端工具向kubenetes api server发出指令,api server接收指令后与etcd交互,获取和更新集群状态,然后由master节点的controller manager和scheduler协调,最终通知各个node节点上的kubelet执行具体操作,从而实现对容器化应用的部署、扩展和管理

交互过程
用户通过kubectl客户端与kubernetes api server交互
  • 用户通过kubectl命令行工具,向kubernetes api server发送指令,例如创建pod、service、deployment等
  • kubectl通过http/https协议与api server通信,传递json或者yaml格式的请求
api server接收请求,进行验证和授权
  • api server接收到用户请求后,首先进行验证和授权,验证用户身份和权限,确保用户有权执行该操作
api server将状态存储到etcd中
  • 验证和授权通过后,api server将请求的信息(例如pod的定义),以etcd客户端的形式,通过tcp连接写入etcd数据库
  • etcd集群负责存储集群的全部状态信息,并保证数据的一致性和持久性
controller manager监听etcd,执行控制循环
  • master上的controller manager持续监听etcd中存储的状态变化
  • 当发现新的pod被创建(或需要更新),controller manager会启动相应的控制循环,根据预定义的规则和策略进行处理
scheduler负责调度pod
  • controller manager会通知sheduler为一个新的pod选择合适的node节点
  • sheduler会根据集群的资源状态、节点亲和性等策略,从所有可用的node节点中选择最佳节点
  • 选的节点后,sheduler将调度信息写入etcd
kubelet在node节点上执行操作
  • 选定node节点上的kubelet进程会定期从api server获取新的pod调度信息
  • kubelet按照pod的定义,调用容器运行时(如: containerd或cri-o)来创建、启动和管理容器
  • kubelet还会向api server汇报自身的状态,例如: cpu、内存等资源使用情况
kube-proxy负责服务发现和负载均衡
  • 每个node节点上运行的kube-proxy组件,会根据service的定义,进行服务发现和负载均衡
  • 当外部请求访问服务时,kube-proxy会将请求转发到后端的pod实例上
结语

k8s的交互过程