argocd配合GitOps,可以实现对kubernetes多集群的应用版本管理,目前已用于我负责的业务环境中实现统一发布平台.
在这里记录下使用argocd踩过的坑, 不定期更新
UI上出现了不属于某app的资源
原因: 由于argo controller是根据资源中的annotations里的key(argocd.argoproj.io/instance)来判定这个资源是不是属于某个app,在日常使用的过程,由于团队中使用的是rancher做为容器管理平台,rancher上提供了非常便利的对资源的clone手段,就会产生clone后的资源也会带上相同的annotations,但是在原app下的manifest并不包含这个资源,因此在app下就会出现这个资源且这个资源会被标注为require pruning
,那么在每次sync后,这个clone后的资源就会被删除
解决: 在clone时将annotations删除掉即可.
参考: https://github.com/argoproj/argo-cd/issues/5792
使用用户密码登录时提示
1 | HTTP response body: {"error":"no session information","code":16,"message":"no session information"} |
原因: argocd使用密码认证时会使用密码信息调用/api/session接口生成token信息,然后使用token转换成session, 出现这个错误是由client端没有做这个转换,因此在服务端找不到对应的session信息
添加集群时提示Unauthenticated desc = the server has asked for the client to provide credentials
原因及解决方案: https://gist.github.com/janeczku/b16154194f7f03f772645303af8e9f80
kustomize build out of index
原因: 这个是新版kustomize(v4.0.1)时使用了kyaml的版本的bug, 原因在于kustomizationl.yml中存在非法字符
解决: 回退kustomize为v3.6.1
forbidden: User “system:anonymouns” cantnot get path
解决: 重新使用命令加一下集群解决
1 | rgocd cluster add my-cluster --server 'xxxx' --upsert |
login时提示received the unexpected content-type
执行login 登录命令时提示:
1 | argocd login argocd.local:4433 |
出现以下错误
原因:
参考: https://github.com/argoproj/argo-cd/issues/1415
解决:
1 | argocd login argocd.local:4433 --grpc-web |
如果添加集群的时候提示以下错误,则需要先使用上面的命令进行登录,登录成功后再进行集群的添加操作.
创建token时提示以下错误 not have apikey capability
1 | Unable to generate new token: account 'admin' does not have apiKey capability |
原因: argocd的用户也是通过角色来进行划分的,创建token的用户需要具有 apiKey的权限,这个可以从argocd部署的configmap中查看使用的用户是否具有什么权限.
回滚时提示以下错误revision must be resolved
1 | Unable to load data: revision HEAD must be resolved |
原因: 如果使用argocd命令行的方式同步应用,会导致revision没有commit值,如上图,而回滚时需要revision,因此造成上面的报错.