דלגו לתוכן

Argo CD — מה הוא עושה ואיך מגיעים אליו

  • Pull-based: Argo רץ בתוך ה-cluster, בודק את Git מדי פעם (polling; מרווח הזמן משתנה בין סביבות, אל תניח מספר) ומשווה למצב החי.
  • קורא שני repos בלבד: gitops (values + Application manifests) ו-templates (ה-charts). ה-source (קוד האפליקציה) ו-ci הם לא שלו.
  • מחיל רק מה שמרונדר: הוא מריץ helm template על ה-charts עם ה-values, ומחיל את ה-manifests שיצאו.
  • תמיד אוטומטי: ה-gate הידני של prod נמצא ב-CI (when: manual על job ה-promote), לא ב-Argo. ראה operate.
RepoArgo קורא?מה יש בו
gitopsכןargocd/ (root + Applications), apps/<SERVICE>/ values, observability/
templatesכןcharts/ (ב-targetRevision של <TAG>)
sourceלאקוד + Dockerfile; CI בונה ממנו images
ciלאinclude של pipeline ו-scripts

app-of-apps: מה root מרנדר ומה כל child מרנדר

Section titled “app-of-apps: מה root מרנדר ומה כל child מרנדר”
the picture
root Application (trident-root)
source (ONE): gitops, path argocd/apps
workload = Application manifests (dev, staging, prod, observability)
child Application (trident-dev)
sources (N chart sources + ONE values source)
1 templates @ <TAG> path <CHART_DIR> helm.valueFiles: $values/...
2 templates @ <TAG> path <CHART_DIR> helm.valueFiles: $values/...
3 templates @ <TAG> path <CHART_DIR> helm.valueFiles: $values/...
4 gitops @ main ref: values (no path)
workload = Deployments, Services, ConfigMaps... in destination.namespace
  • $values הוא שם ה-ref של ה-source הרביעי. הוא קיים רק בתוך Argo, לא ב-bash (ראה helm/overview).
  • ה-path של root לא יכול להכיל את הקובץ של root עצמו (נעילה עצמית בעת מחיקה).

ה-bootstrap edge: root הוא האובייקט היחיד שמחילים ידנית

Section titled “ה-bootstrap edge: root הוא האובייקט היחיד שמחילים ידנית”

Argo הוא controller שמסתכל על אובייקטי Application ב-cluster. אם אין אובייקט, אין על מה להגיב. Push ל-Git לא יוצר אותו.

runs on: VM
kubectl apply -f <FILE>
# TRIDENT: kubectl apply -f argocd/root.yaml (wrapped by bash bootstrap/bootstrap.sh)
kubectl -n argocd get applications

איך מוודאים: רשימה עם root ואחריו ה-children (ב-TRIDENT: 5 Applications). repoURL: "" שנשאר ב-root.yaml חוסם את ה-bootstrap script.

מה קורה אחרי commit של promote

Section titled “מה קורה אחרי commit של promote”
  1. promote.sh כותב versions/<ENV>.yaml ב-gitops main (CI, לא Argo).
  2. Argo מבצע polling ל-Git ורואה revision חדש: האפליקציה הופכת OutOfSync.
  3. syncPolicy.automated מפעיל sync.
  4. Argo מריץ מחדש helm template עם ה-values החדשים.
  5. ה-Deployment מקבל image חדש, מתחיל rollout.
  6. ה-kubelet מושך את ה-image עם ה-pull Secret של ה-namespace.

אם Argo לא רואה שינוי: הוא לא קורא את ה-clone המקומי שלך. מה שלא נדחף (git push) לא קיים בשבילו.

אין argocd CLI על ה-VM. עובדים עם kubectl + ה-UI.

runs on: VM
kubectl -n argocd get svc argocd-server

חפש את ה-NodePort של פורט 443 (עמודת PORT(S), למשל 443:<PORT>/TCP), ופתח https://<VM_IP>:<PORT> (ה-certificate self-signed, אשר בדפדפן).

runs on: VM
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath='{.data.password}' | base64 -d; echo

משתמש: admin. איך מוודאים: הסיסמה מודפסת (ואין שורה ריקה אחריה); ה-UI מציג כרטיס לכל Application.

ראה גם: credentials (מי צריך איזה credential), verify/overview.