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.pswp.cn/news/920072.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/920072.shtml
英文地址,请注明出处:http://en.pswp.cn/news/920072.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[系统架构设计师]知识产权(二十)

[系统架构设计师]知识产权(二十) 一.知识产权的特性 1.特性 无体性:抽象财富 专有性:权利人同意或法律规定外,权利人以外的任何人不得享有或使用该项权力 地域性:只能在该国范围内手法律保护 时间性&#x…

rk3566编译squashfs报错解决

项目场景: 提示:这里简述项目相关背景: 编译开源的rk3566代码squashfs报错,tspi_linux_sdk_repo_20240131.tar.gz 下之前先读我 1.tspi_linux_sdk_20230916.tar.gz这个是之前老的没有git和repo的版本,后面会删除掉大家…

HTTP 协议与TCP 的其他机制

TCP 的其他机制TCP头部的标志位SYN:请求建立连接标志位ACK:响应报文标志位PSH:携带数据标志位,通知接收方该从缓冲区读数据FIN:请求断开连接标志位RST:复位标志位URG:紧急数据标志位安全可靠机制…

点评《JMeter核心技术、性能测试与性能分析》一书

《JMeter核心技术、性能测试与性能分析》深度评价‌该书作为清华大学出版社2025年推出的性能测试领域新作,展现了鲜明的技术深度与实践导向性,具体评价如下:‌1. 内容体系:系统性与前沿性兼备‌‌知识架构完整‌:覆盖J…

深入解析:为什么应该避免使用 atoi、atol 和 atof 函数

问题本质深度分析 简化源码展示:看清本质 atoi 的典型实现: // atoi 的简化实现 - 看清问题所在 int atoi(const char *str) {int sign 1;int result 0;// 跳过空白字符while (isspace(*str)) {str;}// 处理符号if (*str -) {sign -1;str;} else if …

计算机网络:HTTP、抓包、TCP和UDP报文及重要概念

一、http超文本传输协议(应用层)(一)万维网1.工作过程(二)统一资源定位符(URL)http的默认端口号是80(三)HTTP报文结构请求报文:客户端-->服务器…

three.js+WebGL踩坑经验合集(8.3):合理设置camera.near和camera.far缓解实际场景中的z-fighting叠面问题

本篇延续上篇内容: three.jsWebGL踩坑经验合集(8.2):z-fighting叠面问题和camera.near的坑爹关系-CSDN博客 笔者也是狠佩服自己:一个还没划上句号的文章都能拖了半年才继续写。这次也是运气好,工作上再次遇到叠面问题,可以借这机…

记一次生产环境Hbase填坑之路、Hbase客户端登陆、kerberos认证、端口列表、Pod上手撕代码【Hbase最佳实践】

背景 1、软件系统(转储系统)需要向生产环境迁移:迁到国产操作系统、国产资源池(Hbase存储不变) 2、老环境上的转储系统本身存在写入hbase的性能问题、及部分省份写入hbase失败的问题(20%失败)…

C++知识杂项搜集

C使用如下库优化事件的注册和发布,ZeroMQzmqpp 通信机制,请求-应带方式,push-pull方式,publisher-subcriber发布-订阅模式eventpp 事件注册和回调sockpp tcp/udp封装threadpool 线程池Jinja 一个 python 的模板实现配置是实现…

连锁零售排班难?自动排班系统来解决

零售、连锁企业门店多、员工杂、班次密,排班时总有绕不开的问题:跨门店调人成本怎么算?节假日高峰期人手怎么补?全职兼职混合排班怎么平衡?其实,这些场景化难题,盖雅自动排班系统早就有了针对性…

Android用Coil 3检查媒体资源是否有效,Kotlin

Android用Coil 3检查媒体资源是否有效,Kotlin WorkerThreadfun checkImage(ctx: Context, uri: Uri): Boolean {val t System.currentTimeMillis()val request ImageRequest.Builder(ctx).data(uri).memoryCacheKey(uri.toString()).precision(Precision.INEXACT)…

Seaborn数据可视化实战:Seaborn数据可视化入门-绘制统计图表与数据分析

使用Seaborn绘制统计图表:从入门到精通 学习目标 通过本课程的学习,你将掌握如何使用Seaborn库绘制各种统计图表,包括直方图、密度图和箱形图。你将了解这些图表在数据分析中的应用,以及如何通过图表来更好地理解数据。 相关知识点…

​Mac用户安装JDK 22完整流程(Intel版dmg文件安装指南附安装包下载)​

一、准备工作 ​确认你的 Mac 是 Intel 芯片的​ 如果你的 Mac 是 2020 年及之前出的,大概率是 Intel 芯片,可以用这个 ​jdk-22_macos-x64_bin.dmg。如果是 2020 年之后出的 M1 或 M2 芯片的 Mac(就是 Apple 芯片),那…

C语言——链表指定区间反转

目录 1.创建一个链表 1.链表节点定义 2.创建新节点 3.链表生成(输入) 4.链表输出 2.链表指定区间反转函数 1.创建哑节点 2.找到第m-1位的节点,开始 反转 3.连接反转后的链表与未反转的链表 3.未使用哑节点的运行结果 这段代码可以…

设计一个完整可用的 Spring Boot Starter

目录 1. 创建项目结构 2. 添加核心依赖 (pom.xml) 3. 实现核心组件 (1) 配置属性类 (2) 服务实现类 (3) 自动配置类 4. 注册自动配置 5. 配置元数据支持 6. 打包发布 7. 其他项目引用 (1) 添加依赖 (2) 配置参数 (3) 使用服务 设计要点 要设计一个完整可用的 Spr…

Bright Data 代理 + MCP :解决 Google 搜索反爬的完整方案

个人主页:chian-ocean 专栏 引言 人工智能技术和大数据的发展,实时访问网页数据成为许多应用的核心需求。相比传统方案依赖静态或定期更新的数据,AI可以实时抓取和分析网页上的及时更新的信息,迅速适应变化的环境,提…

Java基础第4天总结(多态)

package com.itheima.duotai;public class Animal {String name "动物";public void run(){System.out.println("动物会跑~~~");} }package com.itheima.duotai;public class Wolf extends Animal{String nama "狼";Overridepublic void run(…

Git克隆时遇到“Filename too long“错误的完美解决方案

Git克隆时遇到"Filename too long"错误的完美解决方案 问题描述 在使用Git克隆项目时,你是否遇到过这样的错误: $ git clone gitexample.com:project.git Cloning into project... remote: Enumerating objects: 1883, done. remote: Count…

分享一个基于Python与spark大数据的护肤品市场用户行为分析与可视化平台,基于hadoop的护肤品使用行为追踪与分析可视化平台的设计与实现

💕💕作者:计算机源码社 💕💕个人简介:本人八年开发经验,擅长Java、Python、PHP、.NET、Node.js、Spark、hadoop、Android、微信小程序、爬虫、大数据、机器学习等,大家有这一块的问题…

页面中嵌入Coze的Chat SDK

Coze 为将 AI 聊天机器人(Bot)嵌入您的网页提供了两种主流方式:Web SDK 和 API 接口调用。它们分别适用于不同的场景,下面我将为您介绍这两种方法,并提供一些选择建议。 特性 Web SDK API 接口调用 实现方式 引入一段JS代码,快速嵌入一个预制的聊天窗口 通过HTTP API发送…