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

דרישות מוקדמות
- OpenStack Ussuri עם LBaaS v2 שנפרס ופועל
- חשבון שירות להורדת הכלי bmctl
- מגדירים את המכונות הווירטואליות ואת הרשת ב-OpenStack כמו בדוגמה לפריסה.
כדי להקצות הגדרה דומה בסביבת OpenStack, יש לכם את האפשרויות הבאות:
- כדי להקצות את המשאבים באופן אוטומטי, משתמשים בסקריפט Terraform הזה.
- הקצאת המשאבים באופן ידני.
- המכונות הווירטואליות הבאות של OpenStack צריכות להיות מוכנות וזמינות דרך SSH:
| שם | כתובת IP | מטרה |
|---|---|---|
| abm-ws |
10.200.0.10 (private IP) floating_ip (public IP) |
משמש כתחנת עבודה לאדמין: משתמשים בו כדי לפרוס את Google Distributed Cloud במכונות האחרות. |
| abm-cp1 | 10.200.0.11 | רמת הבקרה של האשכול: המארח הזה מריץ את רמת הבקרה של Kubernetes ואת מאזן העומסים. |
| abm-w1 | 10.200.0.12 | צומת worker באשכול: המארח הזה מפעיל את עומסי העבודה של Kubernetes. |
פריסת Google Distributed Cloud
בקטע הזה מוסבר איך לבצע את הפעולות הבאות:
- מתקינים את הכלים שצריך במכונה הווירטואלית של תחנת העבודה של האדמין
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במכונת ה-VMabm-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.34.100-gke.93/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.34.100-gke.93 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
הסרת המשאבים
כדי לנקות את האשכול, מריצים את הפקודה הבאה במכונת ה-VM של תחנת העבודה לאדמין (abm-ws):
export KUBECONFIG=$HOME/bmctl-workspace/CLUSTER_NAME/CLUSTER_NAME-kubeconfig
bmctl reset --cluster CLUSTER_NAME
מה השלב הבא?
- כדי להתקין את ספק הענן OpenStack באשכול החדש שנוצר, פועלים לפי ההוראות במדריך הגדרת ספק הענן OpenStack ל-Kubernetes.