Reputation: 51
I have two deployment files
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.
deployment-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
As i have specified two different versions in spec.template.metadata, it does not keep running 6 pods for both replica set, it only enables latest replicaset up and running.
Is there any way to achieve canary deployment by keeping both the replicaset in single deployment up and running with 3 pods from v1 and 3 pods from v2
Upvotes: 0
Views: 2377
Reputation: 153
The name of what you want to implement is Canary Deployment. It is a great feature for A / B testing and assists in continuous delivery and production testing, it does not have to be in the same deploy the secret this in the load balancer and at the gateway. There are options in the market for this (Spring Zuul or Istio Envoy) that can provide a solution that filters content from one deploy to a certain percentage and the other to the rest ...
Upvotes: 2
Reputation: 571
So technically that will be two completely separate deployments. What makes them "baseline" and "canary" is how you send traffic to them. If you specify common selector (just {app: process}) in your service, then both of the deployments will see a fraction of traffic.
Upvotes: 4