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

📑 目录
- 概述:命令式(Imperative) vs 声明式(Declarative)部署
- Deployment的结构:Replicas和Pod Template
- 更新策略:RollingUpdate vs Recreate
- 版本管理的核心:Rollout和Rollback
- CKAD实战技巧:一行命令完成部署
- 动手实践:实战练习题
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. 动手实践:实战练习题 🛠️
场景:
- 创建一个名为`app-deploy`的Deployment。(镜像: httpd:2.4.48,副本数: 2)
- 将镜像更新为httpd:2.4.49并监控部署过程。
- 假设更新出现问题,立即回滚到上一个版本(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合格证书更近一步!🌟
发表回复