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