בעזרת סנכרון תצורות אתם יכולים לנהל באופן הצהרתי אובייקטים ברמת האשכול, כמו משאבי מרחב שמות, ClusterRole ו-CustomResourceDefinition, בכל אשכולות Kubernetes ממקור מידע אמין מרכזי. סנכרון הגדרות ברמת האשכול עוזר לאכוף מדיניות עקבית ברמת האשכול, בקרת גישה מבוססת-תפקידים (RBAC) וממשקי API בהתאמה אישית בכל הצי. אפשר גם לטרגט אשכולות ספציפיים באמצעות סלקטורים. כדי לנהל משאבים במרחבי שמות נפרדים, קראו את המאמר סנכרון אובייקטים למספר מרחבי שמות.
הגדרת אשכולות ואובייקטים ברמת האשכול
במאגרים לא מובְנים, אתם יכולים לארגן את ההגדרות של האשכולות ושל האובייקטים ברמת האשכול בצורה שהכי נוחה לכם. כל ההגדרות שמאורגנות בצורה הזו חלות על כל אשכול שרשום לסנכרון ההגדרות.
הגדרת CustomResourceDefinitions
סנכרון ההגדרות מאפשר לסנכרן הגדרות של משאבים בהתאמה אישית (CRD) באותו אופן שבו מסנכרנים כל משאב אחר. כמה דברים שחשוב לזכור כשמסנכרנים CRD:
העדכונים של ה-CRD וה-CustomResources התואמים שלהם לא מתרחשים בסדר צפוי. אם משנים את ה-CRD ואת ה-CustomResources התואמים באותו commit, אין ציפייה שהעדכונים של ה-CRD יתרחשו לפני העדכונים של ה-Custom Resource. יכול להיות שבגלל זה
nomos statusידווח על שגיאה זמנית לזמן קצר, עד שגם CustomResource וגם CRD יהיו באשכול.סנכרון ההגדרות לא מאפשר להסיר CRD אם CustomResource כלשהו במאגר תלוי בו. כדי להסיר CRD, צריך להסיר גם את ה-CustomResource שלו. מומלץ להסיר את שניהם באותו commit למאגר.
אפשר לסנכרן CustomResource בלי לסנכרן את ה-CRD שלו, כל עוד אתם יכולים להבטיח שה-CRD כבר קיים באשכול.
הגבלת האשכולות שמושפעים מההגדרה
כברירת מחדל, סנכרון תצורות מחיל הגדרה על כל אשכול רשום. עם זאת, אם אתם צריכים להחיל הגדרה רק על קבוצת משנה של אשכולות, אתם יכולים להוסיף למאגר הערה מסוג cluster-name-selector או הגדרה מסוג ClusterSelector.
ההערה cluster-name-selector מספקת דרך פשוטה לציין קבוצת משנה של אשכולות שעליהם רוצים להחיל הגדרה. באפשרות הזו אפשר לבחור אשכולות רק לפי שמות.
האובייקט ClusterSelector תומך בבחירת אשכולות לפי תוויות, אבל דורש הגדרות מורכבות יותר.
בשתי האפשרויות צריך לציין את clusterName ב-סנכרון תצורות באשכול. בהתאם לאופן שבו התקנתם את סנכרון תצורות, אתם יכולים לציין את שם האשכול בדרכים הבאות:
אם התקנתם את סנכרון תצורות באמצעות Google Cloud CLI או מסוף Google Cloud : הערך של
clusterNameמוגדר אוטומטית לשם החברות ב-Fleet.אם התקנתם את סנכרון תצורות באופן ידני באמצעות
kubectl, אתם צריכים להגדיר את משתנה הסביבהCLUSTER_NAMEבפריסה שלreconciler-manager. למידע נוסף, ראו מתן שם לאשכול עבור בוררי אשכולות.
הגדרה באמצעות ההערה cluster-name-selector
אפשר להחיל הגדרה על קבוצת משנה של אשכולות באמצעות ההערה configsync.gke.io/cluster-name-selector. אפשר להשתמש בהערה הזו כדי להחיל הגדרה על קבוצת אשכולות, שמצוינים בשמות האשכולות.
הערך של ההערה הוא רשימה מופרדת בפסיקים של שמות אשכולות היעד.
אפשר להחיל את ההערה על אובייקטים ברמת האשכול ועל אובייקטים ברמת מרחב השמות. אובייקטים של מרחב שמות נבחרים כשההערה תואמת לשם האשכול, וכשנבחר גם מרחב השמות שאליו שייכים האשכולות.
בחירת אשכול אחד
ההגדרה הבאה יוצרת תפקיד בשם namespace-reader שמגדיר קבוצת הרשאות לקריאת מרחבי שמות. התפקיד הזה חל רק על האשכול שנקרא cluster-1.
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
namespace: my-namespace
name: namespace-reader
annotations:
configsync.gke.io/cluster-name-selector: cluster-1
rules:
- apiGroups: [""]
resources: ["namespaces"]
verbs: ["get", "watch", "list"]
בחירת רשימה של אשכולות
ההגדרה הבאה יוצרת את אותו תפקיד כמו בדוגמה הקודמת, אבל התפקיד הזה חל רק על האשכולות עם השם cluster-1, cluster-2 או cluster-3.
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
namespace: my-namespace
name: namespace-reader
annotations:
configsync.gke.io/cluster-name-selector: cluster-1,cluster-2,cluster-3
rules:
- apiGroups: [""]
resources: ["namespaces"]
verbs: ["get", "watch", "list"]
הגדרה באמצעות האובייקט ClusterSelector
ClusterSelector הוא סוג מיוחד של הגדרה שמשתמש ב-labelSelectors של Kubernetes. אפשר להשתמש ב-ClusterSelector כדי להגביל את האשכולות שעליהם חלה הגדרה מסוימת, על סמך התוויות של האשכול. אפשר גם להשתמש ב-ClusterSelectors כדי להגביל את האשכולות שיוצרים אובייקט ברמת מרחב השמות.
בדומה ל-labelSelectors אחרים, ClusterSelectors פועלים באמצעות לוגיקת AND. מכיוון ש-ClusterSelectors משתמשים בלוגיקה של AND, אובייקטים נבחרים רק כשהם תואמים לכל התוויות שאתם מגדירים.
הגדרת ClusterSelector לא נשמרת באשכול. במקום זאת, מפנים אליו בקובץ תצורה אחר באמצעות אנוטציה, וקובץ התצורה הזה חל רק על אשכולות שתואמים ל-ClusterSelector.
כדי להשתמש ב-ClusterSelectors, לכל אשכול צריך להיות שם ייחודי וקבוצת תוויות שאפשר לבחור. המטא-נתונים של האשכול מצוינים בהגדרות של האשכול במקור האמון.
בשלב הבא, מוסיפים תוויות לאשכול, יוצרים את ClusterSelector ואז מפנים אליו בהגדרות אחרות.
הוספת תוויות לאשכול
כדי להשתמש ב-ClusterSelectors, לכל אשכול צריכה להיות קבוצה של תוויות שאפשר לבחור. במאגרים לא מובנים, אפשר לאחסן את ההגדרות של האשכולות באופן שרירותי בספריית ההגדרות או בספריות הצאצא שלה.
כדי להחיל הגדרות על אשכול, השדה metadata.name של הגדרת האשכול צריך להתאים לשדה clusterName של אובייקט ConfigManagement.
בדוגמה הבאה, הגדרת האשכול מצהירה של-cluster-2 יש את התוויות environment: prod ו-location: central.
kind: Cluster
apiVersion: clusterregistry.k8s.io/v1alpha1
metadata:
name: cluster-2
labels:
environment: prod
location: central
אפשר גם להוסיף הערות באמצעות הגדרת אשכול.
יצירת ClusterSelector
ClusterSelector בוחר רק אשכולות עם תווית או שילוב תוויות נתון. במאגרים לא מובנים, אפשר לאחסן את ClusterSelectors באופן שרירותי בספריית הסנכרון או בספריות הצאצא שלה.
ה-ClusterSelector הבא בוחר רק אשכולות עם התווית environment: prod.
kind: ClusterSelector
apiVersion: configmanagement.gke.io/v1
metadata:
name: selector-env-prod
spec:
selector:
matchLabels:
environment: prod
ה-ClusterSelector הבא בוחר אשכולות עם התוויות location: central או location: west.
kind: ClusterSelector
apiVersion: configmanagement.gke.io/v1
metadata:
name: selector-central-or-west
spec:
selector:
matchExpressions:
- key: location
operator: In
values:
- central
- west
ל-ClusterSelector אין השפעה עד שמפנים אליו בהגדרה אחרת.
הפניה ל-ClusterSelector
כדי להפנות ל-ClusterSelector בהגדרה אחרת, מגדירים את ההערה configmanagement.gke.io/cluster-selector: CLUSTERSELECTOR-NAME.
ההגדרה הבאה יוצרת ClusterRole בשם namespace-reader שמגדיר קבוצת הרשאות לקריאת מרחבי שמות. ה-ClusterRole הזה נוצר רק באשכולות שתואמים ל-ClusterSelector selector-env-prod.
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: namespace-reader
annotations:
configmanagement.gke.io/cluster-selector: selector-env-prod
rules:
- apiGroups: [""]
resources: ["namespaces"]
verbs: ["get", "watch", "list"]
הגבלת האשכולות שמושפעים מהגדרה ברמת מרחב השמות
כברירת מחדל, סנכרון ההגדרות מחיל הגדרות שעוברות בירושה על ידי מרחב שמות על מרחב השמות הזה בכל אשכול שבו הוא קיים. אפשר להשתמש ב-ClusterSelector כדי להחיל את ההגדרות רק על קבוצת משנה של האשכולות האלה.
לדוגמה, אפשר להגדיר אשכולות באופן שונה בהתאם למיקום הגיאוגרפי שלהם או של הלקוחות שלהם. ההגדרה הזו יכולה להיות שימושית להתאמה לשוק המקומי או לעמידה בהוראות הדין. בדוגמאות שבקטע הזה, ההגדרות הספציפיות ללוקאל חלות רק על אשכולות עם התווית location: france.
הגדרת האשכול הבאה מוסיפה את התווית location: france לאשכול שנקרא cluster-1:
kind: Cluster
apiVersion: clusterregistry.k8s.io/v1alpha1
metadata:
name: cluster-1
labels:
location: france
יוצרים הגדרת ClusterSelector שמפנה לתוויות שרוצים לבחור. ה-ClusterConfig הבא בוחר את התווית location: france:
kind: ClusterSelector
apiVersion: configmanagement.gke.io/v1
metadata:
name: selector-location-france
spec:
selector:
matchLabels:
location: france
ל-ClusterSelector אין השפעה עד שמפנים אליו בהגדרה אחרת.
ההגדרה הבאה של RoleBinding בוחרת רק אשכולות שתואמים ל-ClusterSelector של selector-location-france. ההגדרה הזו יכולה להיות שימושית, למשל, אם הנחיית תאימות מאפשרת רק לחשבון שירות מסוים להציג מידע על אשכולות באזור הגיאוגרפי הייעודי שלהם.
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: viewers
annotations:
configmanagement.gke.io/cluster-selector: selector-location-france
subjects:
- kind: Group
name: system:serviceaccounts:foo
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: ClusterRole
name: view
apiGroup: rbac.authorization.k8s.io
אם תמקמו את ההגדרה הזו במרחב שמות מופשט או בספרייה של מרחב שמות, כמו namespaces/eng, היא תוחל על מרחבי השמות שיורשים אותה, אבל רק באשכולות עם התווית location: france.