成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

基于Kubernetes如何實(shí)現(xiàn)藍(lán)綠發(fā)布

這期內(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ò)程如下圖所示

基于Kubernetes如何實(shí)現(xiàn)藍(lán)綠發(fā)布

實(shí)踐

使用 Kubernetes 原生方式升級(jí)應(yīng)用

準(zhǔn)備

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è)試

如果使用瀏覽器測(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}

基于Kubernetes如何實(shí)現(xiàn)藍(lán)綠發(fā)布

升級(jí)

將上述 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
查看日志

基于Kubernetes如何實(shí)現(xiàn)藍(lán)綠發(fā)布

請(qǐng)求流量

基于Kubernetes如何實(shí)現(xiàn)藍(lán)綠發(fā)布

結(jié)論

首先可以發(fā)現(xiàn)在更新過(guò)程中,程序保持一直可用的狀態(tài),v2 版本部署成功之后,所有請(qǐng)求還是 v1 版本,當(dāng)流量切換后,立刻出現(xiàn) v2 版本的日志,并且不會(huì)出現(xiàn) v1 版本的日志,說(shuō)明流量是一次性切換的,如果需要回滾只需要將流量切回 v1 版本即可。

使用 CODING CD 方式升級(jí)應(yīng)用

創(chuàng)建服務(wù)

基于Kubernetes如何實(shí)現(xiàn)藍(lán)綠發(fā)布

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 ,從而決定流量走向。

基于Kubernetes如何實(shí)現(xiàn)藍(lán)綠發(fā)布

部署成功之后可以看到 demo-service

配置制品

基于Kubernetes如何實(shí)現(xiàn)藍(lán)綠發(fā)布

使用 docker 官方鏡像需要以 docker.io 開頭

配置 yaml 及綁定制品

基于Kubernetes如何實(shí)現(xiàn)藍(lán)綠發(fā)布

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)傳入的。

藍(lán)綠(紅黑)發(fā)布配置

基于Kubernetes如何實(shí)現(xiàn)藍(lán)綠發(fā)布

在下方勾選讓 CODING 部署控制臺(tái)管理入口流量,然后選擇 demo-service 所在的命名空間(我這里是在 marlon 這個(gè)命名空間下),然后選擇 demo-service ,策略選擇 Red/Black(Blue/Green),保存即可。

發(fā)布制品

基于Kubernetes如何實(shí)現(xiàn)藍(lán)綠發(fā)布

選擇應(yīng)用和部署流程,輸入版本 v1。

查看結(jié)果

基于Kubernetes如何實(shí)現(xiàn)藍(lán)綠發(fā)布

等待一小段時(shí)間后,就可以在部署控制臺(tái)中看到發(fā)布的資源了。

更新鏡像版本

基于Kubernetes如何實(shí)現(xiàn)藍(lán)綠發(fā)布

再次執(zhí)行發(fā)布,版本輸入 v2。

更新原理

基于Kubernetes如何實(shí)現(xiàn)藍(lán)綠發(fā)布

基于 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)

小程序開發(fā)
安丘市| 龙州县| 镇原县| 陵水| 桐城市| 长沙市| 绥江县| 淳化县| 司法| 福贡县| 古丈县| 额尔古纳市| 隆子县| 靖安县| 喀喇沁旗| 陵水| 宁化县| 扎囊县| 乌鲁木齐县| 古交市| 乳山市| 山阳县| 四子王旗| 石阡县| 仁布县| 穆棱市| 湖州市| 东乡县| 平远县| 绥宁县| 嘉禾县| 长汀县| 英山县| 许昌市| 克什克腾旗| 普定县| 开平市| 双辽市| 奉贤区| 墨脱县| 安远县|