יצירת אשכולות בסיסיים

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

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

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

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

  1. חשוב לוודא שהגדרתם את סביבות vSphere ו- Google Cloud כפי שמתואר במאמר הגדרת תשתית מינימלית.

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

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

אלה השלבים העיקריים שנדרשים להגדרה הזו:

  1. מתחברים ל-Google Cloud CLI באמצעות חשבון שיש לו את ההרשאות הנדרשות ליצירת חשבונות שירות.

  2. אוספים את המידע שנדרש להגדרת Google Distributed Cloud, כולל שם המשתמש והסיסמה של vCenter וכתובות ה-IP שהכנתם בקטע הקודם.

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

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

  5. יוצרים אשכול משתמשים כדי להריץ את עומסי העבודה.

1. כניסה ל-Google Cloud CLI

כדי להגדיר את Google Distributed Cloud, צריך כמה חשבונות שירות עם הרשאות שונות. לכן, כדי לבצע את ההגדרה הזו, אתם צריכים להיות מחוברים ל-Google Cloud CLI באמצעות חשבון שיש לו את ההרשאות הנדרשות ליצירה ולהגדרה של חשבונות שירות, כי gkeadm משתמש במאפיין הנוכחי של account ב-CLI של gcloud.

  1. מתחברים ל-CLI של gcloud. אפשר להשתמש בכל חשבון Google, אבל צריכות להיות לו ההרשאות הנדרשות. אם פעלתם לפי החלק הקודם במדריך הזה, סביר להניח שכבר התחברתם באמצעות חשבון מתאים כדי ליצור את חשבון השירות של שירות הגישה לרכיבים.

    gcloud auth login
    
  2. מוודאים שהמאפיין account של ה-CLI של gcloud מוגדר בצורה נכונה:

    gcloud config list
    

    בפלט מוצג הערך של הנכס account של ערכת ה-SDK. לדוגמה:

    [core]
    account = my-name@google.com
    disable_usage_reporting = False
    Your active configuration is: [default]
    
  3. מוודאים שהרכיבים העדכניים של ה-CLI של gcloud מותקנים:

    gcloud components update
    

    יכול להיות שתוצג לכם ההודעה הבאה, בהתאם לשיטה שבה התקנתם את ה-CLI של gcloud: "לא ניתן לבצע את הפעולה הזו כי מנהל הרכיבים של ה-CLI של gcloud מושבת בהתקנה הזו. כדי להשיג את אותה התוצאה בהתקנה הזו, אפשר להריץ את הפקודה הבאה:" פועלים לפי ההוראות כדי להעתיק ולהדביק את הפקודה לעדכון הרכיבים.

2. איסוף מידע

משתמשים במידע שהכנתם בשלב הגדרת תשתית מינימלית כדי לערוך את ה-placeholders בטבלה הבאה:

