הגדרת תזמון

בדף הזה מתוארות אפשרויות התזמון ומוסבר איך להגדיר אילוצים לתזמון פודים כברירת מחדל ב-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}

הוספת תוויות לצמתים

  1. מוסיפים תוויות טופולוגיה לקובצי ה-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
    
  2. החלת ההגדרה המעודכנת של האשכול.

    bmctl update cluster -c CLUSTER_NAME
    

    מחליפים את CLUSTER_NAME בשם האשכול.

  3. ממתינים עד שהתווית topology.k8s.io/rack תתפשט לכל הצמתים באשכול.

הפעלה של אילוצי פיזור של פודים שמוגדרים כברירת מחדל

  1. מוסיפים את ההערה preview.baremetal.cluster.gke.io/custom-scheduler-configuration:enable לקובץ ה-YAML של האשכול.

  2. מוסיפים את הקטע 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
    
  3. החלת ההגדרה המעודכנת של האשכול.

    bmctl update cluster -c CLUSTER_NAME
    

    מחליפים את CLUSTER_NAME בשם האשכול.

  4. ממתינים לסיום תהליך ההתאמה של האשכול. עוקבים אחרי cluster.status.clusterState עד שמופיע Running. control-plane-updateתהליך העבודה מופעל לכל צומת של מישור הבקרה במהלך התהליך הזה.

אימות ההגדרה של פיזור הפודים

  1. יוצרים פריסת בדיקה עם חמש רפליקות.

  2. בודקים את חלוקת הפודים. ההפרש במספר הפודים ב-nodepool-rack1 וב-nodepool-rack2 צריך להיות בדיוק אחד.

  3. מאמתים את הקובץ kube-scheduler-profile.config בכל צומת של מישור הבקרה. הקובץ, שנמצא במיקום /etc/kubernetes/kube-scheduler-profile.config, צריך לכלול את הגדרת הפריסה של הטופולוגיה מ-cluster.spec.

פתרון בעיות

כדי לאבחן ולפתור בעיות בפריסת פודים שמוגדרת כברירת מחדל, בודקים את הדברים הבאים:

  1. בודקים את הסטטוס של התכונה BareMetalMachine.Status.ControlPlaneComponents.
  2. בודקים את היומנים מ-cluster-operator ומ-cap-controller-manager כדי למצוא אירועים רלוונטיים.
  3. אם תרמילי kube-scheduler סטטיים קורסים, צריך לבדוק שההגדרה של מתזמן המשימות נכונה בקובץ ה-YAML של האשכול.

המאמרים הבאים