news 2026/4/24 3:02:12

Kubernetes 操作与项目生命周期管理(初学者详解版)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Kubernetes 操作与项目生命周期管理(初学者详解版)

前言:

学会如何在 Kubernetes 中 创建、发布、更新、回滚、删除 应用,掌握两种管理方式(命令式 vs 声明式),并了解三种主流发布策略。

一、Kubernetes 有两种“操作方式”

就像写程序可以用“手写代码”也可以用“拖拽工具”,K8s 管理资源也有两种风格:

方式名称特点适合场景
陈述式(命令式)Imperative直接敲命令,比如 kubectl create快速测试、临时操作
声明式(配置式)Declarative写 YAML 文件,用 kubectl apply -f xxx.yaml生产环境、版本控制、团队协作

✅ 建议:学习时先用命令式快速上手,工作中尽量用声明式(YAML)!

二、陈述式操作:像“发指令”一样管理应用


2.1 基础信息查看(常用命令)

# 查看 K8s 版本 kubectl version # 查看集群基本信息(API Server 地址等) kubectl cluster-info # 查看所有资源类型及其缩写(如 deploy=Deployment, svc=Service) kubectl api-resources # 查看命名空间(Namespace) kubectl get namespaces # 查看 default 命名空间下的所有资源 kubectl get all -n default

💡 提示:加 -o wide 可看到更多列(如 IP、节点),加 --show-labels 可显示标签。

2.2 创建一个应用(Deployment)

# 创建一个叫 nginx-wl 的 Deployment,使用 nginx 镜像 kubectl create deployment nginx-wl --image=nginx -n kube-public 这会自动创建一个 Pod 副本控制器(ReplicaSet),默认副本数 = 1。 Pod 名字是随机生成的,如 nginx-wl-6d5b8c7f9-xk2l3。

2.3 查看和进入容器

# 查看 Pod 列表 kubectl get pods -n kube-public # 查看某个 Deployment 的详细信息 kubectl describe deployment nginx-wl -n kube-public # 进入容器内部(类似 SSH 登录) kubectl exec -it <Pod名字> -n kube-public -- bash # 查看容器日志 kubectl logs <Pod名字> -n kube-public

2.4删除资源

# 删除 Pod(但 Deployment 会自动重建它!) kubectl delete pod <Pod名字> -n kube-public # 强制立即删除(跳过优雅终止) kubectl delete pod <Pod名字> -n kube-public --force --grace-period=0 # 删除整个 Deployment(连带所有 Pod) kubectl delete deployment nginx-wl -n kube-public

⚠️ 注意:直接删 Pod 没用!因为 控制器(Controller)会自动补上。要删就删控制器本身。

2.5 扩缩容(调整副本数)

# 扩展到 3 个副本 kubectl scale deployment nginx-wl --replicas=3 -n kube-public # 缩减到 1 个副本 kubectl scale deployment nginx-wl --replicas=1 -n kube-public

2.6 对外暴露服务(Service)


为了让外部能访问你的应用,需要创建 Service:

# 将 nginx-wl 暴露为 NodePort 类型的服务 kubectl expose deployment nginx-wl \ --port=80 \ # Service 在集群内的端口 --target-port=80 \ # 转发到 Pod 的端口 --name=nginx-svc \ # 服务名称 --type=NodePort \ # 类型:NodePort(外部可访问) -n kube-public

Service 四种类型:

类型作用是否对外
ClusterIP集群内部访问(默认)
NodePort通过节点 IP + 端口访问
LoadBalancer云厂商提供公网 IP(如 AWS ELB)
ExternalName映射到外部域名——

🔁 端口关系再强调一次:

containerPort:容器内监听的端口(写在 YAML 里)
targetPort:Service 转发到 Pod 的端口(通常 = containerPort)
port:Service 自己的端口(集群内通过 ClusterIP:port 访问)
nodePort:外部通过 节点IP:nodePort 访问(范围 30000–32767)

三、项目完整生命周期:创建 → 发布 → 更新 → 回滚 → 删除

3.1 创建(Create)

kubectl create deployment myapp --image=myapp:v1

3.2 发布(Expose)

kubectl expose deployment myapp --port=8080 --type=NodePort

3.3 更新(Update)

# 将镜像升级到 v2 kubectl set image deployment/myapp myapp=myapp:v2

✅ K8s 默认使用滚动更新:逐步替换旧 Pod,保证服务不中断。

3.4 回滚(Rollback)

如果新版本出问题,可以快速回退!

# 查看更新历史 kubectl rollout history deployment/myapp # 回滚到上一个版本 kubectl rollout undo deployment/myapp # 回滚到指定版本(如 revision=2) kubectl rollout undo deployment/myapp --to-revision=2 # 查看回滚进度 kubectl rollout status deployment/myapp

💡 每次 set image 或 apply 都会产生一个新 revision(版本记录)。

3.5 删除(Delete)

kubectl delete deployment myapp kubectl delete service myapp

四、高级发布策略:不只是“全量更新”


除了默认的滚动更新,还有更安全的发布方式:

4.1 金丝雀发布(Canary Release)——“先让一小部分人试用”


核心思想:先上线新版本给 5% 用户,观察没问题再全量。

K8s 实现思路(需配合 Ingress 或 Service Mesh):

同时部署 v1 和 v2 两个 Deployment;
通过流量权重控制,95% 流量走 v1,5% 走 v2;
监控 v2 的错误率、延迟;
如果稳定,逐步提高 v2 流量比例(20% → 50% → 100%)。
✅ 优点:风险极小,故障只影响少数用户。

❌ 缺点:配置复杂,需要额外工具(如 Nginx Ingress、Istio)。

