התאמה אישית של מיקום הצמתים של מערכת סנכרון תצורות Pods

במאמר הזה מוסבר איך להגדיר את מיקום הצמתים עבור Podים של מערכת סנכרון תצורות שפועלים באשכול. הגדרת מיקום הצומת יכולה להיות שימושית במצבים כמו בידוד של פודים של מערכת Config Sync לצמתים ספציפיים למטרות אבטחה, או תזמון של Config Sync בצמתים זולים יותר למטרות חיסכון בעלויות.

מידע על MutatingAdmissionPolicy

MutatingAdmissionPolicy היא תכונה של Kubernetes שזמינה ב-Kubernetes גרסה 1.34. אם MutatingAdmissionPolicy זמין באשכול, אפשר להתאים אישית את ההתנהגות בכל פעם שמישהו כותב שינוי ב-Kubernetes API.

בהקשר של סנכרון תצורות, אפשר להשתמש ב-MutatingAdmissionPolicy כדי להוסיף פרמטרים של מיקום צומת לפודים שפועלים במרחבי שמות של מערכת סנכרון תצורות. הפרמטרים האלה כוללים שדות של מפרט ה-Pod, כמו nodeSelector ו-affinity. במסמך הזה מובאת דוגמה לאופן שבו אפשר להשתמש ב-MutatingAdmissionPolicy עם סנכרון תצורות, ויש עוד דוגמאות במאגר הקוד הפתוח של סנכרון תצורות.

הגדרת nodeSelector

בדוגמה הבאה אפשר לראות איך משתמשים ב-MutatingAdmissionPolicy כדי להוסיף אוטומטית nodeSelector לכל Pod שפועל בכל אחד ממרחבי השמות של מערכת סנכרון תצורות עם התווית configmanagement.gke.io/system: "true". מרחבי השמות של מערכת סנכרון תצורות כוללים את config-management-system,‏ config-management-monitoring ו-resource-group-system.

apiVersion: admissionregistration.k8s.io/v1beta1
kind: MutatingAdmissionPolicy
metadata:
  name: "my-pod-node-selector"
spec:
  matchConstraints:
    resourceRules:
    - apiGroups:   [""]
      apiVersions: ["v1"]
      operations:  ["CREATE", "UPDATE"]
      resources:   ["pods"]
  failurePolicy: Fail
  reinvocationPolicy: IfNeeded
  mutations:
  # Basic example of adding nodeSelector: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/
  # Similar mutations can be applied for affinities, tolerations, and so on
  - patchType: "JSONPatch"
    jsonPatch:
      expression: >
        [
          JSONPatch{
            op: "add", path: "/spec/nodeSelector",
            value: {
              "LABEL_KEY": "LABEL_VALUE",
            }
          }
        ]
---
apiVersion: admissionregistration.k8s.io/v1beta1
kind: MutatingAdmissionPolicyBinding
metadata:
  name: "configsync-node-selector"
spec:
  policyName: "my-pod-node-selector"
  matchResources:
    namespaceSelector:
      matchLabels:
        # This namespace selector only selects Config Sync system namespaces
        configmanagement.gke.io/system: "true"
  • מחליפים את LABEL_KEY במפתח התווית שבו יש להשתמש בבורר הצמתים.
  • מחליפים את LABEL_VALUE בערך התווית שבה יש להשתמש בבורר הצמתים.

אחרי שמחילים את ההגדרה הזו על האשכול, כל ה-Pods של מערכת סנכרון תצורות מתוזמנים לצמתים עם התווית LABEL_KEY=LABEL_VALUE.