Kruise Rollout+Argo CD全链路灰度

步骤

安装Argo CD

k8s版本1.26.15,argocd版本2.16.6。
官方文档:https://argo-cd.readthedocs.io/en/stable/getting_started/

kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml

file

镜像下载不下来的可以到这个网站:https://docker.aityp.com/, 搜索替换镜像id。

安装Argo CD CLI

curl -sSL -o argocd-linux-amd64 https://github.com/argoproj/argo-cd/releases/latest/download/argocd-linux-amd64
sudo install -m 555 argocd-linux-amd64 /usr/local/bin/argocd
rm argocd-linux-amd64

file

配置Argo CD Server

可以修改argocd server的svc,也可以配置ingress。ingress配置参考:https://argo-cd.readthedocs.io/en/stable/operator-manual/ingress/

这里修改svc为NodePort。

登录CLI

密码保存在名字为argocd-initial-admin-secret的secret的password字段中,也可以用命令获取密码:

argocd admin initial-password -n argocd

登录,这里可以用svc的地址,也可以修改为NodePort或LoadBalancer。

argocd login --insecure ip:port

file

更改密码:

argocd account update-password

登录CLI创建应用mock,这是继续使用上篇文章中的Istio示例yaml。

file

查看应用状态

file

file

修改kruise-rollout/deploy.yaml中的env,把base修改为canary。

file

查看应用状态,自动创建了两个新的deployment,测试访问,流量打到了canary版本上。

file

file

回滚只需把kruise-rollout/deploy.yaml中的更改回退即可。

继续发布:

kubectl-kruise rollout approve rollouts/rollouts-a
kubectl-kruise rollout approve rollouts/rollouts-b

file

回滚只需把kruise-rollout/deploy.yaml中的更改回退即可。

为什么显示OutOfSync状态而不是Synced

file

查看diff,发现是rollout中的一个annotations不同,Canary一个是大写一个是小写。仓库中rollout是小写的,为什么argocd同步后显示的是大写?

file

file

而k8s中的rollouts-a仍然为小写。

file

参考官方文档:https://argo-cd.readthedocs.io/en/stable/user-guide/diffing/ 添加ignoreDifferences忽略这个annotations,重新SYNC,但是没有生效。

file

解决方法:修改rollout的版本,从rollouts.kruise.io/v1alpha1变成rollouts.kruise.io/v1beta1,然后使用enableExtraWorkloadForCanary参数,替代rollouts.kruise.io/rolling-type这个annotation。

file

修改后的yaml如下:

apiVersion: rollouts.kruise.io/v1beta1
kind: Rollout
metadata:
  name: rollouts-a
spec:
  workloadRef:
    apiVersion: apps/v1
    kind: Deployment
    name: mocka-base
  strategy:
    canary:
      enableExtraWorkloadForCanary: true
      steps:
      - replicas: 1
        pause: {}
      patchPodTemplateMetadata:
        labels:
          istio.service.tag: gray
          version: canary
      trafficRoutingRef: mocka-tr
---
apiVersion: rollouts.kruise.io/v1alpha1
kind: Rollout
metadata:
  name: rollouts-b
spec:
  workloadRef:
    apiVersion: apps/v1
    kind: Deployment
    name: mockb-base
  strategy:
    canary:
      enableExtraWorkloadForCanary: true
      steps:
      - replicas: 1
        pause: {}
      patchPodTemplateMetadata:
        labels:
          istio.service.tag: gray
          version: canary
      trafficRoutingRef: mockb-tr

同步后,状态变为Synced。

file

0 0 投票数
文章评分
订阅评论
提醒
guest

0 评论
最旧
最新 最多投票
内联反馈
查看所有评论

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部
0
希望看到您的想法,请您发表评论x