k8s笔记04-常用部署命令
Kubernetes(K8s)部署与版本管理命令笔记
一、部署核心命令分类与应用场景
K8s中用于应用部署、版本控制与实例扩缩容的核心命令主要包括三类,分别对应“版本回滚”“手动扩缩容”“自动扩缩容”场景,是CKA考试中部署类题目的核心考点。
kubectl rollout
kubectl scale
kubectl autoscale
二、版本管理命令:kubectl rollout
(CKA必考)
1. 核心作用
针对Deployment、StatefulSet等控制器,实现版本发布状态查看、发布历史查询、版本回滚,核心解决“发布失败后快速回退”的问题,配合K8s滚动更新(Rolling Update)策略,确保应用部署无感知且可恢复。
2. 关键子命令与实操
(1)前置准备:创建Deployment示例
首先创建一个基础Deployment(用于后续版本操作演示):
# 创建名为my-deployment的Deployment,镜像为nginx:1.14.2kubectl create deployment my-deployment --image=nginx:1.14.2# 验证创建结果kubectl get deployments my-deployment
(2)发布新版本:修改镜像(触发版本更新)
通过kubectl set image
修改Deployment的容器镜像,触发新的版本发布(滚动更新):
# 1. 先查看Deployment的容器名称(需与后续修改命令匹配)kubectl get deployment my-deployment -o yaml | grep \"name:\" # 输出容器名称为\"nginx\"# 2. 将镜像从1.14.2更新为1.16.1kubectl set image deployment/my-deployment nginx=nginx:1.16.1
(3)查看发布状态:kubectl rollout status
实时查看版本更新进度,确认新版本是否部署成功:
# 查看my-deployment的发布状态kubectl rollout status deployment/my-deployment# 成功输出示例:deployment \"my-deployment\" successfully rolled out# 失败输出示例:Waiting for deployment \"my-deployment\" rollout to finish: 1 out of 3 new replicas have been updated...
(4)查看发布历史:kubectl rollout history
查看Deployment的所有版本记录,包含每个版本的镜像、配置变更等信息:
# 查看my-deployment的版本历史kubectl rollout history deployment/my-deployment# 输出示例:# deployments \"my-deployment\"# REVISION CHANGE-CAUSE# 1 kubectl create deployment my-deployment --image=nginx:1.14.2# 2 kubectl set image deployment/my-deployment nginx=nginx:1.16.1# 查看指定版本(如版本1)的详细配置kubectl rollout history deployment/my-deployment --revision=1
(5)版本回滚:kubectl rollout undo
当新版本发布失败(如镜像不存在、应用启动报错)时,回滚到上一版本或指定版本:
- 模拟发布失败:将镜像改为不存在的版本(如
nginx:161
):kubectl set image deployment/my-deployment nginx=nginx:161# 查看部署状态,确认失败(新版本Pod无法拉取镜像)kubectl rollout status deployment/my-deployment # 会显示\"Waiting for deployment rollout to finish...\"
- 回滚到上一版本(默认回滚到上一个可用版本):
kubectl rollout undo deployment/my-deployment# 验证回滚结果:查看镜像是否恢复为1.16.1kubectl get deployment my-deployment -o yaml | grep \"image:\"
- 回滚到指定版本(如回滚到版本1,即
nginx:1.14.2
):kubectl rollout undo deployment/my-deployment --to-revision=1# 验证:确认镜像恢复为1.14.2kubectl get deployment my-deployment -o yaml | grep \"image:\"
三、手动扩缩容命令:kubectl scale
1. 核心作用
手动调整控制器(如Deployment、StatefulSet、ReplicaSet)的副本数(replicas),实现实例的扩容(增加副本)或缩容(减少副本),适用于负载可预期的场景(如活动高峰期提前扩容,结束后缩容节省资源)。
2. 实操示例
基于前文创建的my-deployment
(初始副本数为1),演示手动扩缩容:
(1)扩容:从1个副本扩展到3个副本
# 命令格式:kubectl scale [资源类型]/[资源名称] --replicas=[目标副本数]kubectl scale deployment/my-deployment --replicas=3# 验证扩容结果:查看Deployment的副本状态kubectl get deployments my-deployment# 输出示例(扩容中):# NAME READY UP-TO-DATE AVAILABLE AGE# my-deployment 2/3 3 2 10m# 输出示例(扩容完成):# NAME READY UP-TO-DATE AVAILABLE AGE# my-deployment 3/3 3 3 10m# 查看Pod数量,确认3个Pod均已运行kubectl get pods -l app=my-deployment # -l通过标签筛选Pod
(2)缩容:从3个副本减少到2个副本
kubectl scale deployment/my-deployment --replicas=2# 验证缩容结果:Pod数量会从3个减少到2个(K8s会优先删除未承载流量的Pod)kubectl get pods -l app=my-deployment
3. 关键参数说明
--replicas
--replicas=5
(扩容到5个副本)-l
/--selector
kubectl scale deployments --selector app=nginx --replicas=2
(批量调整所有标签为app=nginx
的Deployment)-o
/--output
kubectl scale deployment/my-deployment --replicas=3 -o yaml
(输出扩缩容后的YAML配置)四、自动扩缩容命令:kubectl autoscale
1. 核心作用
基于CPU或内存使用率自动调整副本数,无需人工干预,适用于负载动态变化的场景(如电商平台的流量波动、API服务的请求量变化)。
依赖组件:需提前部署metrics-server
(K8s官方的资源指标采集组件),否则无法获取CPU/内存使用率数据。
2. 核心逻辑与参数
自动扩缩容通过设置“触发阈值”“副本数范围”实现:
- 触发阈值:如CPU使用率超过80%时扩容,低于30%时缩容;
- 副本数范围:
--min
(最小副本数,避免缩容到0导致服务不可用)、--max
(最大副本数,避免过度扩容消耗资源)。
3. 实操示例
为my-deployment
配置自动扩缩容:当CPU使用率超过80%时扩容(最大5个副本),低于30%时缩容(最小2个副本):
# 命令格式:kubectl autoscale [资源类型]/[资源名称] --min=[最小副本数] --max=[最大副本数] --cpu-percent=[CPU阈值]kubectl autoscale deployment/my-deployment --min=2 --max=5 --cpu-percent=80# 验证自动扩缩容配置(查看HPA对象,HPA=Horizontal Pod Autoscaler)kubectl get hpa my-deployment# 输出示例:# NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE# my-deployment Deployment/my-deployment 0%/80% 2 5 2 1m
4. 关键说明
- 查看HPA状态:通过
kubectl get hpa my-deployment -w
(-w
实时监控)查看CPU使用率变化与副本数调整; - 删除自动扩缩容配置:
kubectl delete hpa my-deployment
; - 内存阈值配置:默认仅支持CPU阈值,若需基于内存配置,需通过YAML文件定义(考试中较少涉及,了解即可)。
五、CKA考试命令使用要点
- 资源类型与名称匹配:
rollout
/scale
/autoscale
均需指定正确的资源类型(如deployment
)和资源名称(如my-deployment
),避免操作错误资源; - 版本回滚前提:回滚前需通过
rollout history
确认目标版本号,尤其是多版本发布场景,避免回滚到错误版本; - 扩缩容验证:操作后需通过
kubectl get deployments
/kubectl get pods
验证副本数是否符合预期,避免仅执行命令未确认结果; - 命令简写技巧:
deployment
可简写为deploy
,如kubectl scale deploy/my-deployment --replicas=3
,节省考试时间。
六、总结
kubectl rollout
:版本管理核心,需掌握“查看状态→查看历史→回滚版本”全流程,应对发布失败场景;kubectl scale
:手动扩缩容,考试中高频用于“调整副本数”类题目,重点记忆--replicas
参数;kubectl autoscale
:自动扩缩容,需理解依赖metrics-server
,掌握--min
/--max
/--cpu-percent
参数配置;- 实操优先级:所有命令需结合验证步骤(如
get
/describe
),确保操作生效,这是CKA考试中避免失分的关键。