יצירת אשכול אדמין לשימוש בדומיינים של טופולוגיה

בדף הזה מוסבר איך ליצור אשכול אדמין לשימוש בתחומי טופולוגיה של Google Distributed Cloud. קלאסטר האדמין מנהל את קלאסטרים המשתמשים שמריצים את עומסי העבודה. כדי להשתמש בדומיינים של טופולוגיה, נדרשת גרסה 1.31 ואילך של Google Distributed Cloud.

כדי להגדיר דומיין טופולוגי, צריך להפעיל אשכול מתקדם. שימו לב למגבלות הבאות לגבי התצוגה המקדימה של האשכול המתקדם:

  • אפשר להפעיל את התכונה 'אשכול מתקדם' רק באשכולות חדשים בגרסה 1.31, בזמן יצירת האשכול.
  • אחרי שמפעילים אשכול מתקדם, אי אפשר לשדרג את האשכול לגרסה 1.32. מומלץ להפעיל את האשכול המתקדם רק בסביבת בדיקה.

הדף הזה מיועד לאדמינים, לארכיטקטים ולמפעילים שמגדירים, מנטרים ומנהלים את התשתית הטכנולוגית. מידע נוסף על תפקידים נפוצים ומשימות לדוגמה שאנחנו מתייחסים אליהם ב Google Cloud תוכן זמין במאמר תפקידים נפוצים של משתמשים ומשימות ב-GKE.

פרטים נוספים על אשכול האדמין מופיעים במאמר סקירה כללית על ההתקנה.

סקירה כללית של התהליך

אלה השלבים העיקריים שנדרשים ליצירת אשכול אדמין:

  1. מילוי קובץ ההגדרות של האדמין
    ממלאים את פרטי אשכול האדמין החדש בקובץ ההגדרות של אשכול האדמין.
  2. מילוי קובץ ההגדרות של תשתית vSphere
    מציינים את הפרטים על דומייני הטופולוגיה בקובץ הגדרות של תשתית vSphere.
  3. מילוי קובץ של בלוק כתובות IP
    מציינים את כתובות ה-IP של השער, מסכת הרשת וצמתי מישור הבקרה בקובץ של בלוק כתובות IP.
  4. קבלת קובצי אימג' של מערכת ההפעלה
    מורידים את חבילת Google Distributed Cloud הרגילה. לאחר מכן מריצים את הפקודה gkectl prepare, שמייבאת את קובצי האימג' של מערכת ההפעלה אל vSphere, ומעבירה את קובצי האימג' של הקונטיינר אל המאגר הפרטי, אם רלוונטי.
  5. ליצור אשכול אדמין.
    משתמשים ב-gkectl כדי ליצור אשכול אדמין חדש כמו שצוין בקובצי ההגדרות שהושלמו. כש-Google Distributed Cloud יוצר אשכול אדמין, הוא פורס אשכול Kubernetes in Docker ‏ (kind) כדי לארח באופן זמני את בקרי Kubernetes שנדרשים ליצירת אשכול האדמין. האוסף הזמני הזה נקרא אוסף bootstrap. אשכולות משתמשים נוצרים ומשודרגים על ידי האדמין המנהל שלהם ללא שימוש באשכול bootstrap.
  6. מוודאים שקלאסטר האדמין פועל.
    משתמשים ב-kubectl כדי להציג את הצמתים של האשכול.

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

לפני שמתחילים

מילוי קובץ ההגדרה של אשכול האדמין

אם השתמשתם ב-gkeadm כדי ליצור את תחנת העבודה של האדמין, נוצר קובץ הגדרות בשם admin-cluster.yaml.

אם לא השתמשתם ב-gkeadm כדי ליצור את תחנת העבודה של האדמין, צריך ליצור את admin-cluster.yaml על ידי הפעלת הפקודה הבאה בתחנת העבודה של האדמין:

gkectl create-config admin

קובץ התצורה הזה משמש ליצירת אשכול האדמין.

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

name

אם רוצים לציין שם לאשכול הניהול, ממלאים את השדה name.

bundlePath

החבילה היא קובץ מכווץ שמכיל רכיבי אשכול. היא כלולה בתחנת העבודה של האדמין. השדה הזה כבר מלא בשבילכם.

enableAdvancedCluster

מגדירים את enableAdvancedCluster לערך true. ההגדרה הזו מפעילה אשכולות מתקדמים, שנדרשים להגדרת דומיינים של טופולוגיה.

infraConfigFilePath

