תוכנת Distributed Cloud ל-Bare Metal בלבד מאפשרת לפרוס אשכול היברידי במכונות וירטואליות (VM) של OpenStack. הפריסה הזו מאפשרת לכם לשלב את OpenStack Load Balancing as a Service (LBaaS) ואת OpenStack Cloud Provider for Kubernetes כדי לחשוף את שירותי Kubernetes מחוץ לסביבת OpenStack.
Google Distributed Cloud לא מקצה מכונות וירטואליות של OpenStack באופן אוטומטי. כדי לבדוק את הדרישות של המכונות הווירטואליות ולהגדיר את סביבת הוכחת ההיתכנות עם שני צמתים, קראו את הדוגמה של Terraform ליצירת מכונות וירטואליות של OpenStack. למרות שהפריסה הזו מדגימה את OpenStack Ussuri, Google Distributed Cloud לא דורש גרסה ספציפית של OpenStack. בסביבות ייצור, עיינו בדרישות המוקדמות להתקנה.
פריסה לדוגמה
במדריך הזה מופיעה דוגמה לפריסה של אשכול Bare Metal ב-OpenStack שמשתלב עם OpenStack LBaaS. חשוב להבין את הפקודות ואת ערכי ההגדרות, ולשנות אותם בהתאם לסביבת OpenStack שלכם. הדיאגרמה הבאה מציגה את ה-Deployment שנוצר:

