前言
对于 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% 的坑。