מוסיפים את הנתיב המלא אל קובץ התצורה של תשתית vSphere בשדה infraConfigFilePath.

vCenter

להסיר את כל הקטע הזה. במקום זאת, מגדירים את פרטי שרת vCenter בקובץ התצורה של תשתית vSphere.

network

  • מסירים את השורות הבאות מקובץ ההגדרות:

    • החלק network.hostConfig כולו. המידע הזה מוגדר בקובץ ההגדרות של תשתית vSphere לכל דומיין טופולוגי.
    • השדה network.vCenter.networkName. השדה הזה מוגדר בקובץ התצורה של תשתית vSphere לכל דומיין טופולוגי.
    • החלק network.controlPlaneIPBlock כולו. כתובות ה-IP של השער, מסכת הרשת וצמתי מישור הבקרה מוגדרות בקובץ של בלוק IP.
  • מגדירים את network.ipMode.ipBlockFilePath לנתיב לקובץ של חסימת כתובות IP.

  • מגדירים את network.ipMode.type לערך static.

  • השדות network.podCIDR ו-network.serviceCIDR מאוכלסים מראש בערכים שאפשר להשאיר ללא שינוי, אלא אם הם מתנגשים עם כתובות שכבר נמצאות בשימוש ברשת. ‫Kubernetes משתמש בטווחים האלה כדי להקצות כתובות IP לקבוצות Pod ולשירותים באשכול.

loadBalancer

  • מגדירים את loadBalancer.kind ל-"ManualLB" ומסירים את הקטע manualLB.

  • מגדירים כתובת VIP לשרת Kubernetes API של אשכול האדמין. מזינים את מספר ה-VIP כערך של loadBalancer.vips.controlPlaneVIP

מידע נוסף זמין במאמר בנושא כתובות IP וירטואליות ברשת המשנה של אשכול האדמין.

antiAffinityGroups

מגדירים את antiAffinityGroups.enabled לערך false. אין תמיכה בכללי אנטי-אפיניות של Distributed Resource Scheduler (DRS) בדומיינים של טופולוגיה.

adminMaster

  • אם רוצים לציין את המעבד והזיכרון של הצמתים במישור הבקרה של אשכול האדמין, ממלאים את השדות cpus ו-memoryMB בקטע adminMaster.

  • בקטרי אדמין חייבים להיות שלושה צמתי מישור בקרה. מגדירים את השדה replicas בקטע adminMaster לערך 3.

  • אם רוצים לציין דומיין טופולוגי ספציפי לשימוש בצמתי מישור הבקרה, מוסיפים את שם הדומיין הטופולוגי לשדה adminMaster.topologyDomains. אם לא מציינים שם כאן, צריך להגדיר שם ב-vSphereInfraConfig.defaultTopologyDomain בקובץ התצורה של תשתית vSphere.

proxy

אם הרשת שבה יהיו הצמתים של אשכול האדמין נמצאת מאחורי שרת proxy, צריך למלא את הקטע proxy.

privateRegistry

מחליטים איפה רוצים לשמור את קובצי האימג' של הקונטיינרים לרכיבים של Google Distributed Cloud. האפשרויות הן:

  • Artifact Registry

  • מאגר Docker פרטי משלכם.

    אם אתם רוצים להשתמש במאגר פרטי משלכם, אתם צריכים למלא את הקטע privateRegistry.

componentAccessServiceAccountKeyPath

‫Google Distributed Cloud משתמש בחשבון השירות של רכיב הגישה כדי להוריד רכיבי אשכול מ-Artifact Registry. השדה הזה מכיל את הנתיב של קובץ מפתח JSON לחשבון השירות של רכיב הגישה.

השדה הזה כבר מלא בשבילכם.

gkeConnect

רושמים את אשכול האדמין ל Google Cloud Fleet על ידי מילוי הקטע gkeConnect. המזהה ב-gkeConnect.projectID צריך להיות זהה למזהה שמוגדר ב-stackdriver.projectID וב-cloudAuditLogging.projectID. אם מזהי הפרויקטים לא זהים, יצירת האשכול תיכשל.

אפשר גם לציין אזור שבו שירותי הצי ו-Connect פועלים ב-gkeConnect.location. אם לא כוללים את השדה הזה, האשכול משתמש במופעים הגלובליים של השירותים האלה.

אם כוללים את gkeConnect.location, האזור שצוין צריך להיות זהה לאזור שהוגדר ב-cloudAuditLogging.clusterLocation, ב-stackdriver.clusterLocation וב-gkeOnPremAPI.location. אם האזורים לא זהים, יצירת האשכול תיכשל.

