1. 什么是 Deployment?
Deployment 是一个高级控制器,它通过管理 ReplicaSet 来间接管理 Pod。它的核心职责:
2. 完整 YAML 示例(带注释)
yaml
apiVersion: apps/v1 # Deployment 的 API 版本
kind: Deployment # 资源类型
metadata:
name: nginx-deployment # Deployment 名称
namespace: default # 命名空间(默认 default)
labels:
app: nginx # Deployment 自身的标签
env: production
spec:
# ====== 副本数配置 ======
replicas: 3 # 期望运行的 Pod 数量
# ====== 选择器(必须与 Pod 标签匹配) ======
selector:
matchLabels:
app: nginx # 管理所有标签包含 app=nginx 的 Pod
tier: frontend
# ====== 更新策略 ======
strategy:
type: RollingUpdate # 滚动更新(默认)
rollingUpdate:
maxSurge: 1 # 更新时最多超出期望副本数 1 个
maxUnavailable: 0 # 更新时最多不可用 0 个(保证服务不中断)
# type: Recreate # 重建策略(先删旧 Pod,再建新 Pod)
# ====== Pod 模板(核心) ======
template:
metadata:
labels: # Pod 标签(必须匹配 selector)
app: nginx
tier: frontend
version: v1
annotations: # 注解(可选)
description: "Production nginx"
spec:
# ----- 容器配置 -----
containers:
- name: nginx
image: nginx:1.23 # 镜像地址
imagePullPolicy: IfNotPresent # 拉取策略
ports:
- containerPort: 80
protocol: TCP
name: http
# 环境变量
env:
- name: ENV
value: "production"
- name: SERVICE_PORT
value: "80"
# 资源限制(重要!)
resources:
requests: # 调度时的最低保证
cpu: 100m # 0.1 核
memory: 128Mi
limits: # 最大使用限制
cpu: 200m # 0.2 核
memory: 256Mi
# 健康检查(重要!)
livenessProbe: # 存活探针(容器挂了就重启)
httpGet:
path: /healthz
port: 80
initialDelaySeconds: 30
periodSeconds: 10
readinessProbe: # 就绪探针(检查通过才接收流量)
httpGet:
path: /ready
port: 80
initialDelaySeconds: 5
periodSeconds: 5
# 挂载卷
volumeMounts:
- name: nginx-config
mountPath: /etc/nginx/conf.d
# 启动命令(覆盖镜像默认 CMD)
# command: ["/bin/sh"]
# args: ["-c", "nginx -g 'daemon off;'"]
# ----- 卷定义 -----
volumes:
- name: nginx-config
configMap:
name: nginx-configmap
# ----- 其他配置 -----
restartPolicy: Always # Pod 重启策略(默认 Always)
terminationGracePeriodSeconds: 30 # 优雅终止等待时间3. 常用操作命令
创建 Deployment
bash
# 方式一:直接使用 YAML 文件
kubectl apply -f nginx-deployment.yaml
# 方式二:命令行快速创建(仅测试用)
kubectl create deployment nginx-deployment --image=nginx:1.23 --replicas=3查看 Deployment
bash
# 查看所有 Deployment
kubectl get deployments
# 查看详细信息
kubectl describe deployment nginx-deployment
# 查看关联的 ReplicaSet
kubectl get rs -l app=nginx
# 查看关联的 Pod
kubectl get pods -l app=nginx更新镜像(触发滚动更新)
bash
# 方式一:命令行更新
kubectl set image deployment/nginx-deployment nginx=nginx:1.24
# 方式二:修改 YAML 后 apply
kubectl apply -f nginx-deployment.yaml
# 方式三:直接 edit
kubectl edit deployment nginx-deployment扩容/缩容
bash
# 扩容到 5 个副本
kubectl scale deployment nginx-deployment --replicas=5
# 缩容到 2 个副本
kubectl scale deployment nginx-deployment --replicas=2滚动更新状态查看
bash
# 查看更新状态
kubectl rollout status deployment/nginx-deployment
# 查看更新历史
kubectl rollout history deployment/nginx-deployment
# 查看特定版本详情
kubectl rollout history deployment/nginx-deployment --revision=2回滚
bash
# 回滚到上一个版本
kubectl rollout undo deployment/nginx-deployment
# 回滚到指定版本
kubectl rollout undo deployment/nginx-deployment --to-revision=2
# 暂停更新(用于金丝雀发布)
kubectl rollout pause deployment/nginx-deployment
# 恢复更新
kubectl rollout resume deployment/nginx-deployment删除
bash
# 删除 Deployment(关联的 Pod 也会被删除)
kubectl delete deployment nginx-deployment
# 通过 YAML 文件删除
kubectl delete -f nginx-deployment.yaml
评论区