דרישות מוקדמות
- OpenStack Ussuri עם LBaaS v2 פרוס ופועל
- חשבון שירות להורדת הכלי bmctl
- מגדירים את המכונות הווירטואליות ואת הרשת של OpenStack כמו בדוגמה לפריסה.
כדי להקצות הגדרה דומה בסביבת OpenStack, יש לכם את האפשרויות הבאות:
- כדי להקצות את המשאבים באופן אוטומטי, אתם יכולים להשתמש בסקריפט הזה של Terraform.
- להקצות את המשאבים באופן ידני.
- המכונות הווירטואליות הבאות של OpenStack צריכות להיות מוכנות וזמינות דרך SSH:
| שם | כתובת IP | מטרה |
|---|---|---|
| abm-ws |
10.200.0.10 (כתובת IP פרטית) floating_ip (כתובת IP ציבורית) |
משמשת כתחנת עבודה של אדמין: משמשת לפריסת Google Distributed Cloud במכונות האחרות. |
| abm-cp1 | 10.200.0.11 | מישור הבקרה של האשכול: המארח הזה מריץ את מישור הבקרה של Kubernetes ואת מאזן העומסים. |
| abm-w1 | 10.200.0.12 | צומת עובד של אשכול: המארח הזה מריץ את עומסי העבודה של Kubernetes. |
פריסת Google Distributed Cloud
בקטע הזה מוסבר איך לבצע את הפעולות הבאות:
- מתקינים את הכלים שצריך ב-VM של תחנת העבודה של האדמין ב-
abm-ws. - מגדירים את מזהה הפרויקט ואת חשבון השירות שנדרשים כדי להשלים את הפריסה באופן מאובטח.
- יצירת קובץ תצורה של אשכול
- יצירת אשכול
התקנת הכלים שאתם צריכים
משיגים את כתובת ה-IP הציבורית הצפה של המכונה הווירטואלית של
abm-ws:export OPENSTACK_IPS=$(openstack floating ip list --tags=abm_ws_floatingip -f json) export FLOATING_IP=$(jq -c '.[]."Floating IP Address"' <<< $OPENSTACK_IPS | tr -d '"')מוודאים שאפשר להשתמש ב-SSH כדי להתחבר באופן מאובטח למכונה הווירטואלית
abm-wsולהיכנס בתור משתמשroot. המשתמשrootשמוגדר על ידי הסקריפטים של Terraform הואabm.ssh ubuntu@$FLOATING_IP sudo -u abm -iמוודאים שאפשר להשתמש ב-SSH כדי להתחבר לצמתים האחרים:
ssh abm@10.200.0.11 'echo SSH to $HOSTNAME succeeded' ssh abm@10.200.0.12 'echo SSH to $HOSTNAME succeeded'התגובות הצפויות לפקודות הקודמות הן:
SSH to abm-cp1 succeeded SSH to abm-w1 succeededמורידים את כלי שורת הפקודה
kubectlבמכונה הווירטואליתabm-ws.curl -LO "https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl" chmod +x kubectl sudo mv kubectl /usr/local/sbin/מתקינים את Docker במכונה הווירטואלית
abm-ws:curl -fsSL https://get.docker.com -o get-docker.sh sh get-docker.sh sudo usermod -aG docker abm newgrp docker
הגדרת הפרויקט וחשבון השירות ב- Google Cloud
מקבלים פרטי כניסה ל-Google Cloud CLI בשביל חשבון המשתמש.
פרטי הכניסה האלה משמשים לפקודות
gcloudהבאות.gcloud auth loginמוודאים שה-Google Cloud CLI מוגדר להשתמש בפרויקט Google Cloud שבו רוצים לרשום את האשכול.
gcloud config set project PROJECT_IDמגדירים את Application Default Credentials (ADC) לחשבון המשתמש בתחנת העבודה של האדמין. הוא ישמש את הכלי
bmctlליצירת אשכולות.gcloud auth application-default loginיוצרים את חשבון השירות
bm-gcr. אתם משתמשים בחשבון השירות הזה כדי לבצע אימות מהאשכול.gcloud iam service-accounts create bm-gcr gcloud iam service-accounts keys create bm-gcr.json \ --iam-account=bm-gcr@PROJECT_ID.iam.gserviceaccount.comמפעילים את ממשקי ה-API הנדרשים:
gcloud services enable \ anthos.googleapis.com \ anthosaudit.googleapis.com \ anthosgke.googleapis.com \ cloudresourcemanager.googleapis.com \ connectgateway.googleapis.com \ container.googleapis.com \ gkeconnect.googleapis.com \ gkehub.googleapis.com \ gkeonprem.googleapis.com \ iam.googleapis.com \ logging.googleapis.com \ monitoring.googleapis.com \ opsconfigmonitoring.googleapis.com \ serviceusage.googleapis.com \ stackdriver.googleapis.com \ storage.googleapis.comנותנים הרשאות נוספות לחשבון השירות
bm-gcr. הוספת ההרשאות מאפשרת לכם לא ליצור כמה חשבונות שירות לשירותים נפרדים.gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:bm-gcr@PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/gkehub.connect" gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:bm-gcr@PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/gkehub.admin" gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:bm-gcr@PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/logging.logWriter" gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:bm-gcr@PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/monitoring.metricWriter" gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:bm-gcr@PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/monitoring.dashboardEditor" gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:bm-gcr@PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/stackdriver.resourceMetadata.writer" gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:bm-gcr@PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/opsconfigmonitoring.resourceMetadata.writer"
יצירת קובץ תצורה של אשכול
מורידים את כלי שורת הפקודה
bmctl.mkdir baremetal && cd baremetal gcloud storage cp gs://anthos-baremetal-release/bmctl/1.36.200-gke.118/linux-amd64/bmctl . chmod a+x bmctl sudo mv bmctl /usr/local/sbin/יוצרים קובץ תצורה לאשכול:
bmctl create config -c CLUSTER_NAMEמעדכנים את קובץ התצורה לשימוש עם OpenStack:
cat > bmctl-workspace/CLUSTER_NAME/CLUSTER_NAME.yaml << EOB --- gcrKeyPath: /home/abm/bm-gcr.json sshPrivateKeyPath: /home/abm/.ssh/id_rsa gkeConnectAgentServiceAccountKeyPath: /home/abm/bm-gcr.json gkeConnectRegisterServiceAccountKeyPath: /home/abm/bm-gcr.json cloudOperationsServiceAccountKeyPath: /home/abm/bm-gcr.json --- apiVersion: v1 kind: Namespace metadata: name: openstack-cluster-ns --- apiVersion: baremetal.cluster.gke.io/v1 kind: Cluster metadata: name: CLUSTER_NAME namespace: openstack-cluster-ns annotations: baremetal.cluster.gke.io/external-cloud-provider: "true" spec: type: hybrid anthosBareMetalVersion: 1.36.200-gke.118 gkeConnect: projectID: PROJECT_ID controlPlane: nodePoolSpec: clusterName: CLUSTER_NAME nodes: - address: 10.200.0.11 clusterNetwork: pods: cidrBlocks: - 192.168.0.0/16 services: cidrBlocks: - 10.96.0.0/20 loadBalancer: mode: manual ports: controlPlaneLBPort: 443 vips: controlPlaneVIP: 10.200.0.101 ingressVIP: 10.200.0.102 clusterOperations: location: us-central1 projectID: PROJECT_ID storage: lvpNodeMounts: path: /mnt/localpv-disk storageClassName: node-disk lvpShare: numPVUnderSharedPath: 5 path: /mnt/localpv-share storageClassName: standard nodeAccess: loginUser: abm --- apiVersion: baremetal.cluster.gke.io/v1 kind: NodePool metadata: name: node-pool-1 namespace: openstack-cluster-ns spec: clusterName: CLUSTER_NAME nodes: - address: 10.200.0.12 EOB
יצירת האשכול
יוצרים את האשכול:
bmctl create cluster -c CLUSTER_NAME
הרצת הפקודה bmctl מתחילה את ההגדרה של אשכול היברידי חדש. הפעולות האלה כוללות בדיקות מקדימות בצמתים, יצירת אשכולות של אדמינים ומשתמשים וגם רישום האשכול ב- Google Cloud באמצעות Connect Agent.
תהליך ההגדרה כולו יכול להימשך עד 15 דקות. בזמן יצירת האשכול, הפלט הבא מוצג:
Please check the logs at bmctl-workspace/CLUSTER_NAME/log/create-cluster-20210926-020741/create-cluster.log
[2021-09-26 02:07:59+0000] Creating bootstrap cluster... ⠦ kind get kubeconfig --name bmctl > ~/.kube/config && k get pods --all-namespaces
[2021-09-26 02:07:59+0000] Creating bootstrap cluster... OK
[2021-09-26 02:10:48+0000] Installing dependency components... OK
[2021-09-26 02:13:42+0000] Waiting for preflight check job to finish... OK
[2021-09-26 02:15:22+0000] - Validation Category: machines and network
[2021-09-26 02:15:22+0000] - [PASSED] gcp
[2021-09-26 02:15:22+0000] - [PASSED] node-network
[2021-09-26 02:15:22+0000] - [PASSED] 10.200.0.11
[2021-09-26 02:15:22+0000] - [PASSED] 10.200.0.11-gcp
[2021-09-26 02:15:22+0000] - [PASSED] 10.200.0.12
[2021-09-26 02:15:22+0000] - [PASSED] 10.200.0.12-gcp
[2021-09-26 02:15:22+0000] Flushing logs... OK
[2021-09-26 02:15:23+0000] Applying resources for new cluster
[2021-09-26 02:15:24+0000] Waiting for cluster to become ready OK
[2021-09-26 02:25:04+0000] Writing kubeconfig file
[2021-09-26 02:25:04+0000] kubeconfig of created cluster is at bmctl-workspace/CLUSTER_NAME/CLUSTER_NAME-kubeconfig, please run
[2021-09-26 02:25:04+0000] kubectl --kubeconfig bmctl-workspace/CLUSTER_NAME/CLUSTER_NAME-kubeconfig get nodes
[2021-09-26 02:25:04+0000] to get cluster node status.
[2021-09-26 02:25:04+0000] Please restrict access to this file as it contains authentication credentials of your cluster.
[2021-09-26 02:25:04+0000] Waiting for node pools to become ready OK
[2021-09-26 02:25:24+0000] Moving admin cluster resources to the created admin cluster
[2021-09-26 02:25:53+0000] Flushing logs... OK
[2021-09-26 02:25:53+0000] Deleting bootstrap cluster...
אימות האשכול ואינטראקציה איתו
קובץ האשכול kubeconfig נמצא במכונה הווירטואלית abm-ws בספרייה bmctl-workspace. כדי לאמת את הפריסה, מבצעים את הפעולות הבאות:
מגדירים את משתנה הסביבה
KUBECONFIGעם הנתיב לקובץ התצורה של האשכול כדי להריץ פקודותkubectlבאשכול:export KUBECONFIG=$HOME/bmctl-workspace/CLUSTER_NAME/CLUSTER_NAME-kubeconfig kubectl get nodesהצמתים של האשכול אמורים להופיע, בדומה לפלט הבא:
NAME STATUS ROLES AGE VERSION abm-cp1 Ready control-plane,master 5m24s v1.20.5-gke.1301 abm-w1 Ready <none> 2m17s v1.20.5-gke.1301
כניסה לאשכול ממסוף Google Cloud
כדי לצפות בעומסי העבודה במסוף Google Cloud , צריך להיכנס לאשכול. הוראות ומידע נוסף על כניסה לאשכול זמינים במאמר עבודה עם אשכולות ממסוף Google Cloud .
הסרת המשאבים
כדי לנקות את האשכול, מריצים את הפקודה הבאה במכונה הווירטואלית של תחנת העבודה של האדמין (abm-ws):
export KUBECONFIG=$HOME/bmctl-workspace/CLUSTER_NAME/CLUSTER_NAME-kubeconfig
bmctl reset --cluster CLUSTER_NAME
מה השלב הבא?
- כדי להתקין את ספק שירותי הענן של OpenStack באשכול החדש שנוצר, פועלים לפי ההוראות במדריך הגדרת ספק שירותי הענן של OpenStack ל-Kubernetes.