Deployment 部署 Pod 流程
文章目录
- k8s组件介绍
- 部署文件示例
- 部署 Pod 流程
- 创建 Service
通过创建 Deployment 资源,来看看 k8s 部署 Pod 流程
k8s组件介绍
首先看看 k8s 各组件功能。
-
control plane 控制平面主要包含以下组件:
kube-api-server: 顾名思义,负责处理所有 api,包括客户端以及集群内部组件的请求。
etcd: 分布式持久化存储、事件订阅通知。只有 kube-api-server 直接操作 etcd,其它所有组件都是与 kube-api-server 进行相互。
scheduler: 处理 pod 的调度,将 pod 绑定到具体的 node 节点。
controller manager: 控制器,处理各种资源对象。
cloud controller manager: 对接云服务商的控制器。 -
node 节点,主要部署用户的应用程序,主要包含以下组件:
kubelet: 管理节点上的 pod 以及状态检查和上报。
kube-proxy: 进行流量的路由转发(目前是通过操作节点的 iptables 或者 ipvs 实现)。
container runtime: 容器运行时,例如 containerd。
部署文件示例
Deployment:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-demo
labels:
app: nginx
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
Service:
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80
type: ClusterIP
部署 Pod 流程
- 用户提交yaml文件给 kube-api-server,api-server 将 Deployment 内容持久化到 etcd中。
- controller-manager 监听到 Deployment 创建事件后,检查相应的 RepliccasSet 是否创建。如果没有创建,则创建 ReplicasSet
- controller-manager 监听到 ReplicasSet 创建事件后,检查该 ReplicasSet 关联的 Pod 是否符合 ReplicasSet 期望的状态。如果不符合,则创建Pod。
- Scheduler 监听到 Pod 创建事件后,根据 Pod 配置中指定的调度算法,过滤,打分计算出适合 Pod 运行的最佳节点,然后将绑定的节点名称更新到该 Pod 信息中。
- kubelet 监听到有 Pod 调度到自己所在的节点,然后调用 CRI 接口创建容器。
创建 Service
- 用户提交yaml文件给 kube-api-server,api-server 将 Deployment 内容持久化到 etcd中。
- controller-manager 监听到 Service 创建事件后,根据 Service 和 Pod 的关联关系创建 Endpoint,并将 Endpoint 信息持久化到 etcd 中。
- kube-proxy 监听 Service,Endpoint 事件,在节点上创建相应的网络规则。