בדף הזה מוצגת הארכיטקטורה של סנכרון תצורות, כולל הרכיבים המתארחים שפועלים ב- Google Cloud והרכיבים בקוד פתוח שפועלים באשכול Google Kubernetes Engine. הבנת הארכיטקטורה יכולה לעזור לכם להבין טוב יותר את סנכרון תצורות, ולנפות באגים ולתקן בעיות שאתם נתקלים בהן.
בקטע הבא מוצגת הארכיטקטורה של סנכרון תצורות, כולל הרכיבים והתלות שלה, גם ב- Google Cloud וגם באשכול GKE שלכם:
Fleet service מנהל את רכיבי סנכרון תצורות ישירות באשכול, ללא ConfigManagement Operator מדור קודם או אובייקט ConfigManagement. צריך לשדרג את סנכרון תצורות באופן ידני לפי הצורך.
יש כמה שלבים להתקנת סנכרון תצורות, ובכל אחד מהשלבים האלה נפרסים רכיבים נוספים באשכול:
הפעלת סנכרון תצורות באשכול מוסיפה את הרכיבים הבאים:
ConfigSyncהגדרת משאב בהתאמה אישית (CRD)- אובייקט
ConfigSyncבשםconfig-sync. - ה-Reconciler Manager בפריסה בשם
reconciler-manager. - ה-ResourceGroup Controller בפריסה בשם
resource-group-controller-manager. - OpenTelemetry Collector בפריסה בשם
otel-collector. - אופציונלי: ה-webhook של סנכרון תצורות admission ב-Deployment בשם
admission-webhook. ה-webhook של סנכרון תצורות admission מותקן רק אם מפעילים את מניעת הסחף.
המשאבים והאובייקטים האלה נוצרים באופן אוטומטי כשמתקינים את סנכרון תצורות, ואין לשנות אותם ישירות.
יצירת אובייקטים של
RootSyncו-RepoSyncמוסיפה את הרכיבים הבאים:- לכל אובייקט
RootSync, פריסת כלי התיאום נקראתroot-reconciler-ROOTSYNC_NAME. עבור אובייקטRootSyncבשםroot-sync, פריסת ה-reconciler נקראתroot-reconciler. - לכל אובייקט
RepoSync, פריסת כלי התיאום נקראתns-reconciler-REPOSYNC_NAMESPACE-REPOSYNC_NAME-REPOSYNC_NAME_LENGTH. עבור אובייקטRepoSyncבשםrepo-sync, פריסת ה-reconciler נקראתns-reconciler.
- לכל אובייקט
פריסות, Podים וקונטיינרים של סנכרון תצורות
בטבלה הבאה מפורט מידע נוסף על ה-Deployment, ה-Pods והקונטיינרים של סנכרון תצורות:
| שם הפריסה | מרחב השמות של הפריסה | תיאור פריסה | מספר העותקים | ביטוי רגולרי של שם ה-Pod | מספר המאגרים | שמות של מאגרי תגים |
|---|---|---|---|---|---|---|
reconciler-manager |
config-management-system |
הכלי Reconciler Manager פועל בכל אשכול שבו מופעל סנכרון תצורות
באובייקט ConfigManagement. הוא עוקב אחרי אובייקטים של RootSync ושל RepoSync ומנהל פריסה של reconciler לכל אחד מהם. |
1 | reconciler-manager-.* |
2 | reconciler-managerotel-agent |
root-reconciler |
config-management-system |
פריסת מאחד (reconciler) ברמת הבסיס נוצרת לכל אובייקט RootSync. |
1 | root-reconciler-.* |
3 - 51 |
reconcilerotel-agentgit-synchelm-syncoci-syncgcenode-askpass-sidecarhydration-controller |
ns-reconciler |
config-management-system |
פריסת namespace reconciler נוצרת לכל אובייקט RepoSync. |
1 | ns-reconciler-.* |
3 - 51 |
reconcilerotel-agentgit-synchelm-syncoci-syncgcenode-askpass-sidecarhydration-controller |
otel-collector |
config-management-monitoring |
OpenTelemetry Collector פועל בכל אשכול שבו סנכרון תצורות מופעל באובייקט ConfigManagement.
הוא אוסף מדדים
מרכיבי סנכרון תצורות שפועלים במרחבי השמות config-management-system ו-resource-group-system
ומייצא את המדדים האלה אל Prometheus ו-Cloud Monitoring. |
1 | otel-collector-.* |
1 | otel-collector |
resource-group-controller-manager |
resource-group-system |
ה-ResourceGroup Controller פועל בכל אשכול שבו מופעל סנכרון תצורות באובייקט ConfigManagement. הוא עוקב אחרי אובייקטים ומעדכן אותם בסטטוס ההתאמה הנוכחי של כל אובייקט במלאי.ResourceGroup אובייקט ResourceGroup נוצר לכל אובייקט RootSync וRepoSync כדי ליצור מלאי של רשימת האובייקטים שהוחלו על ידי הכלי לתיקון שגיאות ממקור האמת. |
1 | resource-group-controller-manager-.* |
2 | managerotel-agent |
admission-webhook |
config-management-system |
ה-Webhook של סנכרון תצורות Admission פועל בכל אשכול שבו מניעת סטיות מופעלת באובייקט ConfigManagement. הוא עוקב אחרי בקשות ל-Kubernetes API ומונע שינוי או מחיקה של משאבים שמנוהלים על ידי סנכרון תצורות. תגובה לפעולה מאתר אחר (webhook) של סנכרון תצורות admission מושבתת כברירת מחדל. |
2 | admission-webhook-.* |
1 | admission-webhook |
1 פרטים על המועד שבו נוצרים מאגרי התגים האלה מופיעים במאמר בנושא מאגרי תגים של Reconciler.
בקשות למשאבי פריסה
בטבלה הבאה מפורטות דרישות המשאבים של Kubernetes לרכיבי סנכרון תצורות. מידע נוסף זמין במאמר ניהול משאבים עבור Pods וקונטיינרים במאמרי העזרה של Kubernetes.
בקשות המשאבים זהות בכל הגרסאות הנתמכות של סנכרון תצורות.
| שם הפריסה | בקשת מעבד (m) לכל רפליקה | בקשת זיכרון (Mi) לכל רפליקה |
|---|---|---|
config-management-operator |
100 | 200 |
resource-group-controller-manager |
110 | 300 |
admission-webhook1 |
10 | 100 |
otel-collector |
200 | 400 |
reconciler-manager |
20 | 150 |
reconciler (אחד לכל RootSync ו-RepoSync) |
פרטים נוספים זמינים במאמר בנושא בקשות למשאבי מאזן. | |
1 ל-webhook של הגישה יש שני עותקים. אם אתם משתמשים ב-webhook של הרשאות הכניסה ואתם צריכים לחשב את סך בקשות המשאבים, הכפילו את הערך. ה-webhook של הגישה מושבת כברירת מחדל.
רכיבים מרכזיים
בקטעים הבאים נרחיב על רכיבים חשובים של סנכרון תצורות.
שירות ניהול צי רכבים ואובייקט ConfigSync
שירות Hub Fleet מנהל את רכיבי סנכרון תצורות באשכול:
שירות Fleet מנהל גם את אובייקט ConfigSync באשכול. שירות Fleet מעדכן את המפרט של אובייקט ConfigSync על סמך הקלט שלכם ל-API של Google Cloud , ואת הסטטוס שלו כדי לשקף את הסטטוס של רכיבי סנכרון תצורות.
כדי לבצע שינויים בהגדרת ההתקנה של סנכרון תצורות, צריך להשתמש ב- Google Cloud API. אבל אפשר להשתמש ב- Google CloudAPI או ב-Kubernetes API כדי לעקוב אחרי ההגדרה והתקינות של ההתקנה של סנכרון תצורות.
מנהל התאמות ומבצעי התאמות
מנהל ה-Reconciler אחראי ליצירה ולניהול של ה-Reconcilers האישיים שדואגים שהגדרת האשכול תישאר מסונכרנת.
הכלי Reconciler Manager יוצר כלי ראשי לגישור פערים לכל אובייקט RootSync וכלי לגישור פערים במרחב שמות לכל אובייקט RepoSync. סנכרון תצורות משתמש בעיצוב הזה במקום לשתף מאזן עומסים מונוליטי יחיד, כי כך הוא משפר את המהימנות על ידי צמצום נקודות כשל בודדות, ומאפשר לשנות את קנה המידה של מאזני עומסים בנפרד.
הכלי להשוואת מצב (reconciler) ברמת הבסיס (root) ובמרחב השמות (namespace) מאחזר באופן אוטומטי הגדרות ממקור האמת שלכם ומחיל אותן כדי לאכוף את המצב הרצוי באשכול.
בתרשימים הבאים מוצג איך Reconciler Manager שולט במחזור החיים של כל reconciler של שורש ושל מרחב שמות:
מאגרי Reconciler
הקונטיינרים הספציפיים שנפרסים ב-Pods של כלי ההתאמה תלויים בהגדרות שתבחרו. בטבלה הבאה מוסבר מה כל אחד מהקונטיינרים של ה-reconciler עושה, ומה התנאי שגורם ל-סנכרון תצורות ליצור אותם:
| שם הקונטיינר | תיאור | מצב |
|---|---|---|
reconciler |
מטפל בסנכרון ובתיקון סטיות. | היא תמיד מופעלת. |
otel-agent |
מקבלת מדדים מהקונטיינרים האחרים של תהליך ההתאמה ושולחת אותם אל OpenTelemetry Collector. | היא תמיד מופעלת. |
git-sync |
שולף הגדרות ממאגר Git לספרייה מקומית שקונטיינר ה-reconciler יכול לקרוא. | מופעלת כש-spec.sourceType הוא git. |
helm-sync |
שולף תרשימי Helm ממאגר התרשימים ומעבד אותם לספרייה מקומית שהקונטיינר של הכלי להשוואה יכול לקרוא. | מופעלת כש-spec.sourceType הוא helm. |
oci-sync |
שולף תמונות OCI שמכילות את ההגדרות שלכם מ-Container Registry לספרייה מקומית שהקונטיינר של כלי ההתאמה יכול לקרוא. | מופעלת כש-spec.sourceType הוא oci. |
gcenode-askpass-sidecar |
שומר במטמון את פרטי הכניסה ל-Git משירות המטא-נתונים של GKE לשימוש על ידי מאגר git-sync. |
מופעלת כש-spec.sourceType הוא git וגם spec.git.auth הוא gcenode או gcpserviceaccount. |
hydration-controller |
הכלי מטפל ביצירת הגדרות Kustomize בספרייה מקומית שקונטיינר ה-reconciler יכול לקרוא. | מופעלת כשהמקור כולל קובץ kustomize.yaml. |
כפי שמוצג בטבלה הקודמת, בדרך כלל אפשר לצפות למספר מאגרי תגים של שלוש עד חמש בכל Pod של כלי ההתאמה. המאגרים reconciler ו-otel-agent תמיד קיימים. הגדרת סוג למקור המידע האמין קובעת איזה מאגר סנכרון יתווסף. בנוסף, מאגרי התגים hydration-controller ו-gcenode-askpass-sidecar נוצרים אם ביצעתם את שינויי ההגדרה שמוזכרים בטבלה.
בקשות למשאבי Reconciler
לכל אובייקט RootSync ו-RepoSync, סנכרון תצורות יוצר פריסת reconciler עצמאית לטיפול בסנכרון. פריסת ה-reconciler
מורכבת מכמה מאגרי תגים. מידע נוסף על מאגרי התגים האלה זמין במאמר מאגרי תגים של כלי ההתאמה.
בקשות המשאבים זהות בכל הגרסאות הנתמכות של סנכרון תצורות.
בטבלה הבאה מפורטים בקשות המשאבים עבור אשכולות רגילים:
| שם הקונטיינר | בקשת CPU (m) | בקשת זיכרון (Mi) |
|---|---|---|
reconciler |
50 | 200 |
otel-agent |
10 | 100 |
hydration-controller (אופציונלי) |
10 | 100 |
git-sync |
10 | 16 |
gcenode-askpass-sidecar (אופציונלי) |
10 | 20 |
helm-sync |
75 | 128 |
oci-sync |
25 | 32 |
בטבלה הבאה מפורטות בקשות המשאבים עבור אשכולות Autopilot:
| שם הקונטיינר | בקשה ומגבלה של CPU (m) | בקשת זיכרון ומגבלה (Mi) |
|---|---|---|
reconciler |
700 | 512 |
otel-agent |
10 | 64 |
hydration-controller (אופציונלי) |
200 | 256 |
git-sync |
20 | 32 |
gcenode-askpass-sidecar (אופציונלי) |
50 | 64 |
helm-sync |
250 | 384 |
oci-sync |
50 | 64 |
מידע נוסף על שינוי ברירת המחדל של בקשות ושל מגבלות משאבים זמין במאמר שינוי בקשות ומגבלות משאבים.
גרסאות Helm ו-Kustomize בחבילה
סנכרון תצורות משתמש בקובצי ההפעלה של Helm ו-Kustomize כדי לעבד את ההגדרות. בטבלה הבאה מפורטות גרסאות סנכרון תצורות שתומכות בתכונת הרינדור, לצד גרסאות Helm ו-Kustomize שכלולות בחבילה.
| גרסאות של סנכרון תצורות | גרסת Helm | גרסת Kustomize |
|---|---|---|
| 1.22.0 | v3.15.3 | v5.3.0 |
| 1.21.0 | v3.15.3 | v5.3.0 |
| 1.20.0 | v3.15.3 | v5.3.0 |
מידע על עיבוד Helm באמצעות Kustomize זמין במאמר הגדרת Kubernetes באמצעות Kustomize. מידע על השימוש ב-Helm API זמין במאמר סנכרון תרשימי Helm מ-Artifact Registry.
אובייקטים של ResourceGroup ובקר ResourceGroup
הכלי להשוואת נתונים של מרחב השמות והכלי להשוואת נתונים של שורש יוצרים אובייקט מלאי ResourceGroup לכל אובייקט RootSync וRepoSync שהגדרתם. כל אובייקט ResourceGroup מכיל רשימה של אובייקטים שסונכרנו עם האשכול ממקור האמת על ידי רכיב ה-reconciler של אותו אובייקט RootSync או RepoSync. לאחר מכן, ResourceGroupController עוקב אחרי כל האובייקטים באובייקט ResourceGroup ומעדכן את הסטטוס של האובייקט ResourceGroup בסטטוס הנוכחי של הסינכרון של האובייקטים. כך אפשר לבדוק את הסטטוס של ResourceGroupהאובייקט כדי לקבל סקירה כללית של סטטוס הסנכרון, במקום להריץ שאילתה לגבי הסטטוס של כל אובייקט בנפרד.
לאובייקטים מסוג ResourceGroup יש את אותו שם ואותו מרחב שמות כמו לאובייקט התואם מסוג RootSync או RepoSync. לדוגמה, לאובייקט RootSync עם השם root-sync במרחב השמות config-management-system, האובייקט התואם ResourceGroup נקרא גם root-sync במרחב השמות config-management-system.
אל תיצרו או תשנו אובייקטים של ResourceGroup, כי זה עלול לשבש את הפעולה של סנכרון תצורות.
תגובה לפעולה מאתר אחר (webhook) של בקרת כניסה
ה-webhook של Config Sync Admission נוצר כשמפעילים את מניעת סטיות. מניעת סחף (Drift) מונעת שינויים באופן יזום בבקשות לשינוי, כדי לוודא שהן תואמות למקור האמת לפני שהשינויים מבוצעים.
אם לא מפעילים את מניעת הסחף, סנכרון תצורות עדיין משתמש במנגנון לתיקון עצמי כדי לבטל את סחף ההגדרות. בעזרת תיקון עצמי, סנכרון תצורות עוקב באופן רציף אחרי אובייקטים מנוהלים ומבטל באופן אוטומטי שינויים שחורגים מהמצב הרצוי.
אובייקטים של RootSync ו-RepoSync
אובייקטים מסוג RootSync מגדירים את סנכרון תצורות ליצירת reconciler בסיסי שעוקב אחרי מקור האמת שצוין ומחיל אובייקטים מהמקור הזה על האשכול. כברירת מחדל, למנגנון ה-reconciler הבסיסי של כל אובייקט RootSync יש הרשאת cluster-admin. עם הרשאת ברירת המחדל הזו, אפשר לסנכרן משאבים בהיקף אשכול ומשאבים בהיקף מרחב שמות. במקרה הצורך, אפשר לשנות את ההרשאות האלה על ידי הגדרת השדות spec.override.roleRefs. אובייקטים של RootSync מיועדים לשימוש של אדמינים של אשכולות.
אובייקטים מסוג RepoSync מגדירים את סנכרון תצורות ליצירת כלי לסנכרון מרחבי שמות שעוקב אחרי המקור שצוין ומחיל אובייקטים מהמקור הזה על מרחב שמות ספציפי באשכול. אמצעי התיאום של מרחבי השמות יכולים לסנכרן כל משאב בהיקף מרחב השמות במרחב השמות הזה עם הרשאות מותאמות אישית שצוינו על ידי המשתמש. אובייקטים מסוג RepoSync מיועדים לשימוש על ידי דיירים במרחב שמות.
איך שירות Fleet מנהל אובייקטים של RootSync
כשמתקינים את סנכרון תצורות באמצעות מסוף Google Cloud , Google Cloud CLI, Config Connector או Terraform, סנכרון תצורות מנוהל על ידי שירות Fleet, על סמך הקלט שלכם ב- Google Cloud API.
אם ההתקנה של סנכרון תצורות מנוהלת על ידי שירות Fleet, אפשר גם להגדיר שהשירות ינהל את אובייקט RootSync הראשוני, שנקרא root-sync. כך תוכלו להפעיל GitOps באשכול בלי שתצטרכו להחיל באופן ידני משהו ישירות על האשכול. אם תחליטו לא להשתמש בשירות Fleet לניהול אובייקט RootSync ראשוני, עדיין תוכלו להחיל אובייקטים RootSync ו-RepoSync שתרצו ישירות על האשכול.
אובייקט RootSync בשם root-sync נוצר על סמך הקלט שלכם ב-Google Cloud API, במיוחד בקטע spec.configSync שלconfig-management apply API. ממשק ה-API הזה חושף רק קבוצת משנה של שדות RootSync, ולכן השדות האלה נחשבים כמנוהלים ב-root-sync, בעוד שהשדות האחרים נחשבים כלא מנוהלים. אפשר לערוך שדות מנוהלים רק באמצעותGoogle Cloud API. אפשר לערוך את השדות הלא מנוהלים באמצעות kubectl או כל לקוח אחר של Kubernetes.
אובייקטים נוספים של RootSync ו-RepoSync
כדי ליצור אובייקטים נוספים של RootSync או RepoSync, אפשר להשתמש בכלי שורת הפקודה kubectl או בלקוח Kubernetes אחר. אפשר גם להשתמש באובייקט root-sync הראשוני כדי לנהל אובייקטים נוספים של RootSync או RepoSync באמצעות GitOps. לשם כך, מוסיפים את מניפסט ה-YAML שלהם למקור האמת שממנו מוגדר root-sync לבצע סנכרון. אי אפשר להשתמש בשיטה הזו כדי לנהל את ההגדרות של root-sync הראשוני, כי חלק מהשדות שלו מנוהלים על ידי שירות Fleet. כדי לנהל את האובייקט root-sync באמצעות GitOps, צריך להשתמש ב-Config Connector או ב-Terraform. מידע נוסף על יצירת אובייקטים נוספים של RootSync ושל RepoSync זמין במאמר הגדרת סנכרון מכמה מקורות אמת.
המאמרים הבאים
- מומלץ לעקוב אחרי הרכיבים של סנכרון תצורות או לבדוק את היומנים שלהם. למבוא, ראו שימוש ב-Monitoring וביומנים.
- מידע על בקשות למשאבים של רכיבי סנכרון תצורות