במאמר הזה מוסבר איך להגדיר את מיקום הצמתים עבור Podים של מערכת סנכרון תצורות שפועלים באשכול. הגדרת מיקום הצומת יכולה להיות שימושית במצבים כמו בידוד של פודים של מערכת Config Sync לצמתים ספציפיים למטרות אבטחה, או תזמון של Config Sync בצמתים זולים יותר למטרות חיסכון בעלויות.
מידע על MutatingAdmissionPolicy
MutatingAdmissionPolicy היא תכונה של Kubernetes שזמינה ב-Kubernetes בגרסה 1.36 ואילך, שמאפשרת לכם להתאים אישית את ההתנהגות בכל פעם שמישהו כותב שינוי ב-Kubernetes API.
בהקשר של סנכרון תצורות, אפשר להשתמש ב-MutatingAdmissionPolicy כדי להוסיף פרמטרים של מיקום צומת ל-Pods שפועלים במרחבי שמות של מערכת סנכרון תצורות.
הפרמטרים האלה כוללים שדות של מפרט ה-Pod, כמו nodeSelector ו-affinity.
במסמך הזה מובאת דוגמה לאופן שבו אפשר להשתמש ב-MutatingAdmissionPolicy עם סנכרון תצורות, ויש עוד דוגמאות במאגר הקוד הפתוח של סנכרון תצורות.
הגדרת nodeSelectors
בדוגמה הבאה אפשר לראות איך משתמשים ב-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.