Kubernetes中Deployment、PodTemplate与容器的关系
这三者在Kubernetes中是层层嵌套的关系,可以用"套娃"模型来理解:
1. 核心关系图示
Deployment (管理应用部署)
│
└── PodTemplate (定义Pod的模板)
│
└── 容器 (实际运行的应用)
2. 具体关系解析
Deployment (部署控制器)
- 作用:声明应用的期望状态(要运行多少副本、用什么镜像等)
- 关键能力:滚动更新、回滚、扩缩容
- 包含:一个PodTemplate + 副本数等配置
PodTemplate (Pod模板)
- 位置:在Deployment的
spec.template
字段中 - 作用:定义要创建的Pod的"模具"
- 包含:
- 容器定义(1个或多个)
- 存储卷配置
- 网络设置
- 节点选择规则等
容器 (Container)
- 位置:在PodTemplate的
spec.containers
数组中 - 作用:实际运行应用程序的隔离环境
- 包含:
- 容器镜像
- 环境变量
- 资源限制
- 端口配置等
3. 工作流程示例
当创建一个Deployment时:
-
用户定义Deployment(包含PodTemplate)
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deploy spec: replicas: 3 # 要创建3个Pod template: # 这就是PodTemplate spec: containers: - name: nginx image: nginx:1.19 ports: - containerPort: 80
-
Deployment控制器:
- 读取PodTemplate
- 创建3个相同的Pod(每个Pod里运行1个nginx容器)
-
kubelet:
- 在每个节点上拉取nginx:1.19镜像
- 创建并运行容器
4. 三者关系特点
对象 | 生命周期 | 是否直接创建 | 主要作用 |
---|---|---|---|
Deployment | 长期存在 | 是 | 应用部署管理 |
PodTemplate | 随Deployment存在 | 否 | 定义Pod的创建规则 |
容器 | 随Pod存在 | 否 | 实际运行应用进程 |
5. 实际应用中的体现
-
修改镜像版本:改的是PodTemplate中的容器定义
kubectl set image deployment/nginx-deploy nginx=nginx:1.20
-
扩容:改的是Deployment的replicas,不影响PodTemplate
kubectl scale deployment nginx-deploy --replicas=5
-
查看关系:
# 查看Deployment的PodTemplate kubectl get deployment nginx-deploy -o yaml | grep -A10 "template:" # 查看Pod中的容器 kubectl get pods -l app=nginx -o yaml | grep -A5 "containers:"
简单记忆法
把这三者想象成工厂生产:
- Deployment是生产主管(决定生产多少)
- PodTemplate是产品设计图(决定产品长什么样)
- 容器是最终产品里的核心部件