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% 的坑。

相关推荐
pyniu3 分钟前
Spring Boot车辆管理系统实战开发
java·spring boot·后端
虾说羊3 分钟前
ssm项目本地部署
java·tomcat
资生算法程序员_畅想家_剑魔4 分钟前
Kotlin常见技术分享-01-相对于Java 的核心优势-空安全
java·安全·kotlin
gelald11 分钟前
AQS 解析:从原理到实战
java·后端
2301_7806698611 分钟前
集合框架(Collection单列集合(常用功能,三种遍历方式及通过并发修改异常认识他们的区别)、Map双列集合)
java
进阶小白猿11 分钟前
Java技术八股学习Day14
java·数据库·学习
super_lzb13 分钟前
mybatis拦截器ResultSetHandler详解
java·spring·mybatis·springboot
腥臭腐朽的日子熠熠生辉16 分钟前
nest js docker 化全流程
开发语言·javascript·docker
代码or搬砖17 分钟前
JVM垃圾回收器
java·jvm·算法