argocd 安装及入门使用

警告
本文最后更新于 2021-09-29 11:45,文中内容可能已过时。
1
2
kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml

如果使用其他命名空间,需要手动修改 ClusterRoleBinding 引用的 ServiceAccount 所在的 namespace

1
2
# NodePort方式
kubectl patch service -n argocd argocd-server -p '{"spec": {"type": "NodePort"}}'
1
2
# 获取admin登陆密码
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d
1
2
3
4
5
# linux
wget -O /usr/local/bin/argocd https://github.91chifun.workers.dev/https://github.com//argoproj/argo-cd/releases/download/v2.1.2/argocd-linux-amd64 && chmod +x /usr/local/bin/argocd 

# mac
sudo wget -O /usr/local/bin/argocd https://github.91chifun.workers.dev/https://github.com//argoproj/argo-cd/releases/download/v2.1.2/argocd-darwin-amd64 && sudo chmod +x /usr/local/bin/argocd 

目录结构

1
2
3
4
5
6
7
$ tree .
.
├── README.md
└── web-server-headers
    ├── deploy.yaml
    ├── ingress.yaml
    └── svc.yaml

deploy.yaml 是部署文件

53645-7p12nzzzj1q.png
53645-7p12nzzzj1q.png

44264-8p8dcz4gba.png
44264-8p8dcz4gba.png

08298-w403pblpvnd.png
08298-w403pblpvnd.png

74565-97zgp2ps7j.png
74565-97zgp2ps7j.png

1. 登陆

1
argocd login ArgoCD_Address:Port

37459-3hgps5l2tl4.png
37459-3hgps5l2tl4.png

2. 修改密码

1
argocd account update-password

3. 从 git 仓库创建一个 Application

1
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

4. 列出所有 app 和指定 app

1
2
argocd app list
argocd app get guestbook

5. 手动从 git 仓库同步指定 app

1
argocd app sync guestbook

72158-qlb856vuy8.png
72158-qlb856vuy8.png

  • 创建项目
1
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 级别默认允许):

1
2
3
4
5
6
# 允许使用什么样的资源
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 列表: 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。(注意这里并不会触发更新,除非配置了自动同步)

请我喝杯水
SoulChild 微信号 微信号
SoulChild 微信打赏 微信打赏
0%