一、安装
仓库
1.1 安装argo-rollouts
- 创建命名空间
1
| kubectl create namespace argo-rollouts
|
- 下载
yaml 文件
1
| wget -O argo_rollouts_v1.9.0_install.yaml https://github.com/argoproj/argo-rollouts/releases/download/v1.9.0/install.yaml
|
代理
1
| wget -O argo_rollouts_v1.9.0_install.yaml https://g.bravexist.cn/https://github.com/argoproj/argo-rollouts/releases/download/v1.9.0/install.yaml
|
- 创建资源
1
| kubectl apply -n argo-rollouts -f argo_rollouts_v1.9.0_install.yaml
|
- 验证
1
| kubectl get all -n argo-rollouts
|
1.2 安装Kubectl 插件
- 下载
1
| wget https://github.com/argoproj/argo-rollouts/releases/download/v1.9.0/kubectl-argo-rollouts-linux-amd64
|
代理
1
| wget https://g.bravexist.cn/https://github.com/argoproj/argo-rollouts/releases/download/v1.9.0/kubectl-argo-rollouts-linux-amd64
|
- 移动
1
| mv kubectl-argo-rollouts-linux-amd64 /usr/local/bin/kubectl-argo-rollouts
|
- 添加可执行权限
1
| chmod u+x /usr/local/bin/kubectl-argo-rollouts
|
- 验证
1
| kubectl argo rollouts version
|
1.3 安装dashboard插件
- 下载资源清单
1
| wget -O argo_rollouts_dashboard_v1.9.0_install.yaml https://github.com/argoproj/argo-rollouts/releases/download/v1.9.0/dashboard-install.yaml
|
代理
1
| wget -O argo_rollouts_dashboard_v1.9.0_install.yaml https://g.bravexist.cn/https://github.com/argoproj/argo-rollouts/releases/download/v1.9.0/dashboard-install.yaml
|
- 创建资源
1
| kubectl apply -f argo_rollouts_dashboard_v1.9.0_install.yaml -n argo-rollouts
|
- 编辑 ingress 资源清单
1
| vim ingress_dashboard.yaml
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: argo-rollouts namespace: argo-rollouts annotations: cert-manager.io/cluster-issuer: qx-ca-issuer spec: ingressClassName: traefik tls: - hosts: - argo-rollouts.qx.lab secretName: argo-rollouts-tls rules: - host: argo-rollouts.qx.lab http: paths: - path: / pathType: Prefix backend: service: name: argo-rollouts-dashboard port: number: 3100
|
- 创建资源
1
| kubectl apply -f ingress_dashboard.yaml
|
二、蓝绿部署
2.1 创建资源清单文件
- 创建子目录
1 2
| mkdir argorollout-blue-green cd argorollout-blue-green
|
- 编辑资源清单文件
rollout
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| apiVersion: argoproj.io/v1alpha1 kind: Rollout metadata: name: bluegreen-rollout spec: replicas: 2 strategy: blueGreen: activeService: bluegreen-active previewService: bluegreen-preview autoPromotionEnabled: false previewReplicaCount: 1 revisionHistoryLimit: 2 selector: matchLabels: app: myapp template: metadata: labels: app: myapp spec: containers: - name: myapp image: ikubernetes/myapp:v1 ports: - name: http containerPort: 80 protocol: TCP
|
service
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| apiVersion: v1 kind: Service metadata: name: bluegreen-active spec: type: ClusterIP selector: app: myapp ports: - name: http port: 80 ---
apiVersion: v1 kind: Service metadata: name: bluegreen-preview spec: type: ClusterIP selector: app: myapp ports: - name: http port: 80
|
ingress
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: myapp-prod annotations: cert-manager.io/cluster-issuer: qx-ca-issuer spec: ingressClassName: traefik tls: - hosts: - prod.myapp.qx.lab secretName: prod-myapp-tls rules: - host: prod.myapp.qx.lab http: paths: - path: / pathType: Prefix backend: service: name: bluegreen-active port: number: 80 --- apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: myapp-test annotations: cert-manager.io/cluster-issuer: qx-ca-issuer spec: ingressClassName: traefik tls: - hosts: - test.myapp.qx.lab secretName: test-myapp-tls rules: - host: test.myapp.qx.lab http: paths: - path: / pathType: Prefix backend: service: name: bluegreen-preview port: number: 80
|
2.2 部署 application
可以 webui 点一点,也可以直接 yaml 部署。这里图方便,yaml 直接部署。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| apiVersion: argoproj.io/v1alpha1 kind: Application metadata: name: blue-green namespace: argocd spec: destination: name: '' namespace: default server: 'https://kubernetes.default.svc' source: path: argorollout-blue-green repoURL: 'git@gitlab.qx.lab:qiaoxiong/argodemo.git' path: argorollout-blue-green targetRevision: HEAD sources: [] project: default syncPolicy: automated: prune: false selfHeal: false
|
2.3 更新镜像
可以看到效果,预览版本已经更新了,生产版本还未更新,需要手动确认。
- 查看状态
1
| kubectl argo rollouts get rollout bluegreen-rollout
|
- 验证无误,跟随预览
1
| kubectl argo rollouts promote bluegreen-rollout
|
- 如果更新到生产环境后,发现有问题,依旧可以回滚。
1 2
| web 页面回滚 预览环境会先回滚,然后生产环境跟随即可
|
1
| kubectl argo rollouts undo bluegreen-rollout
|
指定版本回滚
1
| kubectl argo rollouts undo bluegreen-rollout --revision=2
|
- 预览环境有问题,终止发布,预览环境会在一会儿后销毁。
1
| kubectl argo rollouts abort bluegreen-rollout
|