פרטי vSphere
שם המשתמש בחשבון vCenter USERNAME
הסיסמה לחשבון vCenter PASSWORD
הכתובת של vCenter Server ADDRESS
הנתיב אל אישור ה-CA הבסיסי של vCenter Server, במחשב שבו תשתמשו כדי ליצור את תחנת העבודה של האדמין CA_CERT_PATH
השם של מרכז הנתונים של vSphere DATA_CENTER
השם של אשכול vSphere VSPHERE_CLUSTER
השם או הנתיב של מאגר משאבים ב-vSphere. מידע נוסף זמין במאמר vcenter.resourcePool. RESOURCE_POOL
השם של מאגר הנתונים של vSphere DATASTORE
השם של רשת vSphere NETWORK
כתובות IP
כתובת IP אחת לתחנת העבודה של האדמין ADMIN_WS_IP
שלוש כתובות IP לצמתים של מישור הבקרה של אשכול האדמין. ADMIN_CONTROL_PLANE_NODE_IP_1
ADMIN_CONTROL_PLANE_NODE_IP_2
ADMIN_CONTROL_PLANE_NODE_IP_3
כתובת IP לצומת של מישור הבקרה באשכול המשתמשים. USER_CONTROL_PLANE_NODE_IP
ארבע כתובות IP לצמתי העובדים של אשכול המשתמשים. הפרטים כוללים כתובת של צומת נוסף שאפשר להשתמש בו במהלך השדרוג והעדכון. USER_NODE_IP_1
USER_NODE_IP_2
USER_NODE_IP_3
USER_NODE_IP_4
כתובת IP וירטואלית (VIP) לשרת Kubernetes API של אשכול האדמין ADMIN_CONTROL_PLANE_VIP
כתובת VIP לשרת ה-API של Kubernetes באשכול המשתמשים USER_CONTROL_PLANE_VIP
כתובת IP וירטואלית (VIP) של Ingress עבור אשכול המשתמשים USER_INGRESS_VIP
שני כתובות VIP לשירותים מסוג LoadBalancer באשכול המשתמשים. SERVICE_VIP_1
SERVICE_VIP_2
כתובת ה-IP של שרת DNS שאפשר להגיע אליו מתחנת העבודה של האדמין ומצמתי האשכול DNS_SERVER_IP
כתובת ה-IP של שרת NTP שאפשר להגיע אליו מתחנת העבודה של האדמין ומצמתי האשכול NTP_SERVER_IP
כתובת ה-IP של שער ברירת המחדל של תת-הרשת שכוללת את תחנת העבודה של האדמין ואת צמתי האשכול DEFAULT_GATEWAY_IP
מסיכת הרשת של רשת המשנה שכוללת את תחנת העבודה של האדמין ואת הצמתים של האשכול
דוגמה: 255.255.255.0
NETMASK
אם הרשת שלכם נמצאת מאחורי שרת proxy, כתובת ה-URL של שרת ה-proxy. מידע נוסף זמין במאמר בנושא proxy. אם צריך, ממלאים את הפרטים האלה באופן ידני בקובץ ההגדרות של תחנת העבודה של האדמין. PROXY_URL
טווחים של CIDR לשירותים ול-Pods
לכל אחד מהאשכולות, אשכול האדמין ואשכול המשתמש, צריך להגדיר טווח CIDR לשירותים וטווח CIDR ל-Pods. אפשר להשתמש בערכים הבאים שמאוכלסים מראש, אלא אם צריך לשנות אותם כדי למנוע חפיפה עם רכיבים אחרים ברשת:
טווח CIDR לשירותים באשכול האדמין 10.96.232.0/24
טווח CIDR ל-Pods באשכול האדמין 192.168.0.0/16
טווח CIDR לשירותים באשכול המשתמשים 10.96.0.0/20
טווח CIDR של ה-Pods באשכול המשתמשים 192.168.0.0/16
Google Cloud פרטים
המזהה של פרויקט בענן שבחרתם PROJECT_ID
הנתיב לקובץ מפתח ה-JSON של חשבון השירות לגישה לרכיבים שהגדרתם בקטע הקודם, במחשב שבו תשתמשו כדי ליצור את תחנת העבודה של האדמין. COMPONENT_ACCESS_SA_KEY_PATH
כתובת האימייל שמשויכת לחשבון Google Cloud שלכם. לדוגמה: alex@example.com. GOOGLE_ACCOUNT_EMAIL

3. יצירת תחנת עבודה לאדמין

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

הורדת gkeadm

מורידים את gkeadm לספרייה הנוכחית:

gcloud storage cp gs://gke-on-prem-release/gkeadm/1.35.100-gke.72/linux/gkeadm ./
chmod +x gkeadm

כדי ליצור את קובצי ההגדרות של אשכולות האדמין והמשתמשים, צריך להשתמש בגרסה gkeadm (שהיא גם הגרסה של Google Distributed Cloud). כדי לבדוק את הגרסה של gkeadm, מריצים את הפקודה הבאה:

./gkeadm version

בדוגמה הבאה של פלט מוצגת הגרסה.

gkeadm 1.35.100 (1.35.100-gke.72)

אפשר להוריד גרסה אחרת של gkeadm, אבל במדריך הזה אנחנו מניחים שאתם מתקינים את גרסה 1.35.100-gke.72, ומשתמשים בגרסה הזו בכל קובצי ההגדרות והפקודות.

יצירת קובץ פרטי הכניסה

יוצרים ושומרים קובץ בשם credential.yaml בספרייה הנוכחית עם התוכן הבא:

apiVersion: v1
kind: CredentialFile
items:
- name: vCenter
  username: "USERNAME"
  password: "PASSWORD"

יצירת קובץ התצורה של תחנת העבודה לאדמין

יוצרים ושומרים קובץ בשם admin-ws-config.yaml, שוב בספרייה הנוכחית, עם התוכן הבא:

