使用 Rancher 进行首次金丝雀部署

网友投稿 256 2022-11-03

使用 Rancher 进行首次金丝雀部署

过去,可怜的金丝雀会作为试验品,用来测试煤矿中甲烷的含量。用绳子将装有金丝雀的笼子放入矿井一段时间,再拉上来,如果金丝雀还活着,矿井就可以安全开采;如果金丝雀死亡,则不能开采。现在,这种方法早已弃用,因为这对动物太不人道了。

金丝雀总是在矿工身边徘徊,如果它停止鸣叫,则表示矿工必须离开矿井。

​金丝雀部署是指两个版本的应用共存,新版本在开始时规模较小,处理的负载流量也较少。随着对新部署的分析,所有请求逐渐切换到新版本,而旧版本应用被移除。​

人们普遍认为,管理这些部署的流量需要使用一个 ​Service Mesh​,然而,要管理入站流量,你只需在 nginx ingress controller 上设置 annotations 即可:

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

这种方法的缺点是必须手动管理。为了实现自动化,我们可以使用 Argo Rollouts (Rollouts​

添加 helm-repo: chart:

Helm-values:

installCRDs: true

​修改 Deployment 并运行 Rollouts CRD​

ScaleDown deployment,设置 Replicas 0:

​运行 service​

apiVersion: v1kind: Servicemetadata: annotations: argo-rollouts.argoproj.io/managed-by-rollouts: rollout-pregap name: rollouts-pregap-canary namespace: pregapspec: clusterIP: 10.43.139.197 ports: - name: port: 8080 protocol: TCP targetPort: 8080 selector: app: test2-pregap sessionAffinity: None type: ClusterIP

apiVersion: v1kind: Servicemetadata: annotations: argo-rollouts.argoproj.io/managed-by-rollouts: rollout-pregapspec: clusterIP: 10.43.61.221 ports: - name: 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 将创建额外 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: debug: true content_type: application/json template: | { "name": "172.16.77.115:5000/pregap", "tag": "${DRONE_TAG##v}" } when: event: - promote target: - production

添加 Keel 审批:

​结  论​

​金丝雀​部署或​绿/蓝​部署一点都不难 - 它将提高生产环境的可靠性,并在出现任何设计错误时减少受影响的区域。将来,我会在服务器上添加 RAM,而且有可能启用Prometheus 监控和 Istio,并尝试执行分析和实验阶段,以实现 Argo Rollouts。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java深入了解数据结构之栈与队列的详解
下一篇:2019年人工智能领域将会有什么变化?
相关文章

 发表评论

暂时没有评论,来抢沙发吧~