K8s 1.18.6版本基於 ingress-nginx 實現金絲雀釋出(灰度釋出)
阿新 • • 發佈:2020-08-23
# K8s 1.18.6版本基於 ingress-nginx 實現金絲雀釋出(灰度釋出)
## 環境
| 軟體 | 版本 |
| ------------------------ | ------- |
| kubernetes | v1.18.6 |
| nginx-ingress-controller | 0.32.0 |
| Rancher | v2.4.5 |
本次實驗基於 Rancher-v2.4.5 部署了1.18.6版本的k8s叢集,nginx-ingress 版本為0.32.0,理論上 ingress-nginx >= 0.21.0都是可以的。
## 介紹
金絲雀釋出:又叫灰度釋出,控制產品從A版本平滑的過度到B版本
ingress-nginx:k8s ingress工具,支援金絲雀釋出,可以實現基於權重、請求頭、請求頭的值、cookie轉發流量。
rancher:k8s叢集管理工具,使用UI簡化k8s相關操作
ingress-nginx canary官方說明:https://github.com/kubernetes/ingress-nginx/blob/master/docs/user-guide/nginx-configuration/annotations.md#canary
## 首先建立兩個nginx應用
1. 部署兩個deployment的http應用
```yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: appv1
labels:
app: v1
spec:
replicas: 1
selector:
matchLabels:
app: v1
template:
metadata:
labels:
app: v1
spec:
containers:
- name: nginx
image: zerchin/canary:v1
ports:
- containerPort: 80
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: appv2
labels:
app: v2
spec:
replicas: 1
selector:
matchLabels:
app: v2
template:
metadata:
labels:
app: v2
spec:
containers:
- name: nginx
image: zerchin/canary:v2
ports:
- containerPort: 80
```
kubectl檢視pod
```powershell
# kubectl get pod -o wide |grep app
appv1-77655949f8-hx6nm 1/1 Running 0 44m 10.60.0.91 xie-no