gcp:
  componentAccessServiceAccountKeyPath: "COMPONENT_ACCESS_SA_KEY_PATH"
vCenter:
  credentials:
    address: "ADDRESS"
    fileRef:
      path: "credential.yaml"
      entry: "vCenter"
  datacenter: "DATA_CENTER"
  datastore: "DATASTORE"
  cluster: "VSPHERE_CLUSTER"
  network: "NETWORK"
  resourcePool: "RESOURCE_POOL"
  caCertPath: "CA_CERT_PATH"
proxyUrl: ""
adminWorkstation:
  name: "minimal-installation-admin-workstation"
  cpus: 4
  memoryMB: 8192
  diskGB: 100
  dataDiskName: gke-on-prem-admin-workstation-data-disk/minimal-installation-data-disk.vmdk
  dataDiskMB: 512
  network:
    ipAllocationMode: "static"
    hostConfig:
      ip: "ADMIN_WS_IP"
      gateway: "DEFAULT_GATEWAY_IP"
      netmask: "NETMASK"
      dns:
      - "DNS_SERVER_IP"
  proxyUrl: ""
  ntpServer: ntp.ubuntu.com

יצירת תחנת עבודה לאדמין

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

./gkeadm create admin-workstation --auto-create-service-accounts

מריצים את הפקודה הבאה:

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

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

...
Admin workstation is ready to use.
Admin workstation information saved to /usr/local/google/home/me/my-admin-workstation
This file is required for future upgrades
SSH into the admin workstation with the following command:
ssh -i /usr/local/google/home/me/.ssh/gke-admin-workstation ubuntu@172.16.20.49
********************************************************************

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

מידע מפורט יותר על יצירת תחנת עבודה לאדמין זמין במאמר יצירת תחנת עבודה לאדמין.

חיבור לתחנת העבודה של האדמין

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

ssh -i /usr/local/google/home/me/.ssh/gke-admin-workstation ubuntu@172.16.20.49

אם תצטרכו למצוא את הפקודה הזו שוב, gkeadm יוצר קובץ בשם gke-admin-ws-... בספרייה במחשב המקומי שבה הפעלתם את gkeadm create admin-workstation. המידע הזה כולל פרטים על תחנת העבודה של האדמין, כולל פקודת ה-SSH.

בתחנת העבודה של האדמין, מזינים exit כדי לסיים את חיבור ה-SSH ולחזור למכונה המקומית.

מעתיקים את המפתח של יומן הביקורת לתחנת העבודה של האדמין

בקטע הקודם יצרתם קובץ מפתח JSON עבור חשבון השירות שלכם לרישום ביומן ביקורת.

מעתיקים את קובץ מפתח ה-JSON לספריית הבית בתחנת העבודה של האדמין. לדוגמה, במחשב המקומי:

scp -i /usr/local/google/home/me/.ssh/gke-admin-workstation audit-logging-key.json ubuntu@172.16.20.49:~

הצגת קבצים בתחנת העבודה של האדמין

שוב, יוצרים חיבור SSH לתחנת העבודה של האדמין.

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

ls -1

הפלט צריך לכלול:

  • admin-cluster.yaml, קובץ הגדרות של תבנית ליצירת אשכול אדמין.
  • user-cluster.yaml, קובץ הגדרות של תבנית ליצירת אשכול משתמשים.
  • קובץ האישור של vCenter שציינתם בהגדרות של תחנת העבודה של האדמין
  • קובץ credential.yaml שציינתם בהגדרות של תחנת העבודה של האדמין.
  • קובץ מפתח JSON של חשבון השירות שלכם ליומן ביקורת.
  • קובצי מפתח JSON של שני חשבונות שירות שgkeadm יצר בשבילכם: חשבון שירות של connect-register וחשבון שירות של logging-monitoring, וגם קובץ המפתח של חשבון השירות של גישת הרכיב שיצרתם קודם.

לדוגמה:

admin-cluster.yaml
admin-ws-config.yaml
audit-logging-key.json
sa-key.json
connect-register-sa-2203040617.json
credential.yaml
log-mon-sa-2203040617.json
logs
vc01-cert.pem
user-cluster.yaml

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

