news 2026/5/12 17:16:20

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/5/3 10:29:04

MDAIOD 技术制图、机械制图,国家标准介绍

《技术制图》是基础技术标准&#xff0c;是各种专业技术图样的通则性规定。《机械制图》是机械专业制图标准。【要求】为了准确无误地交流技术思想&#xff0c;绘制和阅读工程图样时必须严格遵守《技术制图》与《机械制图》国家标准的有关规定。【国家标准】国家标准简称 “国标…

作者头像 李华
网站建设 2026/5/5 8:32:37

自建翻译服务:3分钟搭建本地DeepL免费翻译工具

自建翻译服务&#xff1a;3分钟搭建本地DeepL免费翻译工具 【免费下载链接】deeplx-local 自建deeplx服务 项目地址: https://gitcode.com/gh_mirrors/de/deeplx-local 还在为翻译API的费用和隐私担忧吗&#xff1f;今天我们来聊聊如何用deeplx-local项目&#xff0c;在…

作者头像 李华
网站建设 2026/5/3 8:09:28

识别模型对比测试:快速搭建多模型评估环境

识别模型对比测试&#xff1a;快速搭建多模型评估环境 在AI技术快速发展的今天&#xff0c;图像识别领域涌现出众多优秀的开源模型&#xff0c;如CLIP、RAM、SAM等。对于技术选型团队来说&#xff0c;如何高效地比较这些模型的性能是一个常见挑战。本文将介绍如何利用预置环境快…

作者头像 李华
网站建设 2026/4/25 8:44:49

如何贡献代码?Z-Image-Turbo GitHub社区参与指南

如何贡献代码&#xff1f;Z-Image-Turbo GitHub社区参与指南 阿里通义Z-Image-Turbo WebUI图像快速生成模型 二次开发构建by科哥 开源即协作&#xff1a;Z-Image-Turbo 不仅是一个高性能 AI 图像生成工具&#xff0c;更是一个开放的开发者生态。本文将手把手教你如何从用户转变…

作者头像 李华
网站建设 2026/5/2 20:36:41

Video Decrypter:终极免费视频解密工具完整指南

Video Decrypter&#xff1a;终极免费视频解密工具完整指南 【免费下载链接】video_decrypter Decrypt video from a streaming site with MPEG-DASH Widevine DRM encryption. 项目地址: https://gitcode.com/gh_mirrors/vi/video_decrypter 在数字内容日益丰富的今天&…

作者头像 李华
网站建设 2026/5/7 22:48:52

Z-Image-Turbo部署费用大揭秘:比商用平台便宜70%

Z-Image-Turbo部署费用大揭秘&#xff1a;比商用平台便宜70% 阿里通义Z-Image-Turbo WebUI图像快速生成模型 二次开发构建by科哥 在AI图像生成领域&#xff0c;成本一直是企业与个人开发者关注的核心问题。市面上主流的商用图像生成平台&#xff08;如Midjourney、DALLE API、…

作者头像 李华