K8s 实战笔记:3 种发布策略 + YAML 配置全攻略

前言

对于 Kubernetes(下称 K8s)运维来说,"应用怎么稳当发布""配置文件怎么写不踩坑",是日常工作里绕不开的核心问题。今天结合实操总结,把3 种主流发布策略YAML 配置要点一次性讲清楚。

一、K8s 发布策略:3 种方案,按需选

不同业务对 "风险控制""资源成本" 的要求不同,这 3 种发布方式是生产环境的高频选择:

1. 蓝绿发布:切换快,代价是双资源

  • 工作逻辑:同时部署两个环境 ------"蓝环境" 是当前线上版本(v1),"绿环境" 是新版本(v2)。等 v2 测试通过后,一次性把流量从蓝切到绿;出问题就切回蓝环境。
  • 优势:切换、回滚都能秒级完成,操作门槛低。
  • 劣势:得同时预留 "双份资源"(蓝绿环境都要跑),且流量切换瞬间可能出现连接中断。

2. 滚动发布:零停机,但 Bug 会覆盖全量

  • 工作逻辑:逐步替换旧 Pod------ 每次启动 1 个(或几个)新版 Pod,再销毁对应数量的旧版 Pod,循环直到所有旧 Pod 被替换完。
  • 优势:发布过程中服务不停机,资源利用率高。
  • 劣势:如果新版本有 Bug,会慢慢影响所有用户(没有 "小范围测试" 的缓冲期)。

3. 金丝雀发布:小流量试错,风险最低

  • 工作逻辑:先让 5% 的用户访问新版本(v2),剩下 95% 继续用旧版本(v1);观察 v2 稳定后,逐步提升流量比例(比如 20%→50%→100%),最终下线 v1。
  • 优势:风险可控,即使新版本出问题,也只影响小部分用户。
  • 劣势:配置复杂、额外消耗资源,还得配套完善的监控体系(才能及时发现小流量里的问题)。

二、K8s 配置核心:YAML 文件的 "写对姿势"

YAML 是 K8s 定义资源(Deployment、Service 等)的标配格式,看似简单但细节全是坑,先把基础和实操理清楚:

1. YAML 是什么?

一种简洁易读的配置格式,专门用来在 K8s 里描述 "要创建什么资源、资源的参数是什么"。

2. YAML 必记规则(避坑重点)

  • 大小写敏感(nameName是两个不同字段);
  • 空格缩进 表示层级(禁止用 Tab 键),同一层级的内容缩进必须对齐;
  • 冒号、短横线、逗号后面,必须加一个空格;
  • 文件开头可以用---表示 "新文档开始"(可选);
  • #加注释。

3. K8s 中 YAML 的实操示例

在 K8s 里创建资源,基本都是靠 YAML 文件 +kubectl命令:

  • 创建 Deployment(部署应用) :写好nginx-deployment.yaml后,执行:kubectl create -f nginx-deployment.yaml查看部署结果:kubectl get pods -o wide
  • 创建 Service(对外暴露服务) :写好nginx-service.yaml后,执行:kubectl create -f nginx-service.yaml查看服务状态:kubectl get svc

4. K8s 端口别搞混:4 个 Port 的区别

配置 Service 时,这 4 个端口是高频 "混淆点",得分清:

  • containerPort:容器内部自己监听的端口;
  • targetPort:Service 把请求转发到 Pod 的端口;
  • port:Service 在 K8s 集群内部的访问端口;
  • nodePort:外部通过 "节点 IP + 端口" 访问服务的端口。

5. YAML 高效技巧

  • 快速生成模板:用--dry-run参数,比如:kubectl run nginx --image=nginx --dry-run=client -o yaml
  • 从现有资源导出 YAML:kubectl get deployment nginx -o yaml
  • 遇到陌生字段:用kubectl explain查官方解释(比如kubectl explain deployment.spec

6.K8s YAML 实操:Deployment+Service 示例

在 K8s 中创建资源,核心流程是 "写 YAML 文件 + 用 kubectl 命令执行":

创建 Deployment(部署应用)

编写nginx-deployment.yaml后,执行:

bash 复制代码
# 创建 Nginx 部署
kubectl create -f nginx-deployment.yaml

# 查看部署的 Pod 状态及分布节点
kubectl get pods -o wide
 

创建 Service(对外暴露服务)

编写nginx-service.yaml后,执行:

以下是实现创建 Nginx 服务并查看服务状态的代码示例:

yaml 复制代码
# nginx-service.yaml
apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  selector:
    app: nginx
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
  type: ClusterIP

创建服务

bash 复制代码
kubectl create -f nginx-service.yaml

查看服务状态

bash 复制代码
kubectl get svc nginx-service

查看服务详情

bash 复制代码
kubectl describe svc nginx-service

7.YAML 高效技巧:少写多查,提升效率

快速生成模板:用--dry-run参数一键生成基础 YAML:

yaml 复制代码
kubectl run nginx --image=nginx --dry-run=client -o yaml
 

从现有资源导出 YAML:方便复制已有资源的配置:

bash 复制代码
kubectl get deployment nginx -o yaml
 

查陌生字段:用kubectl explain看官方解释(比翻文档快):

bash 复制代码
kubectl explain deployment.spec
 

总结

小流量测试用金丝雀,追求零停机用滚动,紧急切换用蓝绿;YAML 则记住 "空格缩进、规则细节",配合kubectl命令能少踩 80% 的坑。

相关推荐
身如柳絮随风扬1 小时前
多数据源切换实战:从业务场景到3种实现方案全解析
java·分布式·微服务
Java小生不才1 小时前
Spring AI文生音
java·人工智能·spring
凯尔萨厮2 小时前
Springboot2.x+Thymeleaf项目创建
java
fish_xk2 小时前
map和set
java·开发语言
李崧正2 小时前
Java技术分享:Lambda表达式与函数式编程
java·开发语言·python
老了,不知天命2 小时前
鳶尾花項目JAVA
java·开发语言·机器学习
二哈赛车手2 小时前
新人笔记---实现简易版的rag的bm25检索(利用ES),以及RAG上传时的ES与向量数据库双写
java·数据库·笔记·spring·elasticsearch·ai
sthnyph2 小时前
docker compose安装redis
redis·docker·容器
winner88812 小时前
从零吃透C++命名空间、std、#include、string、vector
java·开发语言·c++
AI人工智能+电脑小能手2 小时前
【大白话说Java面试题】【Java基础篇】第26题:Java的抽象类和接口有哪些区别
java·开发语言·面试