שם הקובץ של מפתח חשבון השירות Connect-register
דוגמה: connect-register-sa-2203040617.json
CONNECT_REGISTER_SA_KEY
שם הקובץ של מפתח חשבון השירות לניטור רישום ביומן
דוגמה: log-mon-sa-2203040617.json
LOG_MON_SA_KEY
שם קובץ המפתח של חשבון השירות לרישום ביומן הביקורת
דוגמה: audit-logging-key.json
AUDIT_LOG_SA_KEY
שם הקובץ של מפתח חשבון השירות לגישה לרכיב
דוגמה: sa-key.json
COMPONENT_ACCESS_SA_KEY
שם הקובץ של האישור ב-vCenter
דוגמה: vc01-cert.pem
CA_CERT_FILE

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

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

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

פותחים את admin-cluster.yaml ומחליפים את התוכן בתוכן הבא:

apiVersion: v1
kind: AdminCluster
name: "minimal-installation-admin-cluster"
bundlePath: "/var/lib/gke/bundles/gke-onprem-vsphere-1.35.100-gke.72-full.tgz"
vCenter:
  address: "ADDRESS"
  datacenter: "DATA_CENTER"
  cluster: "VSPHERE_CLUSTER"
  resourcePool: "RESOURCE_POOL"
  datastore: "DATASTORE"
  caCertPath: "CA_CERT_FILE"
  credentials:
    fileRef:
      path: "credential.yaml"
      entry: "vCenter"
network:
  hostConfig:
    dnsServers:
    - "DNS_SERVER_IP"
    ntpServers:
    - "NTP_SERVER_IP"
  serviceCIDR: "10.96.232.0/24"
  podCIDR: "192.168.0.0/16"
  vCenter:
    networkName: "NETWORK"
  controlPlaneIPBlock:
    netmask: "NETMASK"
    gateway: "DEFAULT_GATEWAY_IP"
    ips:
    - ip: "ADMIN_CONTROL_PLANE_NODE_IP_1"
      hostname: "admin-cp-vm-1"
    - ip: "ADMIN_CONTROL_PLANE_NODE_IP_2"
      hostname: "admin-cp-vm-2"
    - ip: "ADMIN_CONTROL_PLANE_NODE_IP_3"
      hostname: "admin-cp-vm-3"
loadBalancer:
  vips:
    controlPlaneVIP: "ADMIN_CONTROL_PLANE_VIP"
  kind: "MetalLB"
adminMaster:
  cpus: 4
  memoryMB: 16384
  replicas: 3
antiAffinityGroups:
  enabled: false
componentAccessServiceAccountKeyPath: "COMPONENT_ACCESS_SA_KEY"
gkeConnect:
  projectID: "PROJECT_ID"
  registerServiceAccountKeyPath: "CONNECT_REGISTER_SA_KEY"
stackdriver:
  projectID: "PROJECT_ID"
  clusterLocation: "us-central1"
  enableVPC: false
  serviceAccountKeyPath: "LOG_MON_SA_KEY"
  disableVsphereResourceMetrics: false
cloudAuditLogging:
  projectID: "PROJECT_ID"
  clusterLocation: us-central1
  serviceAccountKeyPath: "AUDIT_LOG_SA_KEY"

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

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

gkectl check-config --config admin-cluster.yaml

ייבוא תמונות של מערכת הפעלה אל vSphere

מריצים את הפקודה gkectl prepare עם קובץ ההגדרות שהושלם כדי לייבא תמונות של מערכת הפעלה של צמתים אל vSphere:

gkectl prepare --config admin-cluster.yaml --skip-validation-all

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

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

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

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

gkectl create admin --config admin-cluster.yaml

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

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

gkectl create admin --config admin-cluster.yaml

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

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

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

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

kubectl get nodes --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 ...

הפעלת הרשאה מבוססת-תפקידים

כדי להקצות לחשבון המשתמש שלכם את התפקיד clusterrole/cluster-admin ב-Kubernetes באשכול, מריצים את הפקודה הבאה:

gcloud container fleet memberships generate-gateway-rbac \
    --membership=minimal-installation-admin-cluster \
    --role=clusterrole/cluster-admin \
    --users=GOOGLE_ACCOUNT_EMAIL \
    --project=PROJECT_ID \
    --kubeconfig=kubeconfig \
    --context=minimal-installation-admin-cluster \
    --apply

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

