k8s笔记04-常用部署命令

Kubernetes(K8s)部署与版本管理命令笔记

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

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

命令类别 核心命令 应用场景 关键作用
版本管理 kubectl rollout 应用版本更新、回滚、查看发布历史 解决版本发布失败问题,保障部署安全性
手动扩缩容 kubectl scale 手动调整Deployment/StatefulSet的副本数 应对固定负载变化(如活动前提前扩容)
自动扩缩容 kubectl autoscale 基于CPU/内存负载自动调整副本数 应对动态负载(如流量波动时自动扩容/缩容)

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

1. 核心作用

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

2. 关键子命令与实操

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

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

bash 复制代码
# 创建名为my-deployment的Deployment,镜像为nginx:1.14.2
kubectl create deployment my-deployment --image=nginx:1.14.2
# 验证创建结果
kubectl get deployments my-deployment
(2)发布新版本:修改镜像(触发版本更新)

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

bash 复制代码
# 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
(3)查看发布状态:kubectl rollout status

实时查看版本更新进度,确认新版本是否部署成功:

bash 复制代码
# 查看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的所有版本记录,包含每个版本的镜像、配置变更等信息:

bash 复制代码
# 查看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

当新版本发布失败(如镜像不存在、应用启动报错)时,回滚到上一版本或指定版本:

  1. 模拟发布失败 :将镜像改为不存在的版本(如nginx:161):

    bash 复制代码
    kubectl set image deployment/my-deployment nginx=nginx:161
    # 查看部署状态,确认失败(新版本Pod无法拉取镜像)
    kubectl rollout status deployment/my-deployment  # 会显示"Waiting for deployment rollout to finish..."
  2. 回滚到上一版本 (默认回滚到上一个可用版本):

    bash 复制代码
    kubectl rollout undo deployment/my-deployment
    # 验证回滚结果:查看镜像是否恢复为1.16.1
    kubectl get deployment my-deployment -o yaml | grep "image:"
  3. 回滚到指定版本 (如回滚到版本1,即nginx:1.14.2):

    bash 复制代码
    kubectl rollout undo deployment/my-deployment --to-revision=1
    # 验证:确认镜像恢复为1.14.2
    kubectl get deployment my-deployment -o yaml | grep "image:"

三、手动扩缩容命令:kubectl scale

1. 核心作用

手动调整控制器(如Deployment、StatefulSet、ReplicaSet)的副本数(replicas),实现实例的扩容(增加副本)或缩容(减少副本),适用于负载可预期的场景(如活动高峰期提前扩容,结束后缩容节省资源)。

2. 实操示例

基于前文创建的my-deployment(初始副本数为1),演示手动扩缩容:

(1)扩容:从1个副本扩展到3个副本
bash 复制代码
# 命令格式: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个副本
bash 复制代码
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 指定输出格式(如yaml、json) 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个副本):

bash 复制代码
# 命令格式: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考试命令使用要点

  1. 资源类型与名称匹配rollout/scale/autoscale均需指定正确的资源类型(如deployment)和资源名称(如my-deployment),避免操作错误资源;
  2. 版本回滚前提 :回滚前需通过rollout history确认目标版本号,尤其是多版本发布场景,避免回滚到错误版本;
  3. 扩缩容验证 :操作后需通过kubectl get deployments/kubectl get pods验证副本数是否符合预期,避免仅执行命令未确认结果;
  4. 命令简写技巧deployment可简写为deploy,如kubectl scale deploy/my-deployment --replicas=3,节省考试时间。

六、总结

  1. kubectl rollout:版本管理核心,需掌握"查看状态→查看历史→回滚版本"全流程,应对发布失败场景;
  2. kubectl scale :手动扩缩容,考试中高频用于"调整副本数"类题目,重点记忆--replicas参数;
  3. kubectl autoscale :自动扩缩容,需理解依赖metrics-server,掌握--min/--max/--cpu-percent参数配置;
  4. 实操优先级 :所有命令需结合验证步骤(如get/describe),确保操作生效,这是CKA考试中避免失分的关键。
相关推荐
2501_9418814016 小时前
Kubernetes 容器集群资源调度与弹性扩容高可用架构在互联网业务实战经验总结
云原生·容器·kubernetes
究極の法則に通じた野犬16 小时前
k8s设计理念-k8s中哪些服务要部署成StatefulSet哪些部署成Deployment
云原生·容器·kubernetes
wuxingge16 小时前
k8s集群误删node节点,怎么添加回去
云原生·容器·kubernetes
一只侯子17 小时前
Face AE Tuning
图像处理·笔记·学习·算法·计算机视觉
观测云19 小时前
Kubernetes CRD 方式配置容器日志采集最佳实践
容器·kubernetes·日志分析
whale fall20 小时前
【剑雅14】笔记
笔记
星空的资源小屋21 小时前
跨平台下载神器ArrowDL,一网打尽所有资源
javascript·笔记·django
Xudde.21 小时前
Quick2靶机渗透
笔记·学习·安全·web安全·php
AA陈超1 天前
Git常用命令大全及使用指南
笔记·git·学习
愚戏师1 天前
Python3 Socket 网络编程复习笔记
网络·笔记