步骤
安装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
镜像下载不下来的可以到这个网站: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
配置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
更改密码:
argocd account update-password
登录CLI创建应用mock,这是继续使用上篇文章中的Istio示例yaml。
查看应用状态
修改kruise-rollout/deploy.yaml
中的env,把base修改为canary。
查看应用状态,自动创建了两个新的deployment,测试访问,流量打到了canary版本上。
回滚只需把kruise-rollout/deploy.yaml
中的更改回退即可。
继续发布:
kubectl-kruise rollout approve rollouts/rollouts-a
kubectl-kruise rollout approve rollouts/rollouts-b
回滚只需把kruise-rollout/deploy.yaml
中的更改回退即可。
为什么显示OutOfSync状态而不是Synced
查看diff,发现是rollout中的一个annotations不同,Canary一个是大写一个是小写。仓库中rollout是小写的,为什么argocd同步后显示的是大写?
而k8s中的rollouts-a仍然为小写。
参考官方文档:https://argo-cd.readthedocs.io/en/stable/user-guide/diffing/ 添加ignoreDifferences
忽略这个annotations,重新SYNC,但是没有生效。
解决方法:修改rollout的版本,从rollouts.kruise.io/v1alpha1
变成rollouts.kruise.io/v1beta1
,然后使用enableExtraWorkloadForCanary
参数,替代rollouts.kruise.io/rolling-type
这个annotation。
修改后的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。