ב-Google Distributed Cloud, עומסי העבודה פועלים באשכול משתמש אחד או יותר. בדף הזה מוסבר איך ליצור אשכול משתמש לשימוש בדומיינים של טופולוגיה ב-Google Distributed Cloud. כדי להשתמש בדומיינים של טופולוגיה, צריך את Google Distributed Cloud בגרסה 1.31 ואילך.
כדי להגדיר דומיין טופולוגיה, צריך להפעיל אשכול מתקדם.
הדף הזה מיועד לאדמינים, לארכיטקטים ולמפעילים שמגדירים, מנטרים ומנהלים את התשתית הטכנולוגית. במאמר משימות ותפקידים נפוצים של משתמשי GKE מפורט מידע נוסף על תפקידים נפוצים ומשימות לדוגמה שאנחנו מתייחסים אליהם בתוכן של Google Cloud .
לפני שמתחילים
מוודאים שהגדרתם את תחנת העבודה של האדמין ואתם יכולים להיכנס אליה, כמו שמתואר במאמר יצירת תחנת עבודה של אדמין. בתחנת העבודה של האדמין יש את הכלים שצריך כדי ליצור את אשכול המשתמשים. את כל השלבים במסמך הזה צריך לבצע בתחנת העבודה של האדמין.
אם עדיין לא עשיתם את זה, הגדירו את המשאבים של Google Cloud כפי שמתואר במסמכים הבאים:
כדי ליצור אשכול משתמשים, צריך שיהיה אשכול אדמין שינהל את אשכול המשתמשים. אם עדיין לא עשיתם זאת, צרו תחנת עבודה אדמין ואשכול אדמין לשימוש עם דומיינים של טופולוגיה.
בוחרים את הגרסה של אשכול המשתמש שרוצים להתקין. כשיוצרים אשכול משתמש, בדרך כלל מתקינים את הגרסה שתואמת לגרסה של אשכול האדמין. אם רוצים להתקין גרסה אחרת באשכול משתמש, אפשר לעיין בכללי הגרסאות.
קוראים את מסמך התכנון של כתובות ה-IP ומוודאים שיש מספיק כתובות IP זמינות.
מגדירים את מאזן העומסים לאיזון עומסים ידני. צריך להגדיר את מאזן העומסים לפני שיוצרים את אשכול המשתמשים.
חשבו כמה מאגרי צמתים אתם צריכים ובאיזו מערכת הפעלה אתם רוצים להריץ כל אחד מהמאגרים.
אוספים את המידע שצריך כדי לגשת לכל מכונה של שרת vCenter. תצטרכו את המידע הזה כדי למלא את הקטע
Secretואת הקטעVSphereInfraConfig.credentials.vCentersבקובץ התצורה של תשתית vSphere. כדי לקבל את המידע הדרוש, אפשר לעיין במקורות הבאים:
סקירה כללית של התהליך
אלה השלבים העיקריים ליצירת אשכול משתמש באמצעות gkectl:
- מילוי קובץ התצורה של אשכול המשתמשים
- מציינים את פרטי האשכול החדש בקובץ התצורה של אשכול המשתמש.
- ממלאים את קובץ חסימת כתובות ה-IP
- מציינים את כתובות ה-IP של השער, מסכת הרשת, צומתי מישור הבקרה, ואם רוצים, גם צומתי העובדים בקובץ בלוקים של כתובות IP.
- יצירת אשכול משתמשים
- מריצים את הפקודה
gkectl create clusterכדי ליצור אשכול כמו שצוין בקובצי התצורה.
- איך מוודאים שאשכול המשתמשים פועל
- משתמשים ב-
kubectlכדי להציג את הצמתים באשכול.
בסיום התהליך, יהיה לכם אשכול משתמשים פעיל שבו תוכלו לפרוס את עומסי העבודה.
מילוי קובץ התצורה של אשכול המשתמשים
אם השתמשתם ב-gkeadm כדי ליצור את תחנת העבודה של האדמין, gkeadm יצר תבנית לקובץ התצורה של אשכול המשתמשים בשם user-cluster.yaml.
בנוסף, gkeadm מילא בשבילך חלק מהשדות.
אם לא השתמשתם ב-gkeadm כדי ליצור את תחנת העבודה של האדמין, אתם יכולים להשתמש ב-gkectl כדי ליצור תבנית לקובץ התצורה של אשכול המשתמשים.
כדי ליצור תבנית לקובץ התצורה של אשכול המשתמש:
gkectl create-config cluster --config=OUTPUT_FILENAME --gke-on-prem-version=VERSION
מחליפים את מה שכתוב בשדות הבאים:
OUTPUT_FILENAME: נתיב לבחירתכם לתבנית שנוצרה. אם לא משתמשים בדגל הזה, gkectl נותן לקובץ את השם user-cluster.yaml וממקם אותו בספרייה הנוכחית.
VERSION: מספר הגרסה הרצויה. לדוגמה:
gkectl create-config cluster --gke-on-prem-version=1.36.200-gke.118.
כדאי לעיין במסמך קובץ התצורה של אשכול המשתמש כדי להכיר את קובץ התצורה. כדאי להשאיר את המסמך הזה פתוח בכרטיסייה או בחלון נפרדים, כי תצטרכו לעיין בו במהלך ביצוע השלבים הבאים.
name
בשדה name נותנים שם לאשכול המשתמש.
gkeOnPremVersion
השדה הזה כבר מלא. הוא מציין את הגרסה של Google Distributed Cloud. לדוגמה, 1.36.200-gke.118.
enableAdvancedCluster
מגדירים את enableAdvancedCluster לערך true.
enableControlplaneV2
צריך להשתמש ב-Controlplane V2 בכל אשכולות המשתמשים מגרסה 1.30 ואילך. מגדירים את enableControlplaneV2 לערך true.
כשהתכונה Controlplane V2 מופעלת, מישור הבקרה של אשכול המשתמש פועל בצמתים באשכול המשתמש עצמו.
enableDataplaneV2
מגדירים את enableDataplaneV2 לערך true.
vCenter
הסרת כל הקטע הזה. במקום זאת, מגדירים את פרטי ה-vCenter בקובץ התצורה של תשתית vSphere לכל דומיין טופולוגיה.
network
מסירים את השורות הבאות מקובץ התצורה:
- כל הקטע
network.hostConfig. המידע הזה מוגדר בקובץ התצורה של תשתית vSphere לכל דומיין טופולוגיה. - השדה
network.vCenter.networkName. השדה הזה מוגדר בקובץ התצורה של תשתית vSphere לכל דומיין טופולוגיה. - כל הקטע
network.controlPlaneIPBlock. כתובות ה-IP של השער, מסכת הרשת והצמתים של מישור הבקרה מוגדרות בקובץ בלוק IP.
- כל הקטע
מגדירים את
network.ipMode.ipBlockFilePathלנתיב של קובץ חסימת ה-IP.מחליטים איך צומתי העובדים יקבלו את כתובות ה-IP שלהם. האפשרויות הן:
משרת DHCP שהגדרתם מראש. מגדירים את
network.ipMode.typeלערך"dhcp".מרשימה של כתובות IP סטטיות שאתם מספקים בקובץ חסימת ה-IP. מגדירים את
network.ipMode.typeלהיות"static".
הצמתים של מישור הבקרה באשכול המשתמש צריכים לקבל את כתובות ה-IP שלהם מרשימה של כתובות סטטיות שאתם מספקים בקובץ של טווח כתובות ה-IP. זה נכון גם אם צומתי העובדים מקבלים את הכתובות שלהם משרת DHCP.
לא משנה אם אתם מסתמכים על שרת DHCP או מציינים רשימה של כתובות IP סטטיות, אתם צריכים שיהיו מספיק כתובות IP זמינות לאשכול המשתמשים. כדי להבין כמה כתובות IP אתם צריכים, קראו את המאמר תכנון כתובות ה-IP.
הערכים של network.podCIDR ו-network.serviceCIDR מאוכלסים מראש, ואפשר להשאיר אותם ללא שינוי, אלא אם הם מתנגשים עם כתובות שכבר נמצאות בשימוש ברשת. Kubernetes משתמש בטווחים האלה כדי להקצות כתובות IP ל-Pods ולשירותים באשכול.
loadBalancer
הקצאת VIP לשרת ה-API של Kubernetes באשכול המשתמש. מזינים את כתובת ה-VIP כערך של
loadBalancer.vips.controlPlaneVIPהקצו כתובת VIP נוספת לשירות ה-Ingress של אשכול המשתמשים. מציינים את כתובת ה-VIP כערך של
loadBalancer.vips.ingressVIP.מגדירים את
loadBalancer.kindל-"ManualLB"וממלאים את הקטעmanualLB. מידע נוסף זמין במאמר איזון עומסים ידני.
advancedNetworking
אם אתם מתכננים ליצור שער NAT לתעבורת נתונים יוצאת, צריך להגדיר את advancedNetworking לערך true.
multipleNetworkInterfaces
מגדירים את multipleNetworkInterfaces לערך false. אין תמיכה בכמה ממשקי רשת לפודים עם דומיינים של טופולוגיה.
storage
מגדירים את storage.vSphereCSIDisabled לערך true כדי להשבית את הפריסה של רכיבי vSphere CSI.
masterNode
אם רוצים לציין את המעבד (CPU) והזיכרון לצומתי מישור הבקרה של אשכול המשתמש, ממלאים את השדות
cpusו-memoryMBבקטעmasterNode.יש תמיכה רק באשכולות בזמינות גבוהה (HA). מגדירים את השדה
replicasלערך3כדי לציין שבאשכול יהיו שלושה צומתי מישור בקרה.כדי לאפשר שינוי גודל אוטומטי של צומתי מישור הבקרה, מגדירים את
autoResize.enabledל-true.מסירים את כל הקטע
masterNode.vsphere.בשדה
masterNode.topologyDomainsממלאים את השם של דומיין הטופולוגיה שבו רוצים שיהיו צומתי מישור הבקרה.
nodePools
מאגר צמתים הוא קבוצה של צומתי עובדים באשכול, שלכולם יש את אותה הגדרה. לדוגמה, יכול להיות שתרצו להגדיר דומיין טופולוגיה נפרד לכל מאגר צמתים. צריך לציין לפחות מאגר צמתים אחד על ידי מילוי הקטע nodePools.
לכל מאגר צמתים שאתם מציינים:
בשדה
nodePools[i].topologyDomains, ממלאים את השם של דומיין הטופולוגיה שבו רוצים שמאגר הצמתים יהיה.מסירים את כל השדות בקטע
nodePools[i].vsphereחוץ מהשדהnodePools[i].vsphere.tags. אתם מציינים את המידע הזה בקובץ התצורה של תשתית vSphere לכל דומיין טופולוגיה.מגדירים את
nodePools[i].osImageTypeלערךubuntu_cgv2.
למידע כללי נוסף על מאגרי צמתים, קראו את המאמרים מאגרי צמתים ויצירה וניהול של מאגרי צמתים.
antiAffinityGroups
מגדירים את antiAffinityGroups.enabled לערך false. כללי אנטי-אפיניות של Distributed Resource Scheduler (DRS) לא נתמכים בדומיינים של טופולוגיה.
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.
אם מזהי הפרויקטים והאזורים לא זהים, יצירת האשכול תיכשל.
gkeConnect
אשכול המשתמשים צריך להיות רשום ב- Google Cloud fleet.
ממלאים את הקטע gkeConnect כדי לציין פרויקט מארח של Fleet ואת חשבון השירות שמשויך אליו. המזהה ב-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) בפרויקט. הוראות מפורטות זמינות במאמר השבתת שירותים.
cloudAuditLogging
אם אתם רוצים לשלב את יומני הביקורת משרת ה-API של Kubernetes באשכול עם יומני הביקורת של Cloud, מלאו את הקטע cloudAuditLogging.
שימו לב לדרישות הבאות:
# advanced-cluster-change #
מגדירים את cloudAuditLogging.serviceAccountKeyPath לאותו נתיב כמו stackdriver.serviceAccountKeyPath.
המזהה ב-
cloudAuditLogging.projectIDצריך להיות זהה למזהה ב-gkeConnect.projectIDוב-stackdriver.projectID.האזור ב-
cloudAuditLogging.clusterLocationצריך להיות זהה לאזור שמוגדר ב-gkeConnect.location(אם השדה נכלל בקובץ התצורה) וב-stackdriver.clusterLocation. בנוסף, אם הערך שלgkeOnPremAPI.enabledהואtrue, צריך להגדיר את אותו אזור ב-gkeOnPremAPI.location.
אם מזהי הפרויקטים והאזורים לא זהים, יצירת האשכול תיכשל.
preparedSecrets
מסירים את השדה preparedSecrets.
אי אפשר להשתמש בפרטי כניסה מוכנים מראש כשדומיינים של טופולוגיה מופעלים.
schedulerConfiguration
אם רוצים להגדיר הגדרות נוספות שיועברו אל kube-scheduler, מוסיפים את הקטע schedulerConfiguration לקובץ התצורה.
דוגמה לקובצי תצורה מלאים
דוגמה לקובץ בלוק IP ולקובץ תצורה של אשכול משתמש:
user-ipblock.yaml
blocks:
- netmask: 255.255.255.0
gateway: 172.16.21.1
ips:
- ip: 172.16.21.2
hostname: worker-vm-1
- ip: 172.16.21.3
hostname: worker-vm-2
- ip: 172.16.21.4
hostname: worker-vm-3
- ip: 172.16.21.5
hostname: worker-vm-4
- netmask: 255.255.255.0
gateway: 100.115.223.254
ips:
- ip: 100.115.222.205
hostname: cp-1
isControlPlane: true
- ip: 100.115.222.206
hostname: cp-2
isControlPlane: true
- ip: 100.115.222.207
hostname: cp-3
isControlPlane: true
user-cluster.yaml
cat user-cluster.yaml
apiVersion: v1
kind: UserCluster
name: "my-user-cluster"
gkeOnPremVersion: 1.36.200-gke.118
enableAdvancedCluster: true
enableControlplaneV2: true
enableDataplaneV2: true
network:
ipMode:
type: "static"
ipBlockFilePath: "user-ipblock.yaml"
serviceCIDR: 10.96.0.0/20
podCIDR: 192.168.0.0/16
loadBalancer:
vips:
controlPlaneVIP: "100.115.222.200"
ingressVIP: "172.16.21.30"
kind: "ManualLB"
manualLB:
ingressHTTPNodePort: 32527
ingressHTTPSNodePort: 30139
controlPlaneNodePort: 30968
masterNode:
cpus: 4
memoryMB: 8192
replicas: 3
nodePools:
- name: "worker-node-pool1"
cpus: 4
memoryMB: 8192
replicas: 3
topologyDomains:
- "domain1"
antiAffinityGroups:
enabled: false
gkeConnect:
projectID: "my-project-123"
location: "us-central1"
registerServiceAccountKeyPath: "connect-register-sa-2203040617.json"
stackdriver:
projectID: "my-project-123"
clusterLocation: "us-central1"
enableVPC: false
serviceAccountKeyPath: "log-mon-sa-2203040617.json"
autoRepair:
enabled: true
אלה הנקודות החשובות שצריך להבין בדוגמה שלמעלה:
השדה
nodePools.replicasמוגדר ל-3, כלומר יש שלושה צומתי עובדים ב-"worker-node-pool". כל הצמתים העובדים משתמשים בכתובות IP סטטיות כיnetwork.ipMode.typeמוגדר ל-"static".כתובות ה-IP של צומתי מישור הבקרה וצומתי העובדים מצוינות בקובץ בלוק IP. בקובץ בלוק ה-IP יש ארבע כתובות לצומתי עובדים, למרות שיש רק שלושה צומתי עובדים. כתובת ה-IP הנוספת של צומת העובד נדרשת במהלך שדרוג, עדכון ותיקון אוטומטי של האשכול. כתובות ה-IP של צומתי מישור הבקרה כוללות את הדגל
isControlPlane: true.אשכולות מתקדמים, Controlplane V2 ו-Dataplane V2 מופעלים.
השדה
masterNode.replicasמוגדר ל-3, כך שלמישור הבקרה של האשכול תהיה זמינות גבוהה.כתובת ה-VIP של מישור הבקרה נמצאת באותה רשת VLAN כמו הצמתים של מישור הבקרה, וכתובת ה-VIP של Ingress נמצאת באותה רשת VLAN כמו הצמתים של ה-worker.
ממלאים את קובץ חסימת כתובות ה-IP
מעתיקים את התבנית של קובץ בלוק ה-IP לקובץ בספרייה שציינתם בשדה network.ipMode.ipBlockFilePath בקובץ ההגדרות של אשכול המשתמש. יוצרים קובצי בלוקים של כתובות IP נפרדים לאשכול האדמין ולכל אשכול משתמשים.
מוסיפים לקובץ של בלוק ה-IP את כתובות ה-IP של השער, מסכת הרשת והצמתים של מישור הבקרה. לכל כתובת IP של צומת במישור הבקרה, מוסיפים את isControlPlane: true כמו בדוגמה הקודמת. אם רוצים אשכול משתמשים בזמינות גבוהה (HA), צריך לציין שלוש כתובות IP. אחרת, צריך לציין כתובת IP אחת. מספר כתובות ה-IP שאתם מציינים לצומתי מישור הבקרה צריך להתאים למספר בשדה masterNode.replicas בקובץ התצורה של אשכול המשתמשים.
אם הערך של network.ipMode.type הוא "static", צריך להוסיף את כתובות ה-IP של הצמתים העובדים לקובץ של בלוק ה-IP. חשוב לציין כתובת IP אחת נוספת לשימוש במהלך שדרוג, עדכון ותיקון אוטומטי של האשכול.
כל כתובת שער בקובץ בלוק ה-IP צריכה להתאים לכתובת שצוינה בשדה topologyDomains[i].network.gateway בקובץ התצורה של תשתית vSphere. מידע נוסף זמין בדוגמה לדומיינים של טופולוגיה.
יצירת אשכול משתמשים
מריצים את הפקודה הבאה כדי ליצור אשכול משתמש:
gkectl create cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG
איתור קובץ kubeconfig של אשכול המשתמשים
הפקודה gkectl create cluster יוצרת קובץ kubeconfig בשם USER_CLUSTER_NAME-kubeconfig בספרייה הנוכחית. תצטרכו את קובץ ה-kubeconfig הזה בהמשך כדי ליצור אינטראקציה עם אשכול המשתמשים.
קובץ ה-kubeconfig מכיל את השם של אשכול המשתמש. כדי לראות את שם האשכול, אפשר להריץ את הפקודה:
kubectl config get-clusters --kubeconfig USER_CLUSTER_KUBECONFIG
בפלט מוצג שם האשכול. לדוגמה:
NAME my-user-cluster
אם רוצים, אפשר לשנות את השם והמיקום של קובץ kubeconfig.
איך מוודאים שאשכול המשתמשים פועל
מוודאים שאשכול המשתמש פועל:
kubectl get nodes --kubeconfig USER_CLUSTER_KUBECONFIG
מחליפים את USER_CLUSTER_KUBECONFIG בנתיב של קובץ ה-kubeconfig של אשכול המשתמש.
הפלט מציג את הצמתים של אשכול המשתמשים. לדוגמה:
cp-vm-1 Ready control-plane,master 18m cp-vm-2 Ready control-plane,master 18m cp-vm-3 Ready control-plane,master 18m worker-vm-1 Ready 6m7s worker-vm-2 Ready 6m6s worker-vm-3 Ready 6m14s
הגדרת PodTemplate
תווית הטופולוגיה מאוכלסת בתוויות של צמתים בדומיין הטופולוגיה.
אם לא השתמשתם באילוץ ברירת המחדל "topology.kubernetes.io/zone" כמפתח הטופולוגיה בהגדרת הדומיין של הטופולוגיה, תצטרכו להגדיר את מפתח הטופולוגיה בתבנית ה-Pod של ה-Deployment, ה-StatefulSet או ה-ReplicaSet, לפי הצורך.
לדוגמה, נניח שהגדרתם את המפתח בתווית הטופולוגיה בתור "topology.examplepetstore.com/zone". ב-PodTemplate, מציינים את המפתח כערך של השדה topologySpreadConstraints.topologyKey. כך מתזמן Kubernetes יכול להפיץ Pods בדומיין הטופולוגיה כדי להבטיח זמינות גבוהה ולמנוע ריכוז יתר באזור אחד במקרה של כשל.
פתרון בעיות
פתרון בעיות ביצירה ובשדרוג של אשכולות