בדף הזה מוסבר איך ליצור אשכול אדמין לשימוש בתחומי טופולוגיה של Google Distributed Cloud. קלאסטר האדמין מנהל את קלאסטרים המשתמשים שמריצים את עומסי העבודה. כדי להשתמש בדומיינים של טופולוגיה, נדרשת גרסה 1.31 ואילך של Google Distributed Cloud.
כדי להגדיר דומיין טופולוגי, צריך להפעיל אשכול מתקדם. שימו לב למגבלות הבאות לגבי התצוגה המקדימה של האשכול המתקדם:
- אפשר להפעיל את התכונה 'אשכול מתקדם' רק באשכולות חדשים בגרסה 1.31, בזמן יצירת האשכול.
- אחרי שמפעילים אשכול מתקדם, אי אפשר לשדרג את האשכול לגרסה 1.32. מומלץ להפעיל את האשכול המתקדם רק בסביבת בדיקה.
הדף הזה מיועד לאדמינים, לארכיטקטים ולמפעילים שמגדירים, מנטרים ומנהלים את התשתית הטכנולוגית. מידע נוסף על תפקידים נפוצים ומשימות לדוגמה שאנחנו מתייחסים אליהם ב Google Cloud תוכן זמין במאמר תפקידים נפוצים של משתמשים ומשימות ב-GKE.
פרטים נוספים על אשכול האדמין מופיעים במאמר סקירה כללית על ההתקנה.
סקירה כללית של התהליך
אלה השלבים העיקריים שנדרשים ליצירת אשכול אדמין:
- מילוי קובץ ההגדרות של האדמין
- ממלאים את פרטי אשכול האדמין החדש בקובץ ההגדרות של אשכול האדמין.
- מילוי קובץ ההגדרות של תשתית vSphere
- מציינים את הפרטים על דומייני הטופולוגיה בקובץ הגדרות של תשתית vSphere.
- מילוי קובץ של בלוק כתובות IP
- מציינים את כתובות ה-IP של השער, מסכת הרשת וצמתי מישור הבקרה בקובץ של בלוק כתובות IP.
- קבלת קובצי אימג' של מערכת ההפעלה
- מורידים את חבילת Google Distributed Cloud הרגילה. לאחר מכן מריצים את הפקודה
gkectl prepare, שמייבאת את קובצי האימג' של מערכת ההפעלה אל vSphere, ומעבירה את קובצי האימג' של הקונטיינר אל המאגר הפרטי, אם רלוונטי.
- ליצור אשכול אדמין.
- משתמשים ב-
gkectlכדי ליצור אשכול אדמין חדש כמו שצוין בקובצי ההגדרות שהושלמו. כש-Google Distributed Cloud יוצר אשכול אדמין, הוא פורס אשכול Kubernetes in Docker (kind) כדי לארח באופן זמני את בקרי Kubernetes שנדרשים ליצירת אשכול האדמין. האוסף הזמני הזה נקרא אוסף bootstrap. אשכולות משתמשים נוצרים ומשודרגים על ידי האדמין המנהל שלהם ללא שימוש באשכול bootstrap.
- מוודאים שקלאסטר האדמין פועל.
- משתמשים ב-
kubectlכדי להציג את הצמתים של האשכול.
בסוף התהליך הזה, יהיה לכם אשכול אדמין פעיל שתוכלו להשתמש בו כדי ליצור ולנהל אשכולות משתמשים בדומיינים של טופולוגיה.
לפני שמתחילים
חשוב לוודא שהגדרתם את תחנת העבודה לאדמין ושאתם יכולים להיכנס אליה כמו שמתואר במאמר יצירת תחנת עבודה לאדמין. תחנת העבודה של האדמין כוללת את הכלים שדרושים ליצירת אשכול האדמין. מבצעים את כל השלבים במסמך הזה בתחנת העבודה של האדמין.
מעיינים במסמך התכנון של כתובות ה-IP. מוודאים שיש מספיק כתובות IP זמינות לשלושת הצמתים של רמת הבקרה ולכתובת ה-IP הווירטואלית של רמת הבקרה.
מגדירים את מאזן העומסים לאיזון עומסים ידני. צריך להגדיר את איזון העומסים לפני שיוצרים את אשכול האדמין.
מעיינים בקטע
privateRegistryומחליטים אם רוצים להשתמש במאגר ציבורי או פרטי לרכיבי Google Distributed Cloud.מעיינים בשדה osImageType ומחליטים איזה סוג של מערכת הפעלה רוצים להריץ בצמתים של אשכול האדמין.
אם הארגון שלכם דורש שתעבורת נתונים יוצאת תעבור דרך שרת proxy, הקפידו להוסיף לרשימת ההיתרים את כתובת Artifact Registry ואת ממשקי ה-API הנדרשים.
אוספים את המידע שדרוש לגישה לכל מופע של vCenter Server. תצטרכו את הפרטים האלה כדי למלא את הקטע
Secretואת הקטעVSphereInfraConfig.credentials.vCentersבקובץ התצורה של תשתית vSphere. בהמשך מוסבר איך אפשר לקבל את המידע הנדרש:
מילוי קובץ ההגדרה של אשכול האדמין
אם השתמשתם ב-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 כמו שמוצג בדוגמה לדומיינים של טופולוגיה.
קבלת קובצי אימג' של מערכת ההפעלה
מורידים את חבילת 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 שרוצים להתקין.הפקודה הזו מורידה את החבילה הרגילה. אל תורידו את החבילה המלאה כי היא לא נתמכת באשכולות מתקדמים.
מריצים את הפקודה
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 למיקום אחר שתבחרו.
פתרון בעיות
פתרון בעיות ביצירה ובשדרוג של אשכולות
המאמרים הבאים
יצירת אשכול משתמשים לשימוש בדומיין טופולוגי