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

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

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

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

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

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

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

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

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

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

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

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

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

gkectl create-config admin

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

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

name

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

bundlePath

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

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 ל-Pods ולשירותים באשכול.

loadBalancer

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

  • הקצו כתובת VIP לשרת ה-API של Kubernetes באשכול האדמין. מזינים את כתובת ה-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. אם מזהי הפרויקטים לא זהים, יצירת האשכול תיכשל.

אפשר גם לציין אזור שבו פועלים שירותי Fleet ו-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

אם אתם רוצים לשלב את יומני הביקורת משרת ה-API של Kubernetes באשכול עם יומני הביקורת של 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 של ה-Deployment, ה-StatefulSet או ה-ReplicaSet, לפי הצורך.

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

מידע נוסף על הגדרת topologySpreadConstraints זמין במאמר אילוצי פריסה של טופולוגיית Pod במסמכי התיעוד של 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 במיקום אחר לבחירתך.

פתרון בעיות

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

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

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