如何在部署中指定的不同版本的kubernetes中实现Canary部署

时间:2018-05-15 06:36:12

标签: deployment kubernetes replicaset canary-deployment

我有两个部署文件 1。 的部署-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,它只启用并运行最新的replicaset。

有没有办法实现canary部署,方法是保持单个部署中的replicaset启动并运行v1中的3个pod和v2中的3个pod

2 个答案:

答案 0 :(得分:1)

  1. 您不能使用相同名称进行多次部署。将它们重命名为process-v1和process-v2。
  2. 您需要为每个选择器设置不同的选择器。第一个应该有matchLabels:{app:process,version:v1},第二个匹配标签:{app:process,version:v2}。
  3. 从技术上讲,这将是两个完全独立的部署。是什么让他们成为“基线”和“金丝雀”是你如何向他们发送流量。如果您在服务中指定了通用选择器(仅{app:process}),则两个部署都会看到一小部分流量。

答案 1 :(得分:0)

您要实现的名称是Canary Deployment。它是A / B测试的一项重要功能,可帮助进行持续的交付和生产测试,而不必在负载平衡器和网关中部署相同的秘密。市场上有很多选择(Spring Zuul或Istio Envoy),可以提供一种解决方案,以将内容从一个部署筛选到一定比例,将另一个部署筛选到其他比例...