蓝绿部署、灰度发布、金丝雀发布和 A/B 测试的 K8S 实现方案
1. 蓝绿部署
- 特点:蓝绿部署的核心思想是同时部署两个版本的应用(蓝环境和绿环境),但在某一时刻只有一个环境对外提供服务,另一环境处于待命状态,准备随时切换。
- 缺点:一套环境空跑,资源浪费。
K8S实现蓝绿发布方案:
- 基于控制器创建蓝版本的应用。
- 为蓝版本的 Pod 创建 Service(
xiuxian-svc
)。 - 基于控制器创建绿版本的应用。
- 修改 Service 的标签选择器指向绿版本。
部署步骤:
-
部署蓝版本应用
apiVersion: v1 kind: ReplicationController metadata: name: xiuxian-blue spec: replicas: 3 selector: apps: xiuxian template: metadata: labels: apps: xiuxian spec: containers: - image: registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1 name: xiuxian
-
访问测试:
使用以下命令测试蓝版本的 Service:kubectl get svc while true; do curl 10.200.138.186; sleep 0.5; done
-
部署绿版本:
创建绿版本的配置:apiVersion: v1 kind: ReplicationController metadata: name: xiuxian-green spec: replicas: 3 selector: apps: green template: metadata: labels: apps: green spec: containers: - image: registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v2 name: xiuxian
-
切换版本:
修改xiuxian-svc
的选择器指向green
版本:apiVersion: v1 kind: Service metadata: name: xiuxian-svc spec: type: ClusterIP selector: apps: green ports: - port: 80 targetPort: 80
-
删除测试环境:
使用以下命令删除创建的应用:kubectl delete -f .
2. 灰度发布 | 金丝雀发布
- 特点:灰度发布是逐步替换旧版本,不会一次性全量替换,而是逐步升级一部分应用进行测试,最终完成替换。
- 缺点:无法细粒度控制更新范围。
K8S实现灰度发布方案:
- 部署旧版本:创建并设置副本数为 3。
- 创建 Service:将
xiuxian-svc
与旧版本关联。 - 部署新版本:创建并设置副本数为 1。
- 更新副本数:逐步将旧版本副本数减少,增加新版本副本数。
部署步骤:
-
部署旧版本:
apiVersion: v1 kind: ReplicationController metadata: name: xiuxian-old spec: replicas: 3 selector: apps: v1 template: metadata: labels: apps: v1 school: oldboyedu spec: containers: - image: registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1 name: xiuxian
-
部署新版本:
apiVersion: v1 kind: ReplicationController metadata: name: xiuxian-new spec: replicas: 1 selector: apps: v2 template: metadata: labels: apps: v2 school: oldboyedu spec: containers: - image: registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v2 name: xiuxian
-
逐步替换旧版本:
修改副本数,逐步减少旧版本副本数并增加新版本副本数:kubectl edit rc xiuxian-old # 修改旧版本副本数 kubectl edit rc xiuxian-new # 修改新版本副本数
-
观察 Pod 访问情况:
在这一过程中,新版本和旧版本会共存,逐步替换。
3. A/B 测试
- 特点:A/B 测试允许一部分用户访问新版本,主要用于测试不同版本的效果。
- 缺点:需要额外的组件支持,例如 Istio 插件来进行流量分配和管理。
K8S实现 A/B 测试:
使用 Istio 或其他流量管理工具,可以根据不同的请求路径或其他条件将流量分发到不同版本的应用。
标签:回滚,name,apps,三种,xiuxian,版本,K8S,spec,metadata From: https://www.cnblogs.com/leojazz/p/18678791