ArgoCD 常用命令

常用

# 列出app
argocd app list

# add repo
argocd repo add git@gitlab-hk.nqspace.com:root/search-ip-deployment.git --insecure-ignore-host-key --ssh-private-key-path ~/.ssh/id_rsa		

# create app
argocd app create centos7 --repo git@gitlab-hk.nqspace.com:root/egradehkeks.git --path default/centos7 --dest-namespace default --dest-server https://kubernetes.default.svc

# 开启同步
argocd app set <APPNAME> --sync-policy auto

# 只同意 syncout 状态的资源
argocd app set <APPNAME> --sync-option ApplyOutOfSyncOnly=true


登录

# 这里域名前不加 http、https;而是用 test.com:443,
argocd login ArgoCD_Address:Port

修改密码

argocd account update-password

添加集群、多集群管理

1. 首先登录 argocd
argocd login argocd.nqspace.com:443 --username admin --password xxxxx
WARN[0002] Failed to invoke grpc call. Use flag --grpc-web in grpc calls. To avoid this warning message, use flag --grpc-web.
'admin:login' logged in successfully
Context 'argocd.nqspace.com:443' updated

2. 获取集群信息
# 获取到目标集群的config配置信息
# 根据config配置信息,获取到目标集群的上下文信息
kubectl config get-contexts
CURRENT   NAME                                          CLUSTER                                AUTHINFO                                      NAMESPACE
*         liulei@egradeHK-eks-dev.ap-east-1.eksctl.io   egradeHK-eks-dev.ap-east-1.eksctl.io   liulei@egradeHK-eks-dev.ap-east-1.eksctl.io  


3. 添加集群
argocd cluster add liulei@egradeHK-eks-dev.ap-east-1.eksctl.io --kubeconfig ~/.kube/config --name egradeHK-eks-dev
WARNING: This will create a service account `argocd-manager` on the cluster referenced by context `liulei@egradeHK-eks-dev.ap-east-1.eksctl.io` with full cluster level privileges. Do you want to continue [y/N]? y
INFO[0005] ServiceAccount "argocd-manager" created in namespace "kube-system"
INFO[0005] ClusterRole "argocd-manager-role" created
INFO[0005] ClusterRoleBinding "argocd-manager-role-binding" created
WARN[0006] Failed to invoke grpc call. Use flag --grpc-web in grpc calls. To avoid this warning message, use flag --grpc-web.
Cluster 'https://xxxxxx.sk1.ap-east-1.eks.amazonaws.com' added


4. 查看集群信息
argocd cluster list
WARN[0001] Failed to invoke grpc call. Use flag --grpc-web in grpc calls. To avoid this warning message, use flag --grpc-web.
SERVER                                                                    NAME              VERSION  STATUS      MESSAGE                                                  PROJECT
https://6AC249D8849A71C56878F2BF7AF9DA02.sk1.ap-east-1.eks.amazonaws.com  egradeHK-eks-dev           Unknown     Cluster has no applications and is not being monitored.
https://kubernetes.default.svc                                            in-cluster        1.20+    Successful

从git仓库创建一个Application

argocd app create guestbook --repo https://github.com/argoproj/argocd-example-apps.git --path guestbook --dest-server https://kubernetes.default.svc --dest-namespace default

创建一个guestbook app,指定仓库地址、应用路径、目标apiserver地址、目标namespace

列出所有app和指定app

argocd app list
argocd app get guestbook

同步指定app

argocd app sync guestbook

管理项目

创建项目

argocd proj create myproject -d https://kubernetes.default.svc,mynamespace -s https://github.com/argoproj/argocd-example-apps.git

-d: 该项目允许使用的apiserver和namespace
-s: 允许使用的git仓库

  • 查看项目列表: argocd proj list
  • 添加项目可使用的git仓库: argocd proj add-source <PROJECT> <REPO>
  • 删除项目可使用的git仓库: argocd proj remove-source <PROJECT> <REPO>
  • 限制项目可使用的k8s资源(cluster级别资源默认拒绝,namespace级别默认允许):
# 允许使用什么样的资源
argocd proj allow-cluster-resource <PROJECT> <GROUP> <KIND>
argocd proj allow-namespace-resource <PROJECT> <GROUP> <KIND>
# 拒绝使用什么样的资源
argocd proj deny-cluster-resource <PROJECT> <GROUP> <KIND>
argocd proj deny-namespace-resource <PROJECT> <GROUP> <KIND>
  • Application分配给项目: argocd app set guestbook-default --project myproject
  • 获取项目信息: argocd proj get myproject
  • 编辑项目yaml: argocd proj edit myproject

管理APP

查看APP列表: argocd app list|get|delete|create

  • -p: 根据项目过滤
  • -l: 根据标签过滤
  • -r: 根据仓库过滤
  • -o: 输出格式。wide|name|json|yaml

手动同步: argocd app sync <APPNAME>

自动同步相关

开启自动同步: argocd app set <APPNAME> --sync-policy auto

关闭自动同步: argocd app set <APPNAME> --sync-policy none

自动同步时,自动删除git中不存在的资源: argocd app set <APPNAME> --auto-prune=true

是否允许一个application有0个资源: argocd app set <APPNAME> --allow-empty=true

时刻保证与git中定义的状态同步: argocd app set <APPNAME> --self-heal=true

自动同步会将所有对象都同步,对apiserver可能会造成更大的压力,可以只同步out-of-sync 状态的资源: argocd app set <APPNAME> --sync-option ApplyOutOfSyncOnly=true

执行自动同步的要求

仅当Application为 OutOfSync 时才会执行自动同步。
同一个commit id只会同步一次,不管成功还是失败

argocd每三分钟会检测git仓库一次,用于判断app与git中描述的状态是否一致,如果不一致状态为OutOfSync。(注意这里并不会触发更新,除非配置了自动同步)