使用 Rancher 進行首次金絲雀部署

過去,可憐的金絲雀會作為試驗品,用來測試煤礦中甲烷的含量。用繩子將裝有金絲雀的籠子放入礦井一段時間,再拉上來,如果金絲雀還活著,礦井就可以安全開采;如果金絲雀死亡,則不能開采。現(xiàn)在,這種方法早已棄用,因為這對動物太不人道了。

金絲雀總是在礦工身邊徘徊,如果它停止鳴叫,則表示礦工必須離開礦井。

金絲雀部署是指兩個版本的應用共存,新版本在開始時規(guī)模較小,處理的負載流量也較少。隨著對新部署的分析,所有請求逐漸切換到新版本,而舊版本應用被移除。

人們普遍認為,管理這些部署的流量需要使用一個 Service Mesh,然而,要管理入站流量,你只需在 nginx ingress controller 上設置 annotations 即可:

nginx.ingress.kubernetes.io/canary:  "true"
nginx.ingress.kubernetes.io/canary-weight:  <num>

這種方法的缺點是必須手動管理。為了實現(xiàn)自動化,我們可以使用 Argo Rollouts (https://argoproj.github.io/argo-rollouts/)。

運行Argo Rollouts

添加 helm-repo: https://argoproj.github.io/argo-helm

argo-rollouts chart:

Helm-values:

installCRDs: true

修改 Deployment 并運行 Rollouts CRD

ScaleDown deployment,設置 Replicas 0:

運行 service

apiVersion: v1
kind: Service
metadata:
   annotations:
     argo-rollouts.argoproj.io/managed-by-rollouts: rollout-pregap
   name: rollouts-pregap-canary
   namespace: pregap
spec:
   clusterIP: 10.43.139.197
   ports:
   - name: http
     port: 8080
     protocol: TCP
     targetPort: 8080
   selector:
     app: test2-pregap
   sessionAffinity: None
   type: ClusterIP
apiVersion: v1
kind: Service
metadata:
   annotations:
     argo-rollouts.argoproj.io/managed-by-rollouts: rollout-pregap
spec:
   clusterIP: 10.43.61.221
   ports:
   - name: http
     port: 8080
     protocol: TCP
     targetPort: 8080
   selector:
     app: test2-pregap
   sessionAffinity: None
   type: ClusterIP

運行 Rollouts CRD

由于我們不想更改Deployment,因此在Rollout manifest中引用它:workloadRef.kind: Deployment, workloadRef.name

運行 manifest 將創(chuàng)建額外 ingress:

Argo Rollouts 儀表板

CD-pipeline 中的其他步驟

在.drone.yml 中添加提升步驟:

- name: promote-release-dr
   image: plugins/docker
   settings:
     repo: 172.16.77.115:5000/pregap
     registry: 172.16.77.115:5000
     insecure: true
     dockerfile: Dockerfile.multistage
     tags:
     - latest
     - ${DRONE_TAG##v}
   when:
     event:
     - promote
     target:
     - production
 
- name: promote-release-prod
   image: plugins/webhook
   settings:
     username: admin
     password: admin
     urls: http://172.16.77.118:9300/v1/webhooks/native
     debug: true
     content_type: application/json
     template: |
       {        "name":  "172.16.77.115:5000/pregap",
         "tag": "${DRONE_TAG##v}"      }
         when:
     event:
     - promote
     target:
     - production

添加 Keel 審批:

結(jié) 論

金絲雀部署或綠/藍部署一點都不難 - 它將提高生產(chǎn)環(huán)境的可靠性,并在出現(xiàn)任何設計錯誤時減少受影響的區(qū)域。將來,我會在服務器上添加 RAM,而且有可能啟用Prometheus 監(jiān)控和 Istio,并嘗試執(zhí)行分析和實驗階段,以實現(xiàn) Argo Rollouts。

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容