Validating input arguments.
Specified Cluster Role is: clusterrole/cluster-admin
Generated RBAC policy is:
--------------------------------------------
...
Applying the generate RBAC policy to cluster with kubeconfig: kubeconfig, context: minimal-installation-admin-cluster
Writing RBAC policy for user: GOOGLE_ACCOUNT_EMAIL to cluster.
Successfully applied the RBAC policy to cluster.

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

רישום אוטומטי ל-GKE On-Prem API

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

5. יצירת אשכול משתמשים

בקטע הזה מפורטים השלבים ליצירת אשכול משתמשים באמצעות המסוף, gkectl, Terraform או ה-CLI של gcloud.

gkectl

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

יצירת קובץ של בלוק כתובות IP לאשכול המשתמשים

  1. יוצרים קובץ בשם user-ipblock.yaml.

  2. מעתיקים את התוכן הבא ומדביקים אותו בקובץ user-ipblock.yaml ושומרים את הקובץ:

    blocks:
      - netmask: "NETMASK"
        gateway: "DEFAULT_GATEWAY_IP"
        ips:
        - ip: "USER_NODE_IP_1"
          hostname: "user-vm-1"
        - ip: "USER_NODE_IP_2"
          hostname: "user-vm-2"
        - ip: "USER_NODE_IP_3"
          hostname: "user-vm-3"
        - ip: "USER_NODE_IP_4"
          hostname: "user-vm-4"
    

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

  1. יוצרים קובץ בשם user-cluster.yaml באותה ספרייה שבה נמצא הקובץ user-ipblock.yaml.

  2. מעתיקים את התוכן הבא ומדביקים אותו בקובץ user-cluster.yaml ושומרים את הקובץ:

apiVersion: v1
kind: UserCluster
name: "minimal-installation-user-cluster"
gkeOnPremVersion: "1.35.100-gke.72"
enableControlplaneV2: true
network:
  hostConfig:
    dnsServers:
    - "DNS_SERVER_IP"
    ntpServers:
    - "NTP_SERVER_IP"
  ipMode:
    type: "static"
    ipBlockFilePath: "user-ipblock.yaml"
  serviceCIDR: "10.96.0.0/20"
  podCIDR: "192.168.0.0/16"
  controlPlaneIPBlock:
    netmask: "NETMASK"
    gateway: "DEFAULT_GATEWAY_IP"
    ips:
    - ip: "USER_CONTROL_PLANE_NODE_IP"
      hostname: "cp-vm-1"
loadBalancer:
  vips:
    controlPlaneVIP: "USER_CONTROL_PLANE_VIP"
    ingressVIP: "USER_INGRESS_VIP"
  kind: "MetalLB"
  metalLB:
    addressPools:
    - name: "uc-address-pool"
      addresses:
      - "USER_INGRESS_VIP/32"
      - "SERVICE_VIP_1/32"
      - "SERVICE_VIP_2/32"
enableDataplaneV2: true
nodePools:
- name: "uc-node-pool"
  cpus: 4
  memoryMB: 8192
  replicas: 3
  enableLoadBalancer: true
antiAffinityGroups:
  enabled: false
gkeConnect:
  projectID: "PROJECT_ID"
  registerServiceAccountKeyPath: "CONNECT_REGISTER_SA_KEY"
stackdriver:
  projectID: "PROJECT_ID"
  clusterLocation: "us-central1"
  enableVPC: false
  serviceAccountKeyPath: "LOG_MON_SA_KEY"
  disableVsphereResourceMetrics: false
autoRepair:
  enabled: true

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

הוספנו תמיכה בפקודה gkectl check-config באשכולות של משתמשים מתקדמים בגרסאות הבאות: 1.32.700 ומעלה, 1.33.300 ומעלה ו-1.34.0 ומעלה. אם מתקינים גרסה נמוכה יותר באשכול מתקדם, הפקודה תיכשל.

  1. מוודאים שקובץ ההגדרות של אשכול המשתמשים תקין ושאפשר להשתמש בו ליצירת אשכול:

    gkectl check-config --kubeconfig kubeconfig --config user-cluster.yaml
  2. יוצרים את אשכול המשתמשים:

    gkectl create cluster --kubeconfig kubeconfig --config user-cluster.yaml

    יצירת האשכול נמשכת כ-30 דקות.

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

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

אימות הפעילות של אשכול המשתמשים

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

kubectl get nodes --kubeconfig USER_CLUSTER_KUBECONFIG

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

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