gkeOnPremAPI

בקטע הזה מוסבר איך מצרפים אשכולות ל-GKE On-Prem API.

gkectl הוא הכלי היחיד של שורת הפקודה שזמין לניהול מחזור החיים של אשכולות באשכולות שמשתמשים בדומיינים של טופולוגיה. למרות שלא ניתן להשתמש במסוף Google Cloud , ב-Google Cloud CLI וב-Terraform עבור אשכולות שמשתמשים בדומיינים של טופולוגיה, אפשר לרשום את האשכול ב-GKE On-Prem API בזמן שהוא נוצר.

אם GKE On-Prem API מופעל בפרויקט Google Cloud , כל האשכולות בפרויקט נרשמים אוטומטית ל-GKE On-Prem API באזור שהוגדר ב-stackdriver.clusterLocation. האזור gkeOnPremAPI.location צריך להיות זהה לאזור שצוין ב-cloudAuditLogging.clusterLocation, gkeConnect.location ו-stackdriver.clusterLocation. אם האזורים לא זהים, יצירת האשכול תיכשל.

  • אם רוצים לרשום את כל האשכולות בפרויקט ל-GKE On-Prem API, צריך לבצע את השלבים שבקטע לפני שמתחילים כדי להפעיל את GKE On-Prem API בפרויקט ולהשתמש בו.

  • אם אתם לא רוצים לרשום את האשכול ל-GKE On-Prem API, צריך לכלול את הקטע הזה ולהגדיר את gkeOnPremAPI.enabled ל-false. אם לא רוצים לרשום אף אשכול בפרויקט, צריך להשבית את gkeonprem.googleapis.com (שם השירות של GKE On-Prem API) בפרויקט. הוראות מפורטות מופיעות במאמר השבתת שירותים.

stackdriver

ממלאים את הקטע stackdriver כדי להפעיל את Cloud Logging ו-Cloud Monitoring עבור האשכול.

חשוב לשים לב לדרישות הבאות:

  • המזהה ב-stackdriver.projectID צריך להיות זהה למזהה ב-gkeConnect.projectID וב-cloudAuditLogging.projectID.

  • האזור Google Cloud שמוגדר ב-stackdriver.clusterLocation חייב להיות זהה לאזור שמוגדר ב-cloudAuditLogging.clusterLocation וב-gkeConnect.location. בנוסף, אם gkeOnPremAPI.enabled הוא true, צריך להגדיר את אותו אזור ב-gkeOnPremAPI.location.

אם מזהי הפרויקט והאזורים לא זהים, יצירת האשכול תיכשל.

cloudAuditLogging

אם אתם רוצים לשלב את יומני הביקורת משרת Kubernetes API של האשכול עם יומני הביקורת של Cloud, אתם צריכים למלא את הקטע cloudAuditLogging.

שימו לב לדרישות הבאות לגבי אשכולות חדשים:

  • כי הערך של enableAdvancedCluster הוא true, ולכן צריך לציין את אותו נתיב במאפיינים cloudAuditLogging.serviceAccountKeyPath וstackdriver.serviceAccountKeyPath.

  • המזהה ב-cloudAuditLogging.projectID צריך להיות זהה למזהה ב-gkeConnect.projectID וב-stackdriver.projectID.

  • ה Google Cloud אזור שמוגדר ב-cloudAuditLogging.clusterLocation חייב להיות זהה לאזור שמוגדר ב-stackdriver.clusterLocation וב-gkeConnect.location (אם השדה כלול בקובץ ההגדרות). בנוסף, אם הערך של gkeOnPremAPI.enabled הוא true, צריך להגדיר את אותו אזור ב-gkeOnPremAPI.location.

אם מזהי הפרויקט והאזורים לא זהים, יצירת האשכול תיכשל.

clusterBackup

הסרת הקטע הזה. גיבוי של אשכול האדמין למאגר נתונים של vSphere לא נתמך.

autoRepair

אם רוצים להפעיל תיקון אוטומטי של הצמתים באשכול האדמין, צריך להגדיר את autoRepair.enabled לערך true.

secretsEncryption

בגלל שהערך של enableAdvancedCluster הוא true, צריך להסיר את הקטע הזה.

osImageType

מגדירים את osImageType. אל ubuntu_cgv2.

preparedSecrets

מסירים את השדה preparedSecrets. פרטי כניסה מוכנים מראש לא נתמכים כשהאפשרות 'דומיינים של טופולוגיה' מופעלת.

דוגמה לקובצי תצורה מלאים

