前言
为了使生产环境的应用服务,正常进行切换,而不导致生产环境的故障影响,需要使用到灰度发布
概念
灰度发布,又称金丝雀发布,是将应用的旧版本A与新版本B同时部署在环境中,业务请求可能会被路由到版本A的后端上,也可能会被路由到版本B的后端上;可以自定义灰度发布策略,调整版本A和B的流量占比,渐进式完成新版本应用的全量上线,最大限制地控制新版本发布带来的业务风险,降低故障带来的影响面,同事支持快速回滚。
- 灰度发布流程图
自动部署
]# cat > blue-green-deploy.yml <<-EOF
apiVersion: apps/v1
kind: Deployment
metadata:
namespace: default
name: podinfo
labels:
app: podinfo
spec:
replicas: 4
minReadySeconds: 5
revisionHistoryLimit: 5
progressDeadlineSeconds: 60
strategy:
rollingUpdate:
maxSurge: 25%
maxUnavailable: 1
type: RollingUpdate
selector:
matchLabels:
app: podinfo
template:
metadata:
labels:
app: podinfo
spec:
nodeSelector:
nature.com/persistent-env: dev
containers:
- name: podinfod
image: registry.cn-hangzhou.aliyuncs.com/acs/rollouts-demo:blue
imagePullPolicy: IfNotPresent
ports:
- name: http
containerPort: 8080
protocol: TCP
readinessProbe:
tcpSocket:
port: 8080
initialDelaySeconds: 5
failureThreshold: 3
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 5
---
apiVersion: v1
kind: Service
metadata:
name: my-podinfo-svc
namespace: default
spec:
selector:
app: podinfo
ports:
- protocol: TCP
port: 80
targetPort: 8080
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
namespace: default
name: podinfo
labels:
app: podinfo
spec:
rules:
- host: blue-green.nature.com
http:
paths:
- backend:
serviceName: my-podinfo-svc
servicePort: 80
EOF
]# kubectl apply -f blue-green-deploy.yml
- 灰度发布策略
把镜像blue改为green,再重新部署,会过渡到green,如果部署失败,会回退到blue
结语
… …