0

我有两个部署文件 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 来实现金丝雀部署

4

2 回答 2

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

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

于 2018-05-15T08:58:26.610 回答
2

您要实现的名称是 Canary 部署。它是 A / B 测试的一个很好的功能,有助于持续交付和生产测试,它不必在负载均衡器和网关中部署秘密。市场上有一些选项(Spring Zuul 或 Istio Envoy)可以提供一种解决方案,将内容从一个部署过滤到一定百分比,另一个过滤到其余部分......

于 2019-05-15T01:44:41.007 回答