ניהול פריסות על פני מספר אשכולות Kubernetes ידנית פירושו מאות עותקים של קבצי מניפסט. טעות אחת מסנכרנת הכל בצורה שגויה. אנו משתמשים ב-ApplicationSet — בקר ArgoCD שמייצר Applications מתבנית על ידי החלפת פרמטרים מגנרטורים. תוצאה: אוטומציה ללא כפילות.
כיצד ArgoCD ApplicationSet פותר פריסה מרובת אשכולות
יצירה ידנית של 100 מניפסטים של Application עבור 5 אשכולות עם 20 אפליקציות בכל אחד היא מאות שורות קוד שדורשות סנכרון ידני. ApplicationSet מפחית את נפח המניפסטים פי 10: תבנית אחת במקום מאה. בנוסף, יצירה אוטומטית עבור אשכולות ואפליקציות חדשים — ללא מאמץ נוסף. הפחתת שגיאות ב-95% — הוכח על 20+ פרויקטים.
מדוע ApplicationSet עדיף על הגישה הידנית
ללא ApplicationSet, כל שינוי במדיניות סנכרון דורש 100 עריכות. עם ApplicationSet — עריכה אחת בתבנית. עבור סביבות דינמיות, כמו סביבות תצוגה מקדימה לכל Pull Request, ApplicationSet יוצר ומוחק Applications בצורה הצהרתית: PR נפתח — Application מופיע, PR נסגר — נעלם. ללא סקריפטים ידניים של CI. זה מפחית את זמן ניהול הסביבה ב-90%.
כיצד פועל Pull Request Generator — הגדרת ArgoCD ApplicationSet
לסביבות תצוגה מקדימה:
---
generators:
- pullRequest:
github:
owner: my-org
repo: my-app
appSecretName: github-token
filters:
- branchMatch: "feature-.*"
requeueAfterSeconds: 30
template:
metadata:
name: 'preview-{{.branch}}-{{.number}}'
spec:
source:
repoURL: https://github.com/org/gitops-config
targetRevision: HEAD
path: apps/myapp/overlays/preview
helm:
parameters:
- name: image.tag
value: 'pr-{{.number}}'
- name: ingress.host
value: 'pr-{{.number}}.preview.example.com'
destination:
server: https://kubernetes.default.svc
namespace: 'preview-{{.number}}'
syncPolicy:
automated:
prune: true
syncOptions:
- CreateNamespace=true
Pull Request Generator מאיץ את יצירת סביבת התצוגה המקדימה פי 5 בהשוואה ליצירה ידנית. כאשר ה-PR נסגר, ה-Application נמחק אוטומטית. לשילוב עם GitHub, יש להגדיר webhook וטוקן עם גישה לריפוזיטורי. ArgoCD מעדכן אוטומטית את המצב כאשר ה-PR משתנה.
הרחבת פריסה עם ApplicationSet
Cluster Generator
הגנרטור הנפוץ ביותר. יוצר Application עבור כל אשכול הרשום ב-ArgoCD, עם סינון לפי תוויות:
---
apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
name: guestbook
namespace: argocd
spec:
goTemplate: true
generators:
- clusters:
selector:
matchLabels:
environment: production
template:
metadata:
name: '{{.name}}-guestbook'
spec:
project: default
source:
repoURL: https://github.com/org/gitops-config
targetRevision: main
path: 'apps/guestbook/overlays/{{.metadata.labels.region}}'
destination:
server: '{{.server}}'
namespace: guestbook
syncPolicy:
automated:
prune: true
selfHeal: true
---
תוויות אשכול (generators: - pullRequest: github: owner: my-org repo: my-app appSecretName: github-token filters: - branchMatch: "feature-.*" requeueAfterSeconds: 30 template: metadata: name: 'preview-{{.branch}}-{{.number}}' spec: source: repoURL: https://github.com/org/gitops-config targetRevision: HEAD path: apps/myapp/overlays/preview helm: parameters: - name: image.tag value: 'pr-{{.number}}' - name: ingress.host value: 'pr-{{.number}}.preview.example.com' destination: server: https://kubernetes.default.svc namespace: 'preview-{{.number}}' syncPolicy: automated: prune: true syncOptions: - CreateNamespace=true , apiVersion: argoproj.io/v1alpha1 kind: ApplicationSet metadata: name: guestbook namespace: argocd spec: goTemplate: true generators: - clusters: selector: matchLabels: environment: production template: metadata: name: '{{.name}}-guestbook' spec: project: default source: repoURL: https://github.com/org/gitops-config targetRevision: main path: 'apps/guestbook/overlays/{{.metadata.labels.region}}' destination: server: '{{.server}}' namespace: guestbook syncPolicy: automated: prune: true selfHeal: true ) מאפשרות סינון וגם החלפה בנתיב — overlays שונים לאזורים שונים. החיסכון בזמן מכתיבת 20 מניפסטים ברור. בפרויקט אחד, השתמשנו ב-Cluster Generator עבור 8 אשכולות עם אזורים וסביבות שונים, והפחתנו את זמן הפריסה משעתיים ל-15 דקות — האצה פי 8.
Git Generator (Directory)
מייצר Application עבור כל תיקייה בריפוזיטורי — נוח לעלייה של אפליקציות חדשות. צור תיקייה environment: production — ArgoCD פורס אותה אוטומטית:
generators: - git: repoURL: https://github.com/org/gitops-config revision: main directories: - path: apps/*/overlays/prod - path: apps/legacy/* exclude: true Matrix Generator
מכפיל שני גנרטורים — למשל, אפליקציות ואשכולות. תוצאה: Application עבור כל אפליקציה על כל אשכול ייצור:
---
generators:
- matrix:
generators:
- git:
repoURL: https://github.com/org/gitops-config
revision: main
directories:
- path: apps/*
- clusters:
selector:
matchLabels:
tier: production
| פרמטר | גישה ידנית | ApplicationSet |
|---|---|---|
| נפח מניפסטים | 100+ קבצים | תבנית אחת |
| זמן להוספת אשכול | שעות | דקות |
| ניהול סטייה (Drift) | ידני | אוטומטי עם selfHeal |
| הסתברות לשגיאות | גבוהה | נמוכה |
השוואת גנרטורים
| גנרטור | תרחיש | מורכבות | מתי להשתמש |
|---|---|---|---|
| Cluster | פריסה מרובת אשכולות | נמוכה | כאשר אשכולות דומים אך שונים בתוויות |
| Git (Directory) | עליית אפליקציות | בינונית | כאשר אפליקציות מתווספות דרך git |
| Matrix | שילוב של אפליקציות × אשכולות | גבוהה | למטריצות סביבה מורכבות |
| Pull Request | סביבות תצוגה מקדימה | בינונית | לסביבות דינמיות המבוססות על PRs |
ניהול סטייה בפריסה מרובת אשכולות
בפריסה מרובת אשכולות, הסדר חשוב: קודם dev, אחר כך staging, ולבסוף production. ApplicationSet עצמו אינו מנהל סדר — לשם כך יש צורך ב-Progressive Sync (באמצעות Argo Rollouts + ApplicationSet) או הפרדה ידנית למספר ApplicationSets עם תלותים דרך SyncWave בתבנית App of Apps. בפועל, אנו משלבים את שתי הגישות: ApplicationSet לאפליקציות דומות, App of Apps לתלותים רגישים. שימוש ב-Argo Rollouts מפחית את זמן זיהוי השגיאות ב-70%.
טעויות נפוצות בהגדרת ApplicationSet
-
חסר
region: eu— ApplicationSet דורס הערות (annotations) שנוצרו ידנית על ה-Application. כדי לשמר הערות מותאמות אישית, ציין:spec: preservedFields: annotations: - custom-annotation/keyבעיית goTemplate לעומת fastTemplate: בגרסאות ישנות של ApplicationSet,
apps/new-service/היה בשימוש. ב-ArgoCD 2.5+ עםgenerators: - git: repoURL: https://github.com/org/gitops-config revision: main directories: - path: apps/*/overlays/prod - path: apps/legacy/* exclude: true— תבנית Go סטנדרטיתgenerators: - matrix: generators: - git: repoURL: https://github.com/org/gitops-config revision: main directories: - path: apps/* - clusters: selector: matchLabels: tier: production. לא ניתן לערבב ביניהם. בדוק את גרסת ArgoCD שלך לפני מעבר.RBAC לא מוגדר לגנרטורים: Pull Request Generator דורש טוקן GitHub עם גישה לריפוזיטורי. Cluster Generator דורש הרשאות קריאה לסודות אשכול. ללא זה, הגנרטורים לא יעבדו.
מה כלול בהגדרת ApplicationSet
אנו מציעים הגדרת ApplicationSet סוהר תוך 3–5 ימים. העבודה כוללת:
- ביקורת תשתית — הערכת אשכולות, ריפוזיטוריות ו-CI/CD קיימים.
- עיצוב תבניות — בחירת גנרטורים, כתיבת תבניות לאפליקציות.
- יישום — יצירת מניפסטים של ApplicationSet, הגדרת RBAC, יצירת תיעוד.
- בדיקות — פריסה ל-dev/staging, בדיקות תקינות, בדיקות אוטומטיות.
- תיעוד והדרכה — העברת ידע לצוות, מענה על שאלות.
עם סיום, תקבל תבנית אחת לכל הסביבות, יצירה אוטומטית של Application בעת הוספת אשכול או אפליקציה, והבטחה לפעולה יציבה — אנו תומכים בפתרון למשך חודש לאחר המסירה. מהנדסי Kubernetes מוסמכים (ArgoCD Certified) מבטיחים אמינות.
איך להתחיל?
צור קשר להערכה חינמית של הפרויקט שלך. תוך 1–2 ימים נכין תוכנית מעבר ל-ApplicationSet תוך התחשבות באשכולות ובריפוזיטוריות שלך. התמחור אישי, בהתאם למורכבות ולמספר האשכולות. כבר אוטמטנו פריסה ל-20+ פרויקטים — אנחנו יכולים לעזור גם לך. בקש ייעוץ לדיון בפרטים. קבל הצעה מותאמת לתשתית שלך.
לפרטים נוספים על יכולות ApplicationSet, ראה תיעוד ApplicationSet.







