k8s中deployment创建过程

在 Kubernetes(K8s)中,创建一个 Deployment 的过程涉及多个组件的协同工作。


6a1171cd8ffb3a4199f83c35cdf63540.png

1. 编写 Deployment 配置文件:

首先,使用 YAML 格式编写一个描述 Deployment 的配置文件,定义其元数据、规格说明、标签选择器和 Pod 模板等信息。
例如,以下是一个简单的 Deployment 配置示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-deployment
spec:
replicas: 3
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-container
image: nginx:latest
ports:
- containerPort: 80

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 或容器上。