Kubernetes 学习总结(43)—— Kubernetes 从提交 deployment 到 pod 运行的全过程
当用户向?Kubernetes?提交了一个创建?deployment?的请求后,Kubernetes?从接收请求直至创建对应的?pod?运行这整个过程中都发生了什么呢?
kubernetes 架构简述
在搞清楚从?deployment?提交到?pod?运行整个过程之前,我们有先来看看?Kubernetes?的集群架构:

上图与下图相同:

如图所示,k8s 集群分为?control plane?控制平面和?node?节点。control plane?控制平面(也称之为主节点)主要包含以下组件:
kube-api-server: 顾名思义,负责处理所有 api,包括客户端以及集群内部组件的请求。
etcd: 分布式持久化存储、事件订阅通知。只有?kube-api-server?直接操作?etcd,其它所有组件都是与?kube-api-server?进行相互。
scheduler: 处理 pod 的调度,将 pod 绑定到具体的 node 节点。
controller manager: 控制器,处理各种资源对象。
cloud controller manager: 对接云服务商的控制器。
node?节点,专门部署用户的应用程序(与控制平面隔离,避免影响到 k8s 的核心组件),主要包含以下组件:
kubelet: 管理节点上的 pod 以及状态检查和上报。
kube-proxy: 进行流量的路由转发(目前是通过操作节点的 iptables 或者 ipvs 实现)。
CRI: 容器运行时接口。
从 Deployment 到 Pod
从?Deployment?到?Pod?的整个过程如下图所示:

1. 请求发送到?kube-api-server
请求发送到?kube-api-server,然后会进行认证、鉴权、变更、校验等一系列过程,最后将 deployment 的数据持久化存储至?etcd。

在这个过程我们可以通过 mutation admission 的 webhook 自主地对资源对象进行任意的变更,比如注入 sidecar 等等。
2. controller manager 处理
controller manager?组件针对不同的资源对象有不同的处理部分。针对?Deployment,由于其并不直接管理?Pod,而是?Deployment?管理?ReplicaSet,ReplicaSet?再管理?Pod:

因此其中涉及到?controller manager?中的两个部分:
deployment controller
replicaset controller
(1) 先是?deployment controller?监听到?deployment?的创建事件,然后进行相关的处理,最后创建?replicaset。
(2) 然后?replicaset controller?监听到?replicaset?的创建事件,进行相关处理后,最后创建?pod。
3. scheduler 调度
scheduler?接受到 pod 需要调度的事件后,进行一系列调度逻辑处理,最后选择一个合适的 node 节点,将 pod 绑定到这个节点上(所谓的节点调度在这里只是修改 pod 数据,对其中的 nodeName 进行赋值)。具体的调度算法比较复杂,涉及强制性调度、亲和与反亲和、污点和容忍、以及硬件资源计算、优先级等等,本文不做展开。
4. 节点 kubelet 处理
调度完成后,pod?被绑定的 node 节点上的?kubelet?同样通过?kube-api-server?会接受到相应的事件,然后?kubelet?会进行?pod?的创建。在这个过程中?kubelet?会分别调用?CRI、CNI、CSI:
CRI(Container Runtime Interface): 容器运行时接口,CRI?插件负责执行拉取镜像、创建、删除容器等操作。CRI?的几种常用插件:
containerd
CRI-O
Docker Engine
CNI(Container Network Interface): 容器网络接口,CNI?插件负责给 pod 分配 IP 地址,确保 pod 能够与集群内的其它 pod 进行通信。CNI?的几种常用插件:
Cilium
Calico
CSI(Container Storage Interface): 容器存储接口,CSI?插件负责与外部存储提供者通信,执行卷的附加、挂载等操作。
所谓的接口其实只是定义了通信的规范或者标准(使用的是?grpc?协议),具体的实现则是交给了插件。至此,Kubernetes 从创建 deployment 到 pod 运行的全过程就是这样了。

参考资料:
https://kubernetes.io/docs/concepts/architecture/
https://kubernetes.io/docs/concepts/scheduling-eviction/
https://kubernetes.io/docs/setup/production-environment/container-runtimes/
https://kubernetes.io/docs/tasks/administer-cluster/network-policy-provider/
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!