דוגמה לקובץ הגדרות של אשכול אדמין שמולא. ההגדרה מאפשרת חלק מהתכונות הזמינות, אבל לא את כולן.

vc-01-admin-cluster.yaml

apiVersion: v1
kind: AdminCluster
name: "gke-admin-01"
bundlePath: "/var/lib/gke/bundles/gke-onprem-vsphere-1.31.0-gke.1-full.tgz"
enableAdvancedCluster: true
infraConfigFilePath: "/my-config-folder/vsphere-infrastructure-config.yaml"
network:
  serviceCIDR: "10.96.232.0/24"
  podCIDR: "192.168.0.0/16"
  ipMode:
    type: "static"
    ipBlockFilePath: "/my-config-folder/admin-cluster-ipblock.yaml"
loadBalancer:
  vips:
    controlPlaneVIP: "172.16.20.59"
  kind: "ManualLB"
antiAffinityGroups:
  enabled: false
adminMaster:
  cpus: 4
  memoryMB: 16384
  replicas: 3
  topologyDomains: "admin-cluster-domain"
componentAccessServiceAccountKeyPath: "sa-key.json"
gkeConnect:
  projectID: "my-project-123"
  registerServiceAccountKeyPath: "connect-register-sa-2203040617.json"
stackdriver:
  projectID: "my-project-123"
  clusterLocation: "us-central1"
  enableVPC: false
  serviceAccountKeyPath: "log-mon-sa-2203040617.json"
  disableVsphereResourceMetrics: false
autoRepair:
  enabled: true
osImageType: "ubuntu_cgv2"

מילוי קובץ ההגדרות של תשתית vSphere

מעתיקים את התבנית של קובץ ההגדרות של תשתית vSphere לקובץ בספרייה שצוינה בשדה infraConfigFilePath בקובץ ההגדרות של אשכול האדמין. יש רק קובץ תצורה אחד של תשתית vSphere לאשכול האדמין ולכל אשכולות המשתמשים המנוהלים.

Secret

ממלאים את הקטע Secret בקובץ ההגדרות של תשתית vSphere. בקטע הזה מתואר הסוד של פרטי הכניסה ל-vSphere שבו מאוחסנים פרטי הכניסה של כל שרת vCenter.

VSphereInfraConfig.name

ממלאים את השדה VSphereInfraConfig,name.

VSphereInfraConfig.credentials.vCenters

לכל Secret, מוסיפים קטע VSphereInfraConfig.credentials.vCenters תואם.

VSphereInfraConfig,topologyDomains

ממלאים את הקטע VSphereInfraConfig.topologyDomains כדי להגדיר את תחומים הטופולוגיים.

מילוי קובץ של בלוק כתובות IP

מעתיקים את התבנית של קובץ בלוק ה-IP לקובץ בספרייה שצוינה בשדה network.ipMode.ipBlockFilePath בקובץ התצורה של אשכול האדמין. מוסיפים את כתובות ה-IP של השער, מסכת הרשת ושלושת הצמתים של מישור הבקרה. לכל כתובת IP של צומת במישור הבקרה, מוסיפים isControlPlane: true כמו שמוצג בדוגמה לדומיינים של טופולוגיה.

קבלת קובצי אימג' של מערכת ההפעלה

  1. מורידים את חבילת Google Distributed Cloud הרגילה לתחנת העבודה של האדמין:

    gcloud storage cp gs://gke-on-prem-release/gke-onprem-bundle/VERSION/gke-onprem-vsphere-VERSION.tgz /var/lib/gke/bundles/gke-onprem-vsphere-VERSION.tgz
    

    מחליפים את VERSION בגרסה של Google Distributed Cloud שרוצים להתקין.

    הפקודה הזו מורידה את החבילה הרגילה. אל תורידו את החבילה המלאה כי היא לא נתמכת באשכולות מתקדמים.

  2. מריצים את הפקודה gkectl prepare כדי לאתחל את סביבת vSphere:

    gkectl prepare --config ADMIN_CLUSTER_CONFIG
    

    מחליפים את ADMIN_CLUSTER_CONFIG בנתיב של התצורה של אשכול האדמין.

    הפקודה gkectl prepare מבצעת את משימות ההכנה הבאות:

    • מייבא תמונות של מערכות הפעלה ל-vSphere ומסמן אותן כתבניות של מכונות וירטואליות.

    • אם אתם משתמשים במאגר Docker פרטי, קובצי האימג' של הקונטיינרים מועברים בדחיפה למאגר שלכם.

    • אופציונלי: אימות של הצהרות ה-build של קובצי האימג' בקונטיינר, כדי לוודא שהקובצים נוצרו ונחתמו על ידי Google ושהם מוכנים לפריסה.

