בדף הזה מתוארות אפשרויות התזמון ומוסבר איך להגדיר אילוצים לתזמון פודים כברירת מחדל ב-Google Distributed Cloud software-only לאשכולות Bare Metal.
Google Distributed Cloud מספק מספר תכונות סטנדרטיות של Kubernetes שבהן אפשר להשתמש כדי לשלוט בתזמון של פודים, כמו:
מידע על אילוצים של פיזור טופולוגי של Pod ב-Kubernetes זמין במאמר Kubernetes Scheduler במסמכי Kubernetes.
לפני שמתחילים
לפני שמגדירים את ברירת המחדל של פיזור ה-Pods, מוודאים שלכל צומת באשכול יש תוויות טופולוגיה נכונות. אפשר להשתמש ב-Nodepool.Spec.TaintsAndLabels API כדי להוסיף תוויות. תיוג ידני של צמתים באמצעות kubectl label מאפשר גמישות רבה יותר, אבל כשמוסיפים צומת חדש לאשכול צריך לתייג אותו ידנית.
הגדרת מתזמן מותאם אישית כברירת מחדל {#:config-default}
הוספת תוויות לצמתים
מוסיפים תוויות טופולוגיה לקובצי ה-YAML של האשכול ושל מאגר הצמתים. בדוגמה הבאה, ההנחה היא שיש שני מאגרי צמתים של עובדים במתלים שונים, וצמתים של מישור הבקרה נמצאים ב-
rack1.apiVersion: baremetal.cluster.gke.io/v1 kind: Cluster metadata: name: abm-cluster namespace: cluster-abm-cluster spec: controlPlane: nodePoolSpec: labels: topology.k8s.io/rack: rack1 --- apiVersion: baremetal.cluster.gke.io/v1 kind: NodePool metadata: name: nodepool-rack1 namespace: cluster-abm-cluster spec: labels: topology.k8s.io/rack: rack1 --- apiVersion: baremetal.cluster.gke.io/v1 kind: NodePool metadata: name: nodepool-rack2 namespace: cluster-abm-cluster spec: labels: topology.k8s.io/rack: rack2החלת ההגדרה המעודכנת של האשכול.
bmctl update cluster -c CLUSTER_NAMEמחליפים את
CLUSTER_NAMEבשם האשכול.ממתינים עד שהתווית
topology.k8s.io/rackתתפשט לכל הצמתים באשכול.
הפעלה של אילוצי פיזור של פודים שמוגדרים כברירת מחדל
מוסיפים את ההערה
preview.baremetal.cluster.gke.io/custom-scheduler-configuration:enableלקובץ ה-YAML של האשכול.מוסיפים את הקטע
schedulerConfigurationמתחת ל-cluster.spec.controlPlaneבקובץ ה-YAML של האשכול.apiVersion: baremetal.cluster.gke.io/v1 kind: Cluster metadata: name: abm-cluster namespace: cluster-abm-cluster annotations: preview.baremetal.cluster.gke.io/custom-scheduler-configuration: enable spec: controlPlane: schedulerConfiguration: defaultTopologySpreadConstraint: defaultConstraints: - topologyKey: topology.k8s.io/rack whenUnsatisfiable: DoNotSchedule maxSkew: 1 defaultingType: Listהחלת ההגדרה המעודכנת של האשכול.
bmctl update cluster -c CLUSTER_NAMEמחליפים את
CLUSTER_NAMEבשם האשכול.ממתינים לסיום תהליך ההתאמה של האשכול. עוקבים אחרי
cluster.status.clusterStateעד שמופיעRunning.control-plane-updateתהליך העבודה מופעל לכל צומת של מישור הבקרה במהלך התהליך הזה.
אימות ההגדרה של פיזור הפודים
יוצרים פריסת בדיקה עם חמש רפליקות.
בודקים את חלוקת הפודים. ההפרש במספר הפודים ב-
nodepool-rack1וב-nodepool-rack2צריך להיות בדיוק אחד.מאמתים את הקובץ
kube-scheduler-profile.configבכל צומת של מישור הבקרה. הקובץ, שנמצא במיקום/etc/kubernetes/kube-scheduler-profile.config, צריך לכלול את הגדרת הפריסה של הטופולוגיה מ-cluster.spec.
פתרון בעיות
כדי לאבחן ולפתור בעיות בפריסת פודים שמוגדרת כברירת מחדל, בודקים את הדברים הבאים:
- בודקים את הסטטוס של התכונה
BareMetalMachine.Status.ControlPlaneComponents. - בודקים את היומנים מ-
cluster-operatorומ-cap-controller-managerכדי למצוא אירועים רלוונטיים. - אם תרמילי
kube-schedulerסטטיים קורסים, צריך לבדוק שההגדרה של מתזמן המשימות נכונה בקובץ ה-YAML של האשכול.
המאמרים הבאים
- מידע נוסף על אילוצים של פיזור טופולוגיית פודים זמין במסמכי התיעוד של Kubernetes.
- אם נתקלתם בבעיות, כדאי לעיין במאמר בנושא פתרון בעיות בתזמון של Kubernetes.