首页 > 解决方案 > 如何在deployment中指定不同版本的kubernetes中实现Canary部署

问题描述

我有两个部署文件 1. deployment-1.yaml apiVersion: apps/v1 kind: Deployment metadata: name: process labels: app: process spec: replicas: 3 selector: matchLabels: app: process template: metadata: labels: app: process version: v1 spec: containers: - name: pull image: parma/k8s-php:red ports: - containerPort: 80

2. 部署-2.yaml apiVersion: apps/v1 kind: Deployment metadata: name: process labels: app: process spec: replicas: 3 selector: matchLabels: app: process template: metadata: labels: app: process version: v2 spec: containers: - name: pull image: parma/k8s-php:green ports: - containerPort: 80

由于我在 spec.template.metadata 中指定了两个不同的版本,它不会为两个副本集继续运行 6 个 pod,它只会启用最新的副本集并运行。

有没有办法通过保持单个部署中的副本集启动并运行 v1 中的 3 个 pod 和 v2 中的 3 个 pod 来实现金丝雀部署

标签: deploymentkubernetesreplicasetcanary-deployment

解决方案


  1. 您不能有多个具有相同名称的部署。将它们重命名为 process-v1 和 process-v2。
  2. 您需要为每个选择器设置不同的选择器。第一个应该有 matchLabels: {app: process, version: v1},第二个 matchLabels: {app: process, version: v2}。

所以从技术上讲,这将是两个完全独立的部署。使它们成为“基线”和“金丝雀”的是您如何向它们发送流量。如果您在服务中指定通用选择器(仅 {app:process}),那么两个部署都会看到一小部分流量。


推荐阅读