cp-vm-1     Ready    control-plane,master
user-vm-1   Ready
user-vm-2   Ready
user-vm-3   Ready

הפעלת הרשאה מבוססת-תפקידים

כדי להקצות לחשבון המשתמש שלכם את התפקיד clusterrole/cluster-admin ב-Kubernetes באשכול, מריצים את הפקודה הבאה:

gcloud container fleet memberships generate-gateway-rbac \
  --membership=minimal-installation-user-cluster \
  --role=clusterrole/cluster-admin \
  --users=GOOGLE_ACCOUNT_EMAIL \
  --project=PROJECT_ID \
  --kubeconfig=USER_CLUSTER_KUBECONFIG \
  --context=minimal-installation-user-cluster \
  --apply

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

Validating input arguments.
Specified Cluster Role is: clusterrole/cluster-admin
Generated RBAC policy is:
--------------------------------------------
...
Applying the generate RBAC policy to cluster with kubeconfig: kubeconfig, context: minimal-installation-admin-cluster
Writing RBAC policy for user: GOOGLE_ACCOUNT_EMAIL to cluster.
Successfully applied the RBAC policy to cluster.

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

רישום אוטומטי ל-GKE On-Prem API

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

המסוף

  1. נכנסים לדף Create a Google Distributed Cloud cluster במסוף Google Cloud .

    איך יוצרים אשכול Google Distributed Cloud

  2. בוחרים את Google Cloud הפרויקט שבו רוצים ליצור את האשכול. הפרויקט שנבחר משמש גם כפרויקט המארח של Fleet. הפרויקט הזה צריך להיות זהה לפרויקט שבו רשום אשכול האדמין. אחרי שיוצרים את אשכול המשתמשים, הוא נרשם אוטומטית ל-Fleet של הפרויקטים שנבחר.

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

דרישות מוקדמות

  1. חשוב לעיין במידע שבדף דרישות מוקדמות.

  2. בתחתית הדף, לוחצים על הבא.

מידע בסיסי על אשכולות

  1. בשדה Name (שם), מזינים שם לאשכול המשתמשים, לדוגמה, minimal-installation-user-cluster.

  2. בקטע Admin cluster (אשכול אדמין), בוחרים באפשרות minimal-installation-admin-cluster (אשכול אדמין עם התקנה מינימלית).

  3. בשדה GCP API Location, בוחרים באפשרות us-central1.

  4. בשדה Version (גרסה), בוחרים באפשרות 1.35.100-gke.72.

  5. אין צורך לפתוח את הקטע Authorization (הרשאה) או את הקטע vCenter configuration (הגדרת vCenter).

  6. לוחצים על הבא.

מישור הבקרה

  1. בקטע Control plane node IPs (כתובות IP של צומת מישור הבקרה), בשדה Gateway (שער), מזינים DEFAULT_GATEWAY_IP.

  2. בשדה Subnet mask (מסכה של רשת משנה), מזינים NETMASK.

  3. בקטע כתובות IP, בשדה כתובת IP‏ 1, מזינים USER_CONTROL_PLANE_NODE_IP. משאירים את השדה שם מארח 1 ריק.

  4. לוחצים על הבא.

Networking

בקטע הזה מציינים את כתובות ה-IP של הצמתים, ה-Pods והשירותים של האשכול. לכל צומת באשכול משתמשים צריכה להיות כתובת IP אחת, ועוד כתובת IP לצומת זמני שנדרש במהלך שדרוגים, עדכונים ותיקונים אוטומטיים של האשכול. מידע נוסף זמין במאמר כמה כתובות IP נדרשות לאשכול משתמשים?

  1. בקטע כתובות IP של צומתי עובד, מוודאים שבקטע מצב IP נבחרה האפשרות סטטי.

  2. בשדה Gateway (שער), מזינים DEFAULT_GATEWAY_IP.

  3. בשדה Subnet mask (מסכה של רשת משנה), מזינים NETMASK.

  4. בקטע כתובות IP, מזינים את הכתובות הבאות:

  • USER_NODE_IP_1
  • USER_NODE_IP_2
  • USER_NODE_IP_3
  • USER_NODE_IP_4

