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 必记规则(避坑重点)

  • 大小写敏感(name和Name是两个不同字段);
  • 用空格缩进 表示层级(禁止用 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% 的坑。

相关推荐
小羊没烦恼!5 天前
微服务化的基石——持续集成
java·大数据·word·powerpoint·.net
俊昭喜喜里5 天前
java中的继承和多态的区别
java
小羊没烦恼!5 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
譕痕5 天前
JSONObject与JSONArray封装数据格式区别
java·json
胡写代码5 天前
别再前后端各写一套表单校验了
java·后端
小鱼能吃糖5 天前
缺陷修复总览 · mall电商项目:5类缺陷,1个病根,4个业务域
java·电商
此时不提桶,更待何时5 天前
01-06-A-JVM排查实战详解
java·jvm
分布式存储与RustFS5 天前
MinIO 官方 Docker 镜像被移除:依赖它的项目该怎么办
docker·云原生·devops·对象存储·minio·分布式存储
vipxieliang5 天前
ValidX 在 DDD 领域驱动设计中的实践
java·spring boot
ba_pi5 天前
mysql 查询所有表名并授权
java