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

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
http://www.cnnetsun.cn/news/492659.html

相关文章:

  • 终极指南:零成本自建DeepL翻译服务的完整教程
  • AI识别万物终极指南:预装镜像一键部署中文识别模型
  • 3分钟速成:B站缓存视频格式转换终极解决方案
  • Honey Select 2游戏增强补丁:从零开始的完整配置教程
  • Easy-Scraper终极指南:3分钟学会网页数据抓取的完整教程
  • AI图像生成成本分析:自建VS商用API费用对比
  • 茅台预约终极秘籍:告别手动抢购的完整实战攻略
  • Cangaroo:终极开源CAN总线分析工具完全指南
  • Z-Image-Turbo能商用吗?许可证条款与商业使用边界
  • 百度网盘秒传工具完整使用指南:5分钟实现文件永久分享
  • Windows内存优化秘籍:Mem Reduct让你的电脑重获新生
  • Video Decrypter完整指南:快速解密MPEG-DASH Widevine加密视频
  • Windows多用户远程桌面终极配置指南:RDP Wrapper完整解决方案
  • Honey Select 2 HF Patch终极增强补丁:5步搞定完整安装配置指南
  • 教育机构AI美术课落地:Z-Image-Turbo批量生成教学素材实战
  • 极致内存优化:Mem Reduct让电脑性能重回巅峰的实战指南
  • 中文AI识别自动化:用GitHub Actions实现CI/CD
  • YOLO-World实战指南:3分钟掌握开放词汇目标检测
  • 5步精通STorM32 BGC云台控制:从零搭建到实战优化
  • 番茄小说下载器:终极离线阅读解决方案
  • AI内容创作:快速搭建素材智能分类系统
  • Mac鼠标功能终极配置指南:释放第三方鼠标全部潜能
  • Grammarly Premium免费使用终极指南:Cookie智能搜索技术深度解析
  • 国家自然科学基金LaTeX终极解决方案:告别Word格式困扰,专注科研创新
  • 百度网盘秒传工具终极使用指南:从入门到精通
  • Tomcat 9 多个文件上传
  • 中文物体识别极简教程:不懂Python也能玩转AI
  • XySubFilter:专业字幕渲染解决方案完整指南
  • Z-Image-Turbo对<html lang=“zh-cn“>的支持情况说明
  • 如何通过智能技术方案实现Grammarly高级功能的零成本应用