משאירים את השדות שם המארח ריקים.

  1. בשדה Service CIDR, מזינים 10.96.0.0/20. בשדה Pod CIDR, מזינים 192.168.0.0/16.

  2. בשדה DNS Server 1, מזינים DNS_SERVER_IP.

  3. בקטע NTP Server 1, מזינים את הערך NTP_SERVER_IP.

  4. משאירים את השדה DNS search domain (דומיין חיפוש DNS) ריק.

  5. לוחצים על הבא.

מאזן עומסים

  1. בקטע Load balancer type (סוג מאזן העומסים), בוחרים באפשרות Bundled with MetalLB (חבילה עם MetalLB).

  2. בקטע Address pools (מאגרי כתובות), משתמשים בשם ברירת המחדל.

  3. בקטע כתובות IP, בשדה טווח כתובות IP‏ 1, מזינים USER_INGRESS_VIP/32.

    לוחצים על הוספת טווח כתובות IP. בשדה טווח כתובות IP 1, מזינים SERVICE_VIP_1/32

    לוחצים על הוספת טווח כתובות IP. בשדה טווח כתובות IP‏ 2, מזינים את הערך SERVICE_VIP_2/32

  4. בקטע הקצאת כתובות IP, בוחרים באפשרות אוטומטית.

  5. משאירים את התיבה Avoid buggy IP addresses (מניעת שימוש בכתובות IP עם באגים) לא מסומנת.

  6. בקטע Virtual IPs, בשדה Control plane VIP מזינים USER_CONTROL_PLANE_VIP. השדה Ingress VIP כבר מלא.

  7. לוחצים על Continue.

תכונות

  1. משאירים את כל ברירות המחדל.

  2. לוחצים על הבא.

מאגרי צמתים

  1. משאירים את כל ברירות המחדל.

  2. לוחצים על אימות והשלמה כדי ליצור את אשכול המשתמשים. יצירת אשכול המשתמשים נמשכת 15 דקות או יותר. במסוף מוצגים הודעות סטטוס בזמן שהמערכת מאמתת את ההגדרות ויוצרת את האשכול במרכז הנתונים.

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

    מידע נוסף על שגיאות אפשריות ואיך לתקן אותן זמין במאמר פתרון בעיות באשכולות שרשומים ל-GKE On-Prem API.

Terraform

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

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

    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
    
  2. בודקים את משאב Terraform של אשכול המשתמשים:

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

    resource "google_gkeonprem_vmware_cluster" "cluster-basic" {
      name = "minimal-installation-user-cluster"
      project = "PROJECT_ID"
      location = "us-central1"
      admin_cluster_membership = "projects/PROJECT_ID/locations/global/memberships/minimal-installation-admin-cluster"
      description = "User cluster config with MetalLB, static IPs, and Controlplane V2"
      enable_control_plane_v2 = "true"
      on_prem_version = "1.35.100-gke.72"
      control_plane_node {
        cpus = 4
        memory = 8192
        replicas = 1
      }
      network_config {
        service_address_cidr_blocks = ["10.96.0.0/20"]
        pod_address_cidr_blocks = ["192.168.0.0/16"]
        host_config {
          dns_servers = ["DNS_SERVER_IP"]
          ntp_servers = ["NTP_SERVER_IP"]
        }
        static_ip_config {
          ip_blocks {
            netmask = "NETMASK"
            gateway = "DEFAULT_GATEWAY_IP"
            ips {
              ip = "USER_NODE_IP_1"
              hostname = "user-vm-1"
            }
            ips {
              ip = "USER_NODE_IP_2"
              hostname = "user-vm-2"
            }
            ips {
              ip = "USER_NODE_IP_3"
              hostname = "user-vm-3"
            }
            ips {
              ip = "USER_NODE_IP_4"
              hostname = "user-vm-4"
            }
          }
        }
        control_plane_v2_config {
          control_plane_ip_block {
            netmask = "NETMASK"
            gateway = "DEFAULT_GATEWAY_IP"
            ips {
              ip = "USER_CONTROL_PLANE_NODE_IP"
              hostname = "cp-vm-1"
            }
          }
        }
      }
      load_balancer {
        vip_config {
          control_plane_vip = "USER_CONTROL_PLANE_VIP"
          ingress_vip = "USER_INGRESS_VIP"
        }
        metal_lb_config {
          address_pools {
            pool = "uc-address-pool"
            manual_assign = "true"
            addresses = ["USER_INGRESS_VIP/32", "SERVICE_VIP_1/32", "SERVICE_VIP_2/32"]
          }
        }
      }
      authorization {
        admin_users {
        username = "GOOGLE_ACCOUNT_EMAIL"
      }
    }
      provider = google-beta
    }
    
    resource "google_gkeonprem_vmware_node_pool" "my-node-pool-1" {
      name = "uc-node-pool"
      project = "PROJECT_ID"
      vmware_cluster = "minimal-installation-user-cluster"
      location = "us-central1"
      config {
        replicas = 3
        image_type = "ubuntu_containerd"
        enable_load_balancer = "true"
      }
      depends_on = [
        google_gkeonprem_vmware_cluster.cluster-basic
      ]
      provider = google-beta
    }
    
  3. מעתיקים את משאב Terraform אל main.tf ושומרים את הקובץ.

  4. מפעילים את Terraform ויוצרים תוכנית ב-Terraform:

    terraform init
    

    ‫Terraform מתקין את כל הספריות הנדרשות, כמו פלאגין שמתממשק עם שירותים חיצוניים Google Cloud .

  5. בודקים את ההגדרות ומבצעים שינויים לפי הצורך:

    terraform plan
    
  6. מחילים את התוכנית של Terraform כדי ליצור את אשכול המשתמשים:

    terraform apply
    

    כשתופיע בקשה, כותבים yes.

    יצירת אשכול המשתמשים הבסיסי ומאגר הצמתים נמשכת כ-15 דקות (או יותר, בהתאם לרשת).

