[CKAD] 掌握Kubernetes的核心——Deployment的声明式部署

大家好!今天我们将深入探讨Kubernetes中最常用的资源之一,也是CKAD考试中比重非常高的Deployment(部署)。手动管理每个Pod的时代已经结束了。只需定义我们想要的状态,Kubernetes就会自动调整以匹配,让我们在15分钟内掌握“声明式部署”的魔力!


📑 目录

  1. 概述:命令式(Imperative) vs 声明式(Declarative)部署
  2. Deployment的结构:Replicas和Pod Template
  3. 更新策略:RollingUpdate vs Recreate
  4. 版本管理的核心:Rollout和Rollback
  5. CKAD实战技巧:一行命令完成部署
  6. 动手实践:实战练习题

0. 概述:为什么选择Deployment? 🤔

Kubernetes中的部署方式主要分为两种:

  • 命令式部署 (Imperative): 这种方式是直接发出分步命令,例如“创建3个Pod!”、“更新镜像!”。它直观但难以管理。
  • 声明式部署 (Declarative): 这种方式是提交一份规范(YAML),声明“我想要的最终状态是使用‘Nginx镜像版本1.21’的‘3个Pod’。”Kubernetes会不断监控并自我恢复,以维持这个期望状态(Desired State)。

实现这种声明式部署的核心控制器正是Deployment。


1. Deployment的结构:什么,多少个? 🏗️

Deployment的YAML文件主要分为三个部分:

  • Replicas: 需要维护的Pod数量。
  • Selector: 决定Deployment管理哪些Pod的“标签”查找规则。
  • Template: 定义实际创建的Pod的形态(镜像、端口、环境变量等)。

💡 核心YAML结构

apiVersion: apps/v1
kind: Deployment
metadata:
  name: web-deployment
spec:
  replicas: 3 # 保持Pod数量
  selector:
    matchLabels:
      app: my-web # 管理带有此标签的Pod
  template:
    metadata:
      labels:
        app: my-web # 将附加到创建的Pod的标签
    spec:
      containers:
      - name: nginx
        image: nginx:1.21
        ports:
        - containerPort: 80

2. 更新策略:无服务中断部署 🔄

Deployment最大的优点之一是可以在不中断服务的情况下更新应用程序。

1) RollingUpdate (默认)

这种策略是逐个终止旧Pod,同时逐个创建新版本Pod。用户几乎不会感受到服务中断。

  • maxSurge: 配置在更新期间可以创建的Pod数量,超出预期数量的额外Pod。
  • maxUnavailable: 配置在更新期间不可用的Pod的最大数量。

2) Recreate

这种策略是立即终止所有现有Pod,然后创建新版本Pod。这会导致暂时的服务中断(Downtime),但适用于旧版本和新版本不能共存的环境。


3. 版本管理的核心:Rollout和Rollback ⏪

如果部署出现问题怎么办?别慌。Deployment会记录部署历史,您可以随时回滚到之前的版本。

  • 检查部署状态: kubectl rollout status deployment/my-deploy
  • 检查部署历史: kubectl rollout history deployment/my-deploy
  • 恢复到上一个版本: kubectl rollout undo deployment/my-deploy
  • 恢复到特定版本 (revision 2): kubectl rollout undo deployment/my-deploy –to-revision=2

4. CKAD实战技巧:速度是通关的关键! ⏱️

在考场上,没有时间从头开始输入YAML。请尽可能多地利用命令。

1) 使用命令快速创建Deployment

# 创建使用nginx镜像的部署 (3个Pod)
kubectl create deployment my-web --image=nginx:1.21 --replicas=3

2) 更新镜像(考试常考题!)

kubectl set image deployment/my-web nginx=nginx:1.22

3) 扩缩容(增加/减少Pod数量)

kubectl scale deployment/my-web --replicas=5

5. 动手实践:实战练习题 🛠️

场景:

  1. 创建一个名为`app-deploy`的Deployment。(镜像: httpd:2.4.48,副本数: 2)
  2. 将镜像更新为httpd:2.4.49并监控部署过程。
  3. 假设更新出现问题,立即回滚到上一个版本(2.4.48)。

[解答指南]

# 1. 创建
kubectl create deployment app-deploy --image=httpd:2.4.48 --replicas=2

# 2. 更新并验证
kubectl set image deployment/app-deploy httpd=httpd:2.4.49
kubectl rollout status deployment/app-deploy

# 3. 回滚
kubectl rollout undo deployment/app-deploy

总结 🏁

Deployment不仅仅是一个启动多个Pod的工具。“声明最终状态,并信任Kubernetes来维护该状态”,这正是Kubernetes原生操作的核心。

熟练掌握今天学到的更新策略和回滚功能,不仅能确保实际工作中的稳定部署,还能让您离CKAD合格证书更近一步!🌟


Comments

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注