k8s中deployment创建过程
在 Kubernetes(K8s)中,创建一个 Deployment 的过程涉及多个组件的协同工作。
1. 编写 Deployment 配置文件:
首先,使用 YAML 格式编写一个描述 Deployment 的配置文件,定义其元数据、规格说明、标签选择器和 Pod 模板等信息。
例如,以下是一个简单的 Deployment 配置示例:
1 | apiVersion: apps/v1 |
2. 提交配置文件到 API Server:
使用 kubectl
命令将上述配置文件提交到 Kubernetes 集群的 API Server:
1 | kubectl apply -f deployment.yaml |
API Server 会对请求进行认证、鉴权和校验,然后将 Deployment 的信息存储到集群的分布式键值存储系统 etcd 中。
3. Controller Manager 处理请求:
Controller Manager 监听 etcd 中的资源变化事件。
当新的 Deployment 被创建时,Deployment Controller 会检测到该事件,并根据 Deployment 的配置创建一个 ReplicaSet。
ReplicaSet Controller 会监听 ReplicaSet 的创建事件,并根据 ReplicaSet 的配置创建相应数量的 Pod。
4. 调度 Pod 到节点:
Kubernetes Scheduler 监听 Pod 的调度事件,并根据调度策略(如节点亲和性、污点、容忍、硬件资源等)为 Pod 选择一个合适的节点。
调度完成后,Scheduler 会将 Pod 与节点的绑定信息写回 etcd。
5. Kubelet 在节点上运行 Pod:
节点上的 Kubelet 进程监听 etcd 中的 Pod 变化事件。
当发现有新的 Pod 被调度到本节点时,Kubelet 会调用容器运行时(如 Docker、containerd 等)来创建和启动容器。
同时,Kubelet 还负责 Pod 的生命周期管理,包括健康检查、日志收集等。
6. Pod 和 Service 网络通信:
Kube-Proxy 是运行在集群各个节点上的网络代理,负责实现服务发现和负载均衡。
当有外部请求访问服务时,Kube-Proxy 会根据服务的 Endpoints 信息将请求转发到正确的 Pod 或容器上。