一、安裝
1.安裝argocd
kubectl create namespace argocd kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
2.暴露argocd ui
# NodePort方式 kubectl patch service -n argocd argocd-server -p '{"spec": {"type": "NodePort"}}'
3.登陸argocd
# 獲取admin登陸密碼 kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d
4.安裝cli
# 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
二、簡單使用
1.准備git倉庫
$ tree . . ├── README.md └── web-server-headers ├── deploy.yaml ├── ingress.yaml └── svc.yaml
2.配置argocd倉庫
3.創建應用
4.查看結果
三、cli使用
3.1 快速入門操作
1.登陸
argocd login ArgoCD_Address:Port
2.修改密碼
argocd account update-password
3.從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
4.列出所有app和指定app
argocd app list argocd app get guestbook
5.手動從git倉庫同步指定app
argocd app sync guestbook
3.2 管理項目
- 創建項目
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
3.3 管理APP
查看APP列表: argocd app list|get|delete|create -p: 根據項目過濾 -l: 根據標簽過濾 -r: 根據倉庫過濾 -o: 輸出格式。wide|name|json|yaml 手動同步: argocd app sync <APPNAME>
3.4 自動同步相關
開啟自動同步: 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。(注意這里並不會觸發更新,除非配置了自動同步)
解決argocd ingress資源狀態一直Progressing
kubectl edit cm -n argocd argocd-cm data: resource.customizations.health.extensions_Ingress: | hs = {} hs.status = "Healthy" hs.message = "SoulChild" return hs resource.customizations.useOpenLibs.extensions_Ingress: "true"
刪除pod(沒試過不刪行不行),然后argocd重新sync。kubectl delete pod -n argocd argocd-application-controller-0
摘自
https://soulchild.cn/2682.html