אם אתם כבר משתמשים ב-Terraform כדי לנהל את משאבי VMware Google Cloud ואת משאבי VMware המקומיים, אתם יכולים להשתמש ב-Terraform כדי ליצור אשכול אדמין לתוכנת Google Distributed Cloud רק עבור VMware. אפשר גם ליצור אשכול אדמין באמצעות gkectl או מסוףGoogle Cloud .
לפני שמתחילים
חשוב לוודא שהגדרתם את תחנת העבודה לאדמין ושאתם יכולים להיכנס אליה כמו שמתואר במאמר יצירת תחנת עבודה לאדמין.
מוודאים שקובצי מפתח ה-JSON של חשבונות השירות נמצאים בתחנת העבודה של האדמין.
מעיינים במסמך התכנון של כתובות ה-IP. מוודאים שיש מספיק כתובות IP זמינות לשלושת הצמתים של רמת הבקרה ולכתובת ה-IP הווירטואלית של רמת הבקרה. אם אתם מתכננים ליצור אשכולות משתמשים מסוג kubeception, אתם צריכים לוודא שיש לכם מספיק כתובות IP זמינות לצמתי מישור הבקרה של אשכולות המשתמשים האלה.
כדאי לעיין בסקירה הכללית על איזון עומסים ולשקול מחדש את ההחלטה לגבי סוג מאזן העומסים שבו רוצים להשתמש. במאזני עומסים שמוגדרים באופן ידני, צריך להגדיר את מאזן העומסים לפני שיוצרים את אשכול האדמין.
אם אתם משתמשים ב-
gkectlכדי ליצור את אשכול האדמין, אתם צריכים להחליט אם אתם רוצים להשתמש במאגר ציבורי או פרטי לרכיבי Google Distributed Cloud. מידע על שימוש במאגר פרטי של Docker זמין במאמרprivateRegistry. אי אפשר להשתמש במאגר Docker פרטי לרכיבי מערכת, גם לא ב-Terraform וגם לא במסוף Google Cloud .מחליטים איזה סוג של מערכת הפעלה רוצים להפעיל בצמתים של אשכול האדמין.
אם הארגון שלכם דורש שתעבורה יוצאת תעבור דרך שרת proxy, הקפידו להוסיף לרשימת ההיתרים את ממשקי ה-API הנדרשים ואת הכתובת של Artifact Registry.
בגרסה 1.29 ומעלה, בדיקות מקדימות בצד השרת מופעלות כברירת מחדל. בדיקות קדם-הפעלה בצד השרת דורשות כללי חומת אש נוספים. בקטע Firewall rules for admin clusters (כללי חומת אש לאשכולות אדמין), מחפשים את האפשרות Preflight checks (בדיקות לפני המראה) ומוודאים שכל כללי חומת האש הנדרשים מוגדרים. בדיקות מקדימות בצד השרת מופעלות באשכול bootstrap במקום באופן מקומי בתחנת העבודה של האדמין.
סקירה כללית של התהליך
לפני שיוצרים את אשכול האדמין, צריך להריץ את הפקודה gkectl register bootstrap בתחנת העבודה של האדמין. הפקודה הזו פורסת אשכול Kubernetes ב-Docker (kind) בתחנת העבודה של האדמין. באשכול האתחול הזה מתארחים בקרי Kubernetes שנדרשים ליצירת אשכול האדמין. כשיוצרים את אשכול האדמין, הבקרים באשכול ה-bootstrap יקצו צמתים, יריצו בדיקות קדם-הפעלה וירשמו את אשכול האדמין ב-Fleet. אחרי שנוצר אשכול האדמין, אשכול האתחול נמחק אוטומטית.
אלה השלבים ברמה גבוהה ליצירת אשכול אדמין באמצעות Terraform:
ממלאים את קובץ ההגדרות. משתמשים במשאב google_gkeonprem_vmware_admin_cluster ובדוגמה הבאה כדי ליצור את קובץ ההגדרות
main.tf.יוצרים אשכול
bootstrap. מריצים את הפקודהgkectl register bootstrapכדי ליצור את אשכול ה-bootstrap. בסיום הפקודה ליצירת אשכול האתחול, הפלט מודיע לכם שצריך לסיים את הגדרת אשכול האדמין. התהליך ממשיך לפעול עד שנוצר אשכול האדמין.ליצור אשכול אדמין. בחלון מסוף אחר או במחשב אחר שיש לו גישה ל-GKE On-Prem API, מריצים פקודות
terraformכדי ליצור אשכול אדמין חדש, כמו שצוין בקובץ ההגדרותmain.tfשהשלמתם.
מילוי קובץ התצורה
בדוגמה הבאה מוצג תהליך של יצירת אשכול אדמין עם זמינות גבוהה (HA) ושלושה צמתי מישור בקרה באמצעות MetalLB. בגרסה 1.28 ואילך, אשכולות אדמין חדשים צריכים להיות בעלי זמינות גבוהה. בגלל הדרישה הזו, אתם צריכים להגדיר את control_plane_node.replicas ל-3.
מידע נוסף ודוגמאות נוספות מופיעים במאמרי העזרה בנושא google_gkeonprem_vmware_admin_cluster. מידע על שימוש במאגר פרטי לתמונות מערכת זמין במאמר בנושא הגדרת מאגר פרטי של קונטיינרים.
ממלאים את משתני ה-placeholder בדוגמה הבאה, ואז מעתיקים ומדביקים אותה אל main.tf. אם השתמשתם ב-gkeadm כדי ליצור את תחנת העבודה של האדמין, פותחים את קובץ ההגדרות של תחנת העבודה של האדמין כדי להעתיק ערכים מהקטע vCenter למשתני ה-placeholder המתאימים.
resource "google_gkeonprem_vmware_admin_cluster" "admin-cluster-metallb" {
provider = google-beta
name = "ADMIN_CLUSTER_NAME"
project = "PROJECT_ID"
location = "REGION"
description = "DESCRIPTION"
bootstrap_cluster_membership = "projects/PROJECT_ID/locations/REGION/memberships/bootstrap-ADMIN_CLUSTER_NAME"
on_prem_version = "VERSION"
image_type = "IMAGE_TYPE"
vcenter {
address = "VCENTER_ADDRESS"
datacenter = "DATA_CENTER"
cluster = "VCENTER_CLUSTER"
resource_pool = "RESOURCE_POOL"
datastore = "DATASTORE"
ca_cert_data = "CA_CERT_DATA"
}
network_config {
service_address_cidr_blocks = ["10.96.232.0/24"]
pod_address_cidr_blocks = ["192.168.0.0/16"]
vcenter_network = "NETWORK"
dhcp_ip_config {
enabled = true
}
host_config {
dns_servers = ["DNS_SERVERS"]
ntp_servers = ["NTP_SERVERS"]
}
ha_control_plane_config {
control_plane_ip_block {
gateway = "GATEWAY"
netmask = "NETMASK"
ips {
hostname = "CONTROL_PLANE_HOST_1"
ip = "CONTROL_PLANE_NODE_IP_1"
}
ips {
hostname = "CONTROL_PLANE_HOST_2"
ip = "CONTROL_PLANE_NODE_IP_2"
}
ips {
hostname = "CONTROL_PLANE_HOST_3"
ip = "CONTROL_PLANE_NODE_IP_3"
}
}
}
}
control_plane_node {
cpus = NUM_CPUS
memory = MEMORY
replicas = 3
}
load_balancer {
vip_config {
control_plane_vip = "CONTROL_PLANE_VIP"
}
metal_lb_config {
enabled = true
}
}
}
מחליפים את מה שכתוב בשדות הבאים:
ADMIN_CLUSTER_NAME: השם של אשכול האדמין. האורך המקסימלי של השם הוא 20 תווים.
PROJECT_ID: מזהה הפרויקט ב- Google Cloud .
REGION: האזור שבו פועלים GKE On-Prem API (gkeonprem.googleapis.com), שירות Fleet (gkehub.googleapis.com) ושירות Connect (gkeconnect.googleapis.com). Google Cloud מצייניםus-west1או אזור נתמך אחר.השדה
locationתואם לדגל--locationבפקודהgkectl register bootstrap.
DESCRIPTION: תיאור של אשכול האדמין.
VERSION: הגרסה של Google Distributed Cloud עבור האשכול. אפשר ליצור אשכול באמצעות Terraform רק בגרסאות 1.28 ומעלה. הגרסה שמציינים כאן צריכה להיות זהה לגרסת החבילה שמציינים בדגל--bundle-pathבפקודהgkectl register bootstrap. רשימת הגרסאות זמינה במאמר גרסאות של Google Distributed Cloud.
IMAGE_TYPE: סוג תמונת מערכת ההפעלה שרוצים להריץ בצמתים של אשכול האדמין. מציינים אחד מהערכים הבאים: "ubuntu_containerd", "cos", "ubuntu_cgv2" או "cos_cgv2".
VCENTER_ADDRESS: הכתובת של vCenter Server.קובץ ההגדרה של תחנת העבודה לאדמין: משתמשים בערך מהשדה
vCenter.credentials.address.השדה
vcenter.addressתואם לדגל--vcenter-addressבפקודהgkectl register bootstrap.
DATA_CENTER: השם של מרכז הנתונים של vCenter.קובץ ההגדרה של תחנת העבודה לאדמין: משתמשים בערך מהשדה
vCenter.datacenter.השדה
vcenter.datacenterתואם לדגל--vcenter-datacenterבפקודהgkectl register bootstrap.
VCENTER_CLUSTER: השם של אוסף השרתים של vCenter.קובץ ההגדרה של תחנת העבודה לאדמין: משתמשים בערך מהשדה
vCenter.cluster.השדה
vcenter.clusterתואם לדגל--vcenter-clusterבפקודהgkectl register bootstrap.
RESOURCE_POOL: השם או הנתיב של מאגר משאבים ב-vCenter.קובץ ההגדרה של תחנת העבודה לאדמין: משתמשים בערך מהשדה
vCenter.resourcePool.השדה
vcenter.resource_poolתואם לדגל--vcenter-resource-poolבפקודהgkectl register bootstrap.
DATASTORE: השם של מאגר הנתונים של vCenter. הערך שאתם מציינים צריך להיות שם, ולא נתיב. אם צריך להזין נתיב, מוסיפים את השדה הבא:folder = "FOLDER"קובץ ההגדרה של תחנת העבודה לאדמין: משתמשים בערך מהשדה
vCenter.datastore.השדה
vcenter.datastoreתואם לדגל--vcenter-datastoreבפקודהgkectl register bootstrap.
אם רוצים להשתמש במדיניות אחסון של מכונה וירטואלית לצמתי האשכול, צריך להסיר את השדה
vcenter.datastoreולהוסיף במקומו אתvcenter.storage_policy_name. בנוסף, מוסיפים את הדגל--vcenter-storage-policyלפקודהgkectl register bootstrap. חובה לציין ערך למאפייןvcenter.datastoreאו למאפייןvcenter.storage_policy_name, אבל לא לשניהם.
FOLDER: השם של התיקייה ב-vCenter שבה ימוקמו מכונות וירטואליות של האשכול. אם לא משתמשים בתיקייה, מסירים את השדה הזה.קובץ ההגדרה של תחנת העבודה לאדמין: משתמשים בערך מהשדה
vCenter.folder.השדה
vcenter.folderתואם לדגל--vcenter-folderבפקודהgkectl register bootstrap.
CA_CERT_DATA: אישור ה-CA של vCenter בפורמט PEM, אבל עם כל השורות החדשות שהוחלפו במחרוזת\n.מריצים את הפקודה הבאה כדי להחליף את השורות החדשות ב-
\n:awk 'ORS="\\n" {print}' CA_CERT_PATH_LOCALמחליפים את
CA_CERT_PATH_LOCALבנתיב אל אישור CA בסיסי של vCenter Server. אם השתמשתם ב-gkeadmכדי ליצור את תחנת העבודה של האדמין, תוכלו להשתמש בערך מהשדהcaCertPathבקובץ ההגדרות של תחנת העבודה של האדמין, שהוא הנתיב במחשב המקומי.gkeadmהעתקתם את קובץ אישור ה-CA לתחנת העבודה של האדמין. צריך לציין את הנתיב של תחנת העבודה של האדמין בדגל--vcenter-ca-cert-pathבפקודהgkectl register bootstrap.מעתיקים את הפלט של הפקודה הקודמת ומדביקים אותו במשתנה
CA_CERT_DATAשל placeholder.
NETWORK: השם של רשת vCenter.קובץ ההגדרה של תחנת העבודה של האדמין: משתמשים בערך מהשדה
vCenter.network.השדה
network_config.vcenter_networkתואם לדגל--vcenter-networkבפקודהgkectl register bootstrap.
GATEWAY: כתובת ה-IP של שער ברירת המחדל של תת-הרשת שכוללת את הצמתים של אשכול מישור הבקרה.
NETMASK: מסכת הרשת של תת-הרשת שכוללת את צמתי אשכול מישור הבקרה.
DNS_SERVERS: כתובת ה-IP של שרת ה-DNS.
NTP_SERVERS: כתובת ה-IP של שרת הזמן (NTP).מזינים את כתובות ה-IP ואת שם המארח (אופציונלי) של שלושת הצמתים של מישור הבקרה בקטע
control_plane_ip_block.ips. אם לא מזינים שם מארח, צריך להסיר את השדותhostnameמההגדרה.
NUM_CPUS: מספר ליבות ה-vCPU לכל צומת של מישור הבקרה באשכול האדמין. צריך להזין לפחות 4.
MEMORY: מספר המביבייט של הזיכרון לכל צומת של מישור הבקרה באשכול האדמין. הערך המינימלי הוא 8,192, אבל מומלץ להשתמש בערך 16,384.
CONTROL_PLANE_VIP: כתובת ה-IP שבחרתם להגדיר במאזן העומסים עבור שרת Kubernetes API של אשכול האדמין.
אופציונלי: הגדרת מאגר פרטי
כברירת מחדל, במהלך יצירה או שדרוג של אשכול, Google Distributed Cloud מושך תמונות מערכת מ-gcr.io/gke-on-prem-release באמצעות חשבון השירות של רכיב הגישה.
אופציונלי: אתם יכולים לספק שרת רישום קונטיינרים משלכם, כדי שתמונות המערכת יימשכו משרת הרישום הפרטי שלכם במקום זאת.
כדי להגדיר מאגר פרטי:
מוסיפים את השורות הבאות לקובץ התצורה של אשכול הניהול:
private_registry_config { address = "ADDRESS" ca_cert = "CA_CERT" }מחליפים את מה שכתוב בשדות הבאים:
ADDRESS: כתובת ה-IP או שם הדומיין המוגדר במלואו (FQDN) של המכונה שמריצה את המאגר הפרטי.
CA_CERT: נתוני אישור ה-CA של המפתח הציבורי, אבל כל השורות החדשות מוחלפות במחרוזת\n.
מריצים את הפקודה הבאה כדי להחליף את השורות החדשות ב-
\n:awk 'ORS="\\n" {print}' PUBLIC_KEY_PATHמחליפים את הערך ב-
PUBLIC_KEY_PATHבנתיב למפתח הציבורי.מעתיקים את הפלט של הפקודה הקודמת ומדביקים אותו במשתנה
CA_CERTשל placeholder.
אם הרשת שלכם נמצאת מאחורי שרת proxy, צריך להוסיף את הדברים הבאים:
proxy { url: "PROXY_SERVER_ADDRESS" no_proxy: "BYPASS_LIST" }מחליפים את מה שכתוב בשדות הבאים:
PROXY_SERVER_ADDRESS: כתובת ה-HTTP של שרת ה-Proxy. צריך לכלול את מספר היציאה גם אם הוא זהה ליציאת ברירת המחדל של הסכימה.
BYPASS_LIST: רשימה מופרדת בפסיקים של כתובות IP, טווחי כתובות IP, שמות מארחים ושמות דומיינים שלא אמורים לעבור דרך שרת ה-Proxy.
דוגמה:
url: "http://my-proxy.example.local:80" no_proxy: "192.0.2.0/24,my-host.example.local,198.51.100.0"כש-Google Distributed Cloud שולח בקשה לאחת מהכתובות, המארחים או הדומיינים האלה, הבקשה עוקפת את שרת ה-proxy ונשלחת ישירות ליעד.
מידע נוסף על שימוש במאגר פרטי, כולל ההבדלים בין אשכולים רגילים לאשכולים מתקדמים, זמין במאמר הגדרת מאגר פרטי של קונטיינרים.
אימות קובץ התצורה והתוכנית
בספרייה שבה נמצא main.tf, מריצים את הפקודות הבאות:
מאתחלים את Terraform:
terraform initTerraform מתקין את כל הספריות הנדרשות, כמו פלאגין שמתממשק עם שירותים חיצוניים Google Cloud . אם צריך, מתקנים שגיאות ב
maint.tf.יוצרים את התוכנית ב-Terraform:
terraform plan -out tfplanבודקים את ההגדרות ומבצעים שינויים לפי הצורך.
לפני שמחילים את התוכנית, צריך קודם ליצור את אשכול ה-bootstrap כמו שמתואר בקטע הבא.
יצירת אשכול האתחול
כשמריצים את הפקודה gkectl register bootstrap, מוצגת בקשה להזין את שם המשתמש והסיסמה של חשבון vCenter. חשוב לוודא שיש לכם את פרטי הכניסה. אם השתמשתם ב-gkeadm כדי ליצור את תחנת העבודה של האדמין, שם המשתמש והסיסמה נמצאים בקובץ credential.yaml.
מתחברים לתחנת העבודה של האדמין באמצעות SSH.
מאמתים באמצעות Google Cloud CLI:
gcloud auth login
מריצים את הפקודה הבאה כדי ליצור את אשכול האתחול. הרבה ערכים של דגלים זהים לערכים בשדות
main.tf. עם זאת, שימו לב שהפקודה מקבלת ערכים נוספים שצריך לציין במשתני ה-placeholder שסופקו.gkectl register bootstrap \ --target-cluster-name=ADMIN_CLUSTER_NAME \ --project-id=PROJECT_ID \ --location=REGION \ --vcenter-address=VCENTER_ADDRESS \ --vcenter-datacenter=DATA_CENTER \ --vcenter-cluster=VCENTER_CLUSTER \ --vcenter-resource-pool=RESOURCE_POOL \ --vcenter-datastore=DATASTORE \ --vcenter-network=NETWORK \ --vcenter-ca-cert-path=CA_CERT_PATH \ --bundle-path=BUNDLE_PATH \ --component-access-service-account-key-path=COMPONENT_ACCESS_SA_PATH \ --register-service-account-key-path=CONNECT_REGISTER_SA_PATH \ --stackdriver-service-account-key-path=LOG_MON_SA_PATH \ --cloud-audit-logging-service-account-key-path=CLOUD_AUDIT_SA_PATH \ --admin-kubeconfig-out=KUBECONFIG_NAMEמחליפים את הערכים הבאים בנתיבים של תחנת העבודה של האדמין:
-
CA_CERT_PATH: הנתיב לאישור CA הבסיסי של vCenter Server. -
BUNDLE_PATH: הנתיב לקובץ החבילה. אם השתמשתם ב-gkeadmכדי ליצור את תחנת העבודה של האדמין, קובץ החבילה נמצא ב-/var/lib/gke/bundles/. שם הקובץ תלוי בגרסה של Google Distributed Cloud, לדוגמה,gke-onprem-vsphere-1.31.0-gke.889-full.tgz. -
COMPONENT_ACCESS_SA_PATH: הנתיב לקובץ המפתח של חשבון השירות של רכיב הגישה. -
CONNECT_REGISTER_SA_PATH: הנתיב לקובץ המפתח של חשבון השירות connect-register. -
LOG_MON_SA_PATH: הנתיב לקובץ המפתח של חשבון השירות של שירות הרישום ביומן והמעקב. -
CLOUD_AUDIT_SA_PATH: הנתיב לחשבון השירות של יומן הביקורת. אם לא יצרתם חשבון שירות לרישום ביומן ביקורת, מציינים את הנתיב לקובץ המפתח של חשבון השירות של שירות הרישום ביומן והמעקב. -
KUBECONFIG_NAME: השם של קובץ ה-kubeconfig שנוצר באמצעות הפקודהgkectl register bootstrap. אם לא מציינים את הדגל הזה, הפקודה יוצרת את הקובץ בשםkubeconfigבספריית העבודה הנוכחית. אם קיים קובץ בשםkubeconfig, הפקודה מחליפה את הקובץ.
משנים את הפקודה לפי הצורך עבור הדגלים הבאים:
- אם ציינתם תיקייה ב-
main.tf, מוסיפים את הדגל הבא:--vcenter-folder=FOLDER - אם ציינתם מדיניות אחסון של מכונה וירטואלית ב-
main.tf, מסירים את--vcenter-datastoreומוסיפים את הדגל הבא:--vcenter-storage-policy-name=STORAGE_POLICY_NAME אם תחנת העבודה של האדמין תהיה ברשת שמוגנת על ידי שרת proxy, צריך להוסיף את הדגלים הבאים:
--proxy-url=PROXY_URL--no-proxy=NO_PROXY
מחליפים את מה שכתוב בשדות הבאים:
- PROXY_URL: כתובת ה-URL של שרת ה-Proxy.
- NO_PROXY: הערך של הדומיינים וכתובות ה-IP שמוחרגים מהפעלת ה-Proxy, מופרדים בפסיקים.
אם מוסיפים דגל, צריך להוסיף את התו של קו נטוי הפוך (\) להמשך שורת הפקודה.
-
כשמתבקשים, מזינים (או מעתיקים ומדביקים) את שם המשתמש ב-vCenter. שם המשתמש לא מוצג במסך.
כשמופיעה בקשה, מזינים (או מעתיקים ומדביקים) את הסיסמה של vCenter. הסיסמה לא מוצגת במסך.
הפקודה מריצה מספר רב של אימותים. אחרי ש-gkectl יוצר את אשכול ה-bootstrap, מוצג פלט שדומה לזה (הפלט קוצר כדי שיהיה קל יותר לקרוא אותו):
Running workstation validations
- Validation Category: Workstation
- [SUCCESS] Workstation OS
- [SUCCESS] Workstation Hardware
- [SUCCESS] Workstation Package
- [SUCCESS] Workstation NTP
- [SUCCESS] Workstation Docker
...
All validation results were SUCCESS.
Unpacking GKE on-prem bundle: /var/lib/gke/bundles/gke-onprem-vsphere-1.31.0-gke.889-full.tgz
...
Successfully created and registered the bootstrap cluster
...
Waiting for preflight checks to run or OnPremAdminCluster to be applied...... -
התהליך ממשיך לפעול עד שנוצר אשכול האדמין.
אם יוצאים מהפקודה gkectl register bootstrap לפני שנוצר אשכול האדמין, יצירת אשכול האדמין נכשלת, ותצטרכו למחוק את אשכול האתחול באמצעות הפקודה הבאה:
gkectl delete bootstrap \
--target-cluster-name=ADMIN_CLUSTER_NAME \
--project-id=PROJECT_ID \
--location=REGION \
--register-service-account-key-path=CONNECT_REGISTER_SA_PATH
יצירת אשכול האדמין
מחילים את תוכנית Terraform כדי ליצור את אשכול האדמין:
terraform apply "tfplan"
יצירת אשכול האדמין נמשכת כ-15 דקות או יותר. אפשר לראות את האשכול במסוף Google Cloud בדף GKE clusters.
התחברות לאשכול הניהול
הפקודה gkectl register bootstrap יוצרת קובץ kubeconfig עבור אשכול האדמין בתחנת העבודה של האדמין. אם לא ציינתם את הדגל --admin-kubeconfig-out כשביצעתם את הפקודה gkectl register bootstrap, הפקודה יוצרת קובץ kubeconfig בשם kubeconfig בספרייה שבה הפעלתם את הפקודה.
צריך להגביל את הגישה אל kubeconfig כי הוא מכיל פרטי אימות של האשכול.
בנוסף, אפשר להריץ פקודות של kubectl לקריאה בלבד דרך שער החיבור.
מריצים את הפקודה הבאה במחשב שמותקן בו ה-CLI של gcloud כדי לקבל רשומה
kubeconfigשמאפשרת גישה לאשכול דרך שער החיבור.gcloud container fleet memberships get-credentials ADMIN_CLUSTER_NAME \ --project=PROJECT_IDהפלט אמור להיראות כך:
Starting to build Gateway kubeconfig... Current project_id: PROJECT_ID A new kubeconfig entry "connectgateway_PROJECT_ID_global_ADMIN_CLUSTER_NAME" has been generated and set as the current context.עכשיו אפשר להריץ פקודות של
kubectlלקריאה בלבד דרך שער החיבור, כמו הפקודות הבאות:kubectl get pods -Aאם אתם צריכים הרשאות אדמין מלאות לאשכול האדמין, תוכלו להיעזר במאמר בנושא הגדרת שער החיבור.