יצירת אשכול האדמין

יוצרים את אשכול האדמין:

gkectl create admin --config ADMIN_CLUSTER_CONFIG

המשך יצירה של אשכול האדמין אחרי כשל

אם יצירת אשכול האדמין נכשלת או מבוטלת, אפשר להריץ שוב את הפקודה create:

gkectl create admin --config ADMIN_CLUSTER_CONFIG

איתור קובץ ה-kubeconfig של אשכול האדמין

הפקודה gkectl create admin יוצרת קובץ kubeconfig בשם kubeconfig בספרייה הנוכחית. תצטרכו את קובץ ה-kubeconfig הזה בהמשך כדי לבצע אינטראקציה עם אשכול האדמין.

קובץ ה-kubeconfig מכיל את השם של אשכול האדמין. כדי לראות את שם האשכול, אפשר להריץ את הפקודה:

kubectl config get-clusters --kubeconfig ADMIN_CLUSTER_KUBECONFIG

בפלט מוצג שם האשכול. לדוגמה:

NAME
gke-admin-tqk8x

אם רוצים, אפשר לשנות את השם והמיקום של קובץ ה-kubeconfig.

איך מוודאים שקלאסטר האדמין פועל

מוודאים שקלאסטר האדמין פועל:

kubectl get nodes --kubeconfig ADMIN_CLUSTER_KUBECONFIG

מחליפים את ADMIN_CLUSTER_KUBECONFIG בנתיב של קובץ ה-kubeconfig של אשכול האדמין.

בפלט מוצגים הצמתים של אשכול האדמין. לדוגמה:

admin-cp-vm-1   Ready    control-plane,master   ...
admin-cp-vm-2   Ready    control-plane,master   ...
admin-cp-vm-3   Ready    control-plane,master   ...

הגדרת PodTemplate

התווית של הטופולוגיה מאוכלסת בתוויות של הצמתים בדומיין הטופולוגיה. אלא אם הגדרתם את הדומיין של הטופולוגיה באמצעות האילוץ שמוגדר כברירת מחדל,‏ "topology.kubernetes.io/zone", כמפתח הטופולוגיה, אתם צריכים להגדיר את מפתח הטופולוגיה בתבנית ה-pod של הפריסה, ה-StatefulSet או ה-ReplicaSet, בהתאם לצורך.

לדוגמה, נניח שהגדרתם את המפתח בתווית הטופולוגיה כ-"topology.examplepetstore.com/zone". ב-PodTemplate, מציינים את המפתח כערך בשדה topologySpreadConstraints.topologyKey. כך מתזמן Kubernetes יכול לפזר את ה-Pods על פני תחום הטופולוגיה כדי להבטיח זמינות גבוהה ולמנוע ריכוז יתר באזור מסוים במקרה של כשל.

מידע נוסף על הגדרת topologySpreadConstraints זמין במאמר Pod Topology Spread Constraints במסמכי Kubernetes.

גיבוי קבצים

מומלץ לגבות את קובץ ה-kubeconfig של אשכול האדמין. כלומר, מעתיקים את קובץ ה-kubeconfig מתחנת העבודה של האדמין למיקום אחר. גם אם תאבדו את הגישה לתחנת העבודה של האדמין, או אם קובץ ה-kubeconfig בתחנת העבודה של האדמין יימחק בטעות, עדיין תהיה לכם גישה לאשכול האדמין.

מומלץ גם לגבות את מפתח ה-SSH הפרטי של אשכול האדמין. אם תאבדו את הגישה לקלאסטר האדמין, עדיין תוכלו להשתמש ב-SSH כדי להתחבר לצמתי קלאסטר האדמין. כך תוכלו לפתור בעיות ולבדוק בעיות בקישוריות לאשכול הניהול.

מחולצים את מפתח ה-SSH מאשכול האדמין לקובץ בשם admin-cluster-ssh-key:

kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG get secrets -n kube-system sshkeys \
    -o jsonpath='{.data.vsphere_tmp}' | base64 -d > admin-cluster-ssh-key

עכשיו אפשר לגבות את admin-cluster-ssh-key למיקום אחר שתבחרו.

פתרון בעיות

פתרון בעיות ביצירה ובשדרוג של אשכולות

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

יצירת אשכול משתמשים לשימוש בדומיין טופולוגי