這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)?lái)有關(guān)基于Kubernetes如何實(shí)現(xiàn)藍(lán)綠發(fā)布,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
創(chuàng)新互聯(lián)建站是專業(yè)的華容網(wǎng)站建設(shè)公司,華容接單;提供成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作、外貿(mào)網(wǎng)站建設(shè),網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行華容網(wǎng)站開發(fā)網(wǎng)頁(yè)制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛(ài)的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來(lái)合作!
軟件世界比以往任何時(shí)候都更快。為了保持競(jìng)爭(zhēng)力,需要盡快推出新的軟件版本,而不會(huì)中斷活躍用戶訪問(wèn),影響用戶體驗(yàn)。越來(lái)越多企業(yè)已將其應(yīng)用遷移到 Kubernetes。
在 Kubernetes 中有幾種不同的方式發(fā)布應(yīng)用,所以為了讓應(yīng)用在升級(jí)期間依然平穩(wěn)提供服務(wù),選擇一個(gè)正確的發(fā)布策略就非常重要了,小編將講解在 Kubernetes 使用藍(lán)綠更新的方式更新鏡像。
藍(lán)綠發(fā)布是版本 1 與版本 2 會(huì)同時(shí)存在,通過(guò)控制 Service 來(lái)決定使用具體哪一個(gè)版本,也稱為紅黑部署。藍(lán)綠發(fā)布與滾動(dòng)更新不同,版本 2 (綠
) 與版本 1(藍(lán)
)一起部署,在測(cè)試新版本滿足要求后,然后更新 Service 對(duì)象,通過(guò)替換 label selector 中的版本標(biāo)簽來(lái)將流量發(fā)送到新版本,更新過(guò)程如下圖所示
image
bebullish/demo:v1 bebullish/demo:v2
deployment-v1
apiVersion: apps/v1 kind: Deployment metadata: name: demo-dp-v1 spec: selector: matchLabels: app: demo version: v1 replicas: 3 template: metadata: labels: app: demo version: v1 spec: containers: - name: demo image: bebullish/demo:v1 ports: - containerPort: 8080
deployment-v2
apiVersion: apps/v1 kind: Deployment metadata: name: demo-dp-v2 spec: selector: matchLabels: app: demo version: v2 replicas: 3 template: metadata: labels: app: demo version: v2 spec: containers: - name: demo image: bebullish/demo:v2 ports: - containerPort: 8080
service
apiVersion: v1 kind: Service metadata: name: demo-service spec: selector: app: demo version: v1 # 通過(guò)更改 version 來(lái)控制流量走向 type: LoadBalancer ports: - port: 80 targetPort: 8080 protocol: TCP
將上述 deployment-v1
以及 service
保存為 yaml 文件,使用 kubectl apply -f
命令創(chuàng)建 yaml 資源,等待創(chuàng)建成功后,使用 kubectl get svc
獲取 EXTERNAL-IP。
如果使用瀏覽器測(cè)試的話,你會(huì)發(fā)現(xiàn)每次調(diào)用都會(huì)返回同一個(gè) pod 的名字,那是因?yàn)闉g覽器發(fā)出的請(qǐng)求包含 keepAlive,所以需要使用 curl 來(lái)保證每次發(fā)出的請(qǐng)求都是重新創(chuàng)建的。
curl -X GET http://${EXTERNAL-IP}
將上述 deployment-v2
保存為 yaml 文件,使用 kubectl apply -f
命令創(chuàng)建 yaml 資源,切換流量之前先執(zhí)行命令,以便查看鏡像更新過(guò)程
while true; do curl -X GET http://${EXTERNAL-IP} ; done
等待 deployment-v2
創(chuàng)建成功后,通過(guò)將 service 的 version 值改為 v2 來(lái)切換流量
kubectl edit service demo-service
首先可以發(fā)現(xiàn)在更新過(guò)程中,程序保持一直可用的狀態(tài),v2 版本部署成功之后,所有請(qǐng)求還是 v1 版本,當(dāng)流量切換后,立刻出現(xiàn) v2 版本的日志,并且不會(huì)出現(xiàn) v1 版本的日志,說(shuō)明流量是一次性切換的,如果需要回滾只需要將流量切回 v1 版本即可。
service
apiVersion: v1 kind: Service metadata: name: demo-service spec: selector: createBy: demo-service # 這里填寫的標(biāo)簽,會(huì)被添加到對(duì)應(yīng)的 ReplicaSet 中 type: LoadBalancer ports: - port: 80 targetPort: 8080 protocol: TCP
這里注意,service 創(chuàng)建之后應(yīng)不會(huì)匹配到任何資源,即 endpoint 為空,而在后面執(zhí)行部署流程時(shí)會(huì)為 ReplicaSet 添加 label createBy: demo-service
,從而決定流量走向。
部署成功之后可以看到 demo-service
使用 docker 官方鏡像需要以 docker.io
開頭
replicaSet
apiVersion: apps/v1 kind: ReplicaSet metadata: name: demo-rs spec: replicas: 3 selector: matchLabels: app: demo template: metadata: labels: app: demo spec: containers: - image: docker.io/bebullish/demo name: demo ports: - containerPort: 8080
階段中選擇 部署(Manifest)
,輸入上述 yaml 文件(目前發(fā)布策略選項(xiàng)僅支持 ReplicaSet),這里需要把鏡像的版本刪除掉,在需要綁定的制品選擇之前配置的制品。這樣配置之后,每次執(zhí)行的時(shí)候版本是動(dòng)態(tài)傳入的。
在下方勾選讓 CODING 部署控制臺(tái)管理入口流量,然后選擇 demo-service
所在的命名空間(我這里是在 marlon
這個(gè)命名空間下),然后選擇 demo-service
,策略選擇 Red/Black(Blue/Green),保存即可。
選擇應(yīng)用和部署流程,輸入版本 v1。
等待一小段時(shí)間后,就可以在部署控制臺(tái)中看到發(fā)布的資源了。
再次執(zhí)行發(fā)布,版本輸入 v2。
基于 CODING CD 的藍(lán)綠發(fā)布和一般的藍(lán)綠發(fā)布略有不同,一旦 v2 版本的 pod 處于就緒狀態(tài)后,他就會(huì)立即獲得流量,而當(dāng)所有的 v2 版本的 pod 處于就緒狀態(tài)后,會(huì)禁用 v1 版本的 pod,此時(shí)所有流量會(huì)打到 v2 版本上,從而完成更新。
注意:基于 CODING CD 的藍(lán)綠發(fā)布會(huì)出現(xiàn) v1 版本和 v2 版本同時(shí)獲得流量的情況,具體取決于 pod 的就緒探針,v2 版本的 pod 一旦就緒,那么它就會(huì)獲得流量,所以需要合理設(shè)計(jì)就緒探針,盡量減少 v1 版本和 v2 版本同時(shí)存在的時(shí)間差。
上述就是小編為大家分享的基于Kubernetes如何實(shí)現(xiàn)藍(lán)綠發(fā)布了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
分享標(biāo)題:基于Kubernetes如何實(shí)現(xiàn)藍(lán)綠發(fā)布
地址分享:http://jinyejixie.com/article24/ijgeje.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站排名、全網(wǎng)營(yíng)銷推廣、軟件開發(fā)、關(guān)鍵詞優(yōu)化、網(wǎng)站策劃、網(wǎng)站收錄
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)