一、部署核心命令分类与应用场景

K8s中用于应用部署、版本控制与实例扩缩容的核心命令主要包括三类,分别对应“版本回滚”“手动扩缩容”“自动扩缩容”场景,是CKA考试中部署类题目的核心考点。

命令类别 核心命令 应用场景 关键作用

版本管理 kubectl rollout 应用版本更新、回滚、查看发布历史 解决版本发布失败问题,保障部署安全性

手动扩缩容 kubectl scale 手动调整Deployment/StatefulSet的副本数 应对固定负载变化(如活动前提前扩容)

自动扩缩容 kubectl autoscale 基于CPU/内存负载自动调整副本数 应对动态负载(如流量波动时自动扩容/缩容)

二、版本管理命令:kubectl rollout(CKA必考)

1. 核心作用

针对Deployment、StatefulSet等控制器,实现版本发布状态查看、发布历史查询、版本回滚,核心解决“发布失败后快速回退”的问题,配合K8s滚动更新(Rolling Update)策略,确保应用部署无感知且可恢复。

2. 关键子命令与实操

(1)前置准备:创建Deployment示例

首先创建一个基础Deployment(用于后续版本操作演示):

# 创建名为my-deployment的Deployment,镜像为nginx:1.14.2

kubectl create deployment my-deployment --image=nginx:1.14.2

# 验证创建结果

kubectl get deployments my-deployment

AI写代码

bash

1

2

3

4

(2)发布新版本:修改镜像(触发版本更新)

通过kubectl set image修改Deployment的容器镜像,触发新的版本发布(滚动更新):

# 1. 先查看Deployment的容器名称(需与后续修改命令匹配)

kubectl get deployment my-deployment -o yaml | grep "name:" # 输出容器名称为"nginx"

# 2. 将镜像从1.14.2更新为1.16.1

kubectl set image deployment/my-deployment nginx=nginx:1.16.1

AI写代码

bash

1

2

3

4

(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...

AI写代码

bash

1

2

3

4

(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

AI写代码

bash

1

2

3

4

5

6

7

8

9

10

(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..."

AI写代码

bash

1

2

3

回滚到上一版本(默认回滚到上一个可用版本):

kubectl rollout undo deployment/my-deployment

# 验证回滚结果:查看镜像是否恢复为1.16.1

kubectl get deployment my-deployment -o yaml | grep "image:"

AI写代码

bash

1

2

3

回滚到指定版本(如回滚到版本1,即nginx:1.14.2):

kubectl rollout undo deployment/my-deployment --to-revision=1

# 验证:确认镜像恢复为1.14.2

kubectl get deployment my-deployment -o yaml | grep "image:"

AI写代码

bash

1

2

3

三、手动扩缩容命令: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

AI写代码

bash

1

2

3

4

5

6

7

8

9

10

11

12

13

(2)缩容:从3个副本减少到2个副本

kubectl scale deployment/my-deployment --replicas=2

# 验证缩容结果:Pod数量会从3个减少到2个(K8s会优先删除未承载流量的Pod)

kubectl get pods -l app=my-deployment

AI写代码

bash

1

2

3

3. 关键参数说明

参数 作用 示例

--replicas 指定目标副本数(必填) --replicas=5(扩容到5个副本)

-l/--selector 通过标签筛选多个控制器,批量扩缩容 kubectl scale deployments --selector app=nginx --replicas=2(批量调整所有标签为app=nginx的Deployment)

-o/--output 指定输出格式(如yaml、json) kubectl scale deployment/my-deployment --replicas=3 -o yaml(输出扩缩容后的YAML配置)

四、自动扩缩容命令:kubectl autoscale

1. 核心作用

基于CPU或内存使用率自动调整副本数,无需人工干预,适用于负载动态变化的场景(如电商平台的流量波动、API服务的请求量变化)。

依赖组件:需提前部署metrics-server(K8s官方的资源指标采集组件),否则无法获取CPU/内存使用率数据。

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