侧边栏壁纸
博主头像
LLJJJJ的博客

行动起来,活在当下

  • 累计撰写 8 篇文章
  • 累计创建 5 个标签
  • 累计收到 4 条评论

目 录CONTENT

文章目录

K8s Deployment

Administrator
2026-08-06 / 0 评论 / 0 点赞 / 6 阅读 / 0 字

1. 什么是 Deployment?

Deployment 是一个高级控制器,它通过管理 ReplicaSet 来间接管理 Pod。它的核心职责:

功能

说明

副本管理

保证指定数量的 Pod 始终运行

滚动更新

逐步替换旧版本 Pod,零停机更新

回滚

更新失败时快速回退到旧版本

扩容/缩容

动态调整 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


0

评论区