亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

基于Kubernetes如何實現藍綠發布

發布時間:2021-11-24 15:03:53 來源:億速云 閱讀:104 作者:柒染 欄目:云計算

這期內容當中小編將會給大家帶來有關基于Kubernetes如何實現藍綠發布,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

前言

軟件世界比以往任何時候都更快。為了保持競爭力,需要盡快推出新的軟件版本,而不會中斷活躍用戶訪問,影響用戶體驗。越來越多企業已將其應用遷移到 Kubernetes。

在 Kubernetes 中有幾種不同的方式發布應用,所以為了讓應用在升級期間依然平穩提供服務,選擇一個正確的發布策略就非常重要了,小編將講解在 Kubernetes 使用藍綠更新的方式更新鏡像。

原理

藍綠發布是版本 1 與版本 2 會同時存在,通過控制 Service 來決定使用具體哪一個版本,也稱為紅黑部署。藍綠發布與滾動更新不同,版本 2 () 與版本 1()一起部署,在測試新版本滿足要求后,然后更新 Service 對象,通過替換 label selector 中的版本標簽來將流量發送到新版本,更新過程如下圖所示

基于Kubernetes如何實現藍綠發布

實踐

使用 Kubernetes 原生方式升級應用

準備

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                              # 通過更改 version 來控制流量走向
  type: LoadBalancer
  ports:
  - port: 80
    targetPort: 8080
    protocol: TCP

將上述 deployment-v1 以及 service 保存為 yaml 文件,使用 kubectl apply -f 命令創建 yaml 資源,等待創建成功后,使用 kubectl get svc 獲取 EXTERNAL-IP。

測試

如果使用瀏覽器測試的話,你會發現每次調用都會返回同一個 pod 的名字,那是因為瀏覽器發出的請求包含 keepAlive,所以需要使用 curl 來保證每次發出的請求都是重新創建的。

curl -X GET http://${EXTERNAL-IP}

基于Kubernetes如何實現藍綠發布

升級

將上述 deployment-v2 保存為 yaml 文件,使用 kubectl apply -f 命令創建 yaml 資源,切換流量之前先執行命令,以便查看鏡像更新過程

while true; do curl -X GET http://${EXTERNAL-IP} ; done

等待 deployment-v2 創建成功后,通過將 service 的 version 值改為 v2 來切換流量

kubectl edit service demo-service
查看日志

基于Kubernetes如何實現藍綠發布

請求流量

基于Kubernetes如何實現藍綠發布

結論

首先可以發現在更新過程中,程序保持一直可用的狀態,v2 版本部署成功之后,所有請求還是 v1 版本,當流量切換后,立刻出現 v2 版本的日志,并且不會出現 v1 版本的日志,說明流量是一次性切換的,如果需要回滾只需要將流量切回 v1 版本即可。

使用 CODING CD 方式升級應用

創建服務

基于Kubernetes如何實現藍綠發布

service

apiVersion: v1
kind: Service
metadata:
  name: demo-service
spec:
  selector:
    createBy: demo-service       # 這里填寫的標簽,會被添加到對應的 ReplicaSet 中
  type: LoadBalancer
  ports:
  - port: 80
    targetPort: 8080
    protocol: TCP

這里注意,service 創建之后應不會匹配到任何資源,即 endpoint 為空,而在后面執行部署流程時會為 ReplicaSet 添加 label createBy: demo-service ,從而決定流量走向。

基于Kubernetes如何實現藍綠發布

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

配置制品

基于Kubernetes如何實現藍綠發布

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

配置 yaml 及綁定制品

基于Kubernetes如何實現藍綠發布

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 文件(目前發布策略選項僅支持 ReplicaSet),這里需要把鏡像的版本刪除掉,在需要綁定的制品選擇之前配置的制品。這樣配置之后,每次執行的時候版本是動態傳入的。

藍綠(紅黑)發布配置

基于Kubernetes如何實現藍綠發布

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

發布制品

基于Kubernetes如何實現藍綠發布

選擇應用和部署流程,輸入版本 v1。

查看結果

基于Kubernetes如何實現藍綠發布

等待一小段時間后,就可以在部署控制臺中看到發布的資源了。

更新鏡像版本

基于Kubernetes如何實現藍綠發布

再次執行發布,版本輸入 v2。

更新原理

基于Kubernetes如何實現藍綠發布

基于 CODING CD 的藍綠發布和一般的藍綠發布略有不同,一旦 v2 版本的 pod 處于就緒狀態后,他就會立即獲得流量,而當所有的 v2 版本的 pod 處于就緒狀態后,會禁用 v1 版本的 pod,此時所有流量會打到 v2 版本上,從而完成更新。

注意:基于 CODING CD 的藍綠發布會出現 v1 版本和 v2 版本同時獲得流量的情況,具體取決于 pod 的就緒探針,v2 版本的 pod 一旦就緒,那么它就會獲得流量,所以需要合理設計就緒探針,盡量減少 v1 版本和 v2 版本同時存在的時間差。

上述就是小編為大家分享的基于Kubernetes如何實現藍綠發布了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

龙山县| 石楼县| 武鸣县| 桐庐县| 澄迈县| 宁城县| 泗阳县| 桦南县| 郎溪县| 玉田县| 江华| 安塞县| 全州县| 阜新市| 崇文区| 黄冈市| 昌图县| 新田县| 页游| 延吉市| 娄底市| 收藏| 枝江市| 白朗县| 苗栗市| 石家庄市| 仙居县| 宾阳县| 武穴市| 开封市| 龙海市| 万年县| 镶黄旗| 丰台区| 墨玉县| 临洮县| 黔西县| 井冈山市| 涿州市| 宣威市| 盐城市|