当前位置: 首页 > news >正文

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(用于后续版本操作演示):

# 创建名为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的容器镜像,触发新的版本发布(滚动更新):

# 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

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

# 查看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

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

  1. 模拟发布失败:将镜像改为不存在的版本(如nginx:161):
    kubectl set image deployment/my-deployment nginx=nginx:161
    # 查看部署状态,确认失败(新版本Pod无法拉取镜像)
    kubectl rollout status deployment/my-deployment  # 会显示"Waiting for deployment rollout to finish..."
    
  2. 回滚到上一版本(默认回滚到上一个可用版本):
    kubectl rollout undo deployment/my-deployment
    # 验证回滚结果:查看镜像是否恢复为1.16.1
    kubectl get deployment my-deployment -o yaml | grep "image:"
    
  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:"
    

三、手动扩缩容命令: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指定输出格式(如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个副本):

# 命令格式: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考试中避免失分的关键。
http://www.dtcms.com/a/349533.html

相关文章:

  • 血缘元数据采集开放标准:OpenLineage Integrations Apache Spark Quickstart with Jupyter
  • SDC命令详解:使用set_timing_derate命令进行约束
  • 基于C语言实现的KV存储引擎(二)
  • ‌重塑培训架构,助力企业人才战略升级‌
  • 【C语言16天强化训练】从基础入门到进阶:Day 10
  • CPLD与FPGA
  • 《Password Guessing Using Large Language Models》——论文阅读
  • 企业级Java项目整合ELK日志收集分析可视化
  • [论文阅读]RQ-RAG: Learning to Refine Queries for Retrieval Augmented Generation
  • 大模型知识--MCP
  • 无人机芯片休眠模式解析
  • Linux系统的网络管理(一)
  • 血缘元数据采集开放标准:OpenLineage Integrations Apache Spark Main Concepts Installation
  • 05 开发环境和远程仓库Gitlab准备
  • 【spring进阶】spring应用内方法调用时长统计
  • 【数据结构】串——(一)
  • 36 NoSQL 注入
  • Docker 部署 GitLab 并开启 SSH 使用详解
  • 【Java后端】Java 多线程:从原理到实战,再到高频面试题
  • Claude Code 使用及配置智能体
  • 【科研绘图系列】R语言绘制代谢物与临床表型相关性的森林图
  • 从零到一:现代化充电桩App的React前端参考
  • 将FGUI的Shader全部预热后,WebGL平台没有加载成功
  • 基于MalConv的恶意软件检测系统设计与实现
  • 大模型 transformer 步骤
  • 《拉康精神分析学中的欲望辩证法:能指的拓扑学与主体的解构性重构》
  • 计算机大数据技术不会?医院体检数据可视化分析系统Django+Vue全栈方案
  • 不止效率工具:AI 在文化创作中如何重构 “灵感逻辑”?
  • 【DFS 或 BFS 或拓扑排序 - LeetCode】329. 矩阵中的最长递增路径
  • 【图像算法 - 23】工业应用:基于深度学习YOLO12与OpenCV的仪器仪表智能识别系统