gcloud

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

gcloud container vmware clusters create minimal-installation-user-cluster \
  --project=PROJECT_ID \
  --admin-cluster-membership=projects/PROJECT_ID/locations/global/memberships/minimal-installation-admin-cluster \
  --location=us-central1 \
  --version=1.35.100-gke.72 \
  --admin-users=GOOGLE_ACCOUNT_EMAIL \
  --service-address-cidr-blocks=10.96.0.0/20 \
  --pod-address-cidr-blocks=192.168.0.0/16 \
  --metal-lb-config-address-pools='pool=uc-address-pool,avoid-buggy-ips=False,manual-assign=False,addresses=USER_INGRESS_VIP/32;SERVICE_VIP_1/32;SERVICE_VIP_2/32' \
  --control-plane-vip=USER_CONTROL_PLANE_VIP \
  --ingress-vip=USER_INGRESS_VIP \
  --static-ip-config-ip-blocks='gateway=DEFAULT_GATEWAY_IP,netmask=NETMASK,ips=USER_NODE_IP_1;USER_NODE_IP_2;USER_NODE_IP_3;USER_NODE_IP_4' \
  --dns-servers=DNS_SERVER_IP \
  --ntp-servers=NTP_SERVER_IP \
  --enable-control-plane-v2 \
  --enable-dataplane-v2 \
  --control-plane-ip-block='gateway=DEFAULT_GATEWAY_IP,netmask=NETMASK,ips=USER_CONTROL_PLANE_NODE_IP'

הפלט של הפקודה אמור להיראות כך:

Waiting for operation [projects/example-project-12345/locations/us-central1/operations/operation-1679543737105-5f7893fd5bae9-942b3f97-75e59179] to complete.

בפלט לדוגמה, המחרוזת operation-1679543737105-5f7893fd5bae9-942b3f97-75e59179 היא OPERATION_ID של הפעולה ארוכת הטווח. אפשר לבדוק את סטטוס הפעולה באמצעות הפקודה הבאה:

gcloud container vmware operations describe OPERATION_ID \
  --project=PROJECT_ID \
  --location=us-central1

מידע נוסף זמין במאמר בנושא gcloud container vmware operations.

יצירת אשכול המשתמשים נמשכת 15 דקות או יותר. אפשר לראות את האשכול במסוף בדף הסקירה הכללית של אשכולות Google Kubernetes Engine.

יוצרים מאגר צמתים:

gcloud container vmware node-pools create  uc-node-pool \
  --cluster=minimal-installation-user-cluster \
  --project=PROJECT_ID \
  --location=us-central1 \
  --image-type=ubuntu_containerd  \
  --boot-disk-size=40 \
  --cpus=4 \
  --memory=8192 \
  --replicas=3 \
  --enable-load-balancer

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

השלמתם את ההתקנה המינימלית הזו של Google Distributed Cloud. כפעולה אופציונלית, אפשר לראות את ההתקנה בפעולה על ידי פריסת אפליקציה.