4.2 蓝绿发布(Blue-Green Deployment)——“两套环境切换”

蓝环境:当前线上版本(v1)
绿环境:新版本(v2),部署好但不对外
测试通过后,一次性将流量从蓝切到绿
✅ 优点:切换快,回滚只需切回蓝环境。

❌ 缺点:需要双倍资源,切换瞬间可能有连接中断。

📌 注:原文件未详细展开蓝绿发布,但它是常见策略之一。

4.3 滚动发布(Rolling Update)——K8s 默认方式

4.3.1、是什么?


逐步替换旧版本 Pod 为新版本,每次只更新一部分,直到全部完成。
Kubernetes 的 Deployment 默认使用滚动发布。

4.3.2 工作方式:


启动 1 个(或几个)新版本 Pod;
等待新 Pod 就绪后,再删除 1 个(或几个)旧版本 Pod;
重复此过程,直到所有旧 Pod 被替换。

⚙️ 可通过 maxSurge 和 maxUnavailable 控制并发数和可用性。

4.3.3 优点:


零停机(服务始终可用)
资源利用率高(不需要额外大量资源)
简单易用(K8s 原生支持)

4.3.4 缺点:


一旦新版本有问题,会影响所有用户(因为最终 100% 流量都会切到新版本)
回滚虽快,但故障已发生。

五、声明式管理:用 YAML 文件“描述”你想要的状态

5.1 为什么用 YAML?


可版本控制(Git 管理)
可复用、可审计
支持复杂配置(如健康检查、资源限制)

5.2 如何生成 YAML?


方法 1:用 --dry-run 自动生成

kubectl create deployment nginx --image=nginx --replicas=3 --dry-run=client -o yaml > nginx.yaml

方法 2:从现有资源导出

kubectl get deployment nginx -o yaml > nginx.yaml

5.3 应用和更新 YAML

# 首次创建 kubectl apply -f nginx.yaml # 修改 YAML 后再次 apply(自动触发滚动更新) kubectl apply -f nginx.yaml

✅ apply 是声明式的核心命令:“让集群变成 YAML 描述的样子”。

5.4 修改配置的三种方式

方式命令是否修改本地文件适用场景
在线编辑kubectl edit deployment/nginx临时调试
离线修改改 xxx.yaml 后 apply正式更新
强制重建先 delete -f 再 apply -fapply 不生效时

六、总结:一张表掌握核心操作

阶段命令式(初学)声明式(生产)
创建kubectl create deployment ...kubectl apply -f app.yaml
发布kubectl expose ...在 YAML 中定义 Service
更新kubectl set image ...修改 YAML 后 apply
回滚kubectl rollout undo ...kubectl apply -f old-version.yaml
删除kubectl delete ...kubectl delete -f app.yaml
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 12:48:02

终极指南:如何在普通PC上安装macOS黑苹果系统

终极指南&#xff1a;如何在普通PC上安装macOS黑苹果系统 【免费下载链接】Hackintosh 国光的黑苹果安装教程&#xff1a;手把手教你配置 OpenCore 项目地址: https://gitcode.com/gh_mirrors/hac/Hackintosh 想要在普通PC电脑上体验macOS的优雅设计吗&#xff1f;国光的…

作者头像 李华
网站建设 2026/4/18 17:22:00

虚幻引擎资源解密:UModel工具深度探索与应用实战

虚幻引擎资源解密&#xff1a;UModel工具深度探索与应用实战 【免费下载链接】UEViewer Viewer and exporter for Unreal Engine 1-4 assets (UE Viewer). 项目地址: https://gitcode.com/gh_mirrors/ue/UEViewer 当游戏资源成为学习障碍时 你是否曾经面对虚幻引擎项目…

作者头像 李华
网站建设 2026/4/20 23:29:18

AI竞赛秘籍:快速搭建中文物体识别比赛环境

AI竞赛秘籍&#xff1a;快速搭建中文物体识别比赛环境 参加AI视觉竞赛时&#xff0c;最让人头疼的莫过于搭建开发环境。依赖冲突、CUDA版本不匹配、数据增强工具缺失……这些问题往往会消耗大量宝贵时间。本文将介绍如何通过预配置的AI竞赛秘籍&#xff1a;快速搭建中文物体识别…

作者头像 李华
网站建设 2026/4/23 12:50:36

Maccy:macOS剪贴板管理终极指南,提升10倍工作效率

Maccy&#xff1a;macOS剪贴板管理终极指南&#xff0c;提升10倍工作效率 【免费下载链接】Maccy Lightweight clipboard manager for macOS 项目地址: https://gitcode.com/gh_mirrors/ma/Maccy 你是否经常在多个应用间切换时&#xff0c;发现之前复制的重要内容不见了…

作者头像 李华
网站建设 2026/4/19 19:21:11

HunterPie插件实战指南:从入门到精通

HunterPie插件实战指南&#xff1a;从入门到精通 【免费下载链接】HunterPie-legacy A complete, modern and clean overlay with Discord Rich Presence integration for Monster Hunter: World. 项目地址: https://gitcode.com/gh_mirrors/hu/HunterPie-legacy 还在为…

作者头像 李华
网站建设 2026/4/18 1:14:29

万物识别知识蒸馏:用云端GPU加速模型传承

万物识别知识蒸馏&#xff1a;用云端GPU加速模型传承 为什么需要知识蒸馏&#xff1f; 在万物识别场景中&#xff0c;我们常常需要部署轻量级模型到移动端或边缘设备。但直接训练小模型往往难以达到大模型的识别精度。知识蒸馏技术通过将大模型&#xff08;教师模型&#xff09…

作者头像 李华