使用阿里云容器服务Kubernetes实现蓝绿发布功能
背景
在發布應用時,經常需要先上線一個新版本,用較小的流量去測試一下該新版本的可用性。但是Kubernetes的ingress resource 并沒有實現流量控制與切分的功能,導致針對同一個域名下的路徑,只能有一個service來進行服務。這樣對于灰度發布十分不利,下面我們就來介紹一下阿里云容器服務的藍綠發布功能,輕松實現流量切分。
前置條件
既然需要進行藍綠發布,那么應該已經有一個老服務在正常的對外提供服務中。我們這里以nginx 為例,假定已經有一個nginx deployment 通過NodePort對外暴露端口,并且有一個ingress正在對外提供服務。我們使用的模板如下:
apiVersion: extensions/v1beta1 kind: Deployment metadata:labels:run: old-nginxname: old-nginx spec:replicas: 1selector:matchLabels:run: old-nginxtemplate:metadata:labels:run: old-nginxspec:containers:- image: registry.cn-hangzhou.aliyuncs.com/xianlu/old-nginximagePullPolicy: Alwaysname: old-nginxports:- containerPort: 80protocol: TCPrestartPolicy: Always --- apiVersion: v1 kind: Service metadata:labels:run: old-nginxname: old-nginx spec:ports:- port: 80protocol: TCPtargetPort: 80selector:run: old-nginxsessionAffinity: Nonetype: NodePort --- apiVersion: extensions/v1beta1 kind: Ingress metadata:name: echo spec:backend:serviceName: default-http-backendservicePort: 80rules:- host: mini-echo.iohttp:paths:- path: /backend:serviceName: old-nginxservicePort: 80可以看到已經創建好的ingrsss地址
[root@iZwz91e2au5xvyw5jdpqp7Z manifests]# kubectl get ing NAME HOSTS ADDRESS PORTS AGE echo mini-echo.io 47.106.45.47 80 3m我們在本機通過curl訪問可以看到如下效果
~ curl -H "Host: mini-echo.io" http://47.106.45.47 old進行藍綠發布
- 創建新的deployment與service
可以看到,唯一的變化就是,所有的old-nginx 都變成了new-nginx。
- 修改ingress
主要增加兩個地方:
- 效果
可以看到,執行六次請求,分別得到三次新服務,三次老服務的返回,這表明權重設置生效了。
流量完全切換到新服務
只需要將新服務的百分比寫到100就可以,再看一下效果。
可以看到,流量都打到了新服務。
完成藍綠發布
只需要將設置權重的annotation 刪除即可,然后將下面對應的serviceName也刪除,這樣就恢復了原本ingress的原貌,同時將原來的老服務改成了新的服務。下面再來看一下效果:
可以看到,新的服務已經上線,這就完成了整個藍綠發布的完整生命周期。
總結
以上是生活随笔為你收集整理的使用阿里云容器服务Kubernetes实现蓝绿发布功能的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 简单谈谈Docker镜像的使用方法_do
- 下一篇: 沃尔玛建立自家的人工智能网络,抗衡竞争对