תוכנת Distributed Cloud מאפשרת לכם ליצור רק התקנה קטנה של הוכחת היתכנות (PoC) של אשכולות GKE בחומרה של השרת הפיזי. בחלק הראשון של המדריך, שמורכב משני חלקים, תגדירו סביבת חומרה מינימלית ותתכננו את כתובות ה-IP. בחלק השני, יצירת אשכולות בסיסיים, יוצרים אשכול אדמין ואשכול משתמש.
המסמך הזה מיועד לאדמינים, לאדריכלים ולמפעילים שמגדירים, מנטרים ומנהלים את מחזור החיים של התשתית. מידע נוסף על תפקידים ומשימות נפוצים זמין במאמר תפקידים ומשימות נפוצים של משתמשי GKE.
התשתית המינימלית הזו לא מיועדת לעומסי עבודה בסביבת ייצור. להתקנות בסביבת ייצור, קראו את המאמר בחירת מודל פריסה.
לפני שמתחילים
- מידע על Google Distributed Cloud
- כדאי להכיר כמה מושגים בסיסיים של Google Cloud , כולל פרויקטים, הרשאות IAM וחשבונות שירות.
- נכנסים לחשבון Google Cloud . אנחנו ממליצים למשתמשים חדשים ב- Google Cloud ליצור חשבון כדי שיוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
- חשוב לזכור את מזהה הפרויקט של Google Cloud , כי תצטרכו אותו בהמשך.
סקירה כללית של התהליך
כדי להגדיר תשתית מינימלית, צריך לבצע את השלבים הבאים:
הגדרת תחנת עבודה לאדמין הגדרת תחנת עבודה של אדמין ב-Linux למשימות ניהול מקומיות. זה יכול להיות מכונה קיימת או מכונה ייעודית, שיכולה לנהל כמה אשכולות.
מגדירים את המכונות של צומתי האשכול. צריך להגדיר לפחות שלוש מכונות לצמתים: צומת אחד של אשכול אדמין, צומת אחד של מישור הבקרה של אשכול משתמש וצומת עובד אחד של אשכול משתמש.
תכנון הרשת. תכננו את כתובות ה-IP של מכונות הצמתים, כתובות ה-IP הווירטואליות (VIP) וטווחי ה-CIDR של השירותים וה-Pods.
בודקים את Google Cloud המשאבים הנדרשים. כדי ליצור אשכולות, הפרויקט ב-Google Cloud צריך ממשקי Google API וחשבונות שירות ספציפיים.
1. הגדרת תחנת עבודה לאדמין
תחנת העבודה של האדמין מארחת כלים וקובצי תצורה ליצירת אשכולות ולעבודה איתם.
דרישות החומרה
כדי להריץ כלים ולאחסן את המשאבים שמשויכים ליצירה ולניהול של אשכולות, נדרשים לתחנת העבודה של האדמין כוח מחשוב, זיכרון ונפח אחסון משמעותיים.
צריך לוודא שתחנת העבודה של האדמין עומדת בדרישות החומרה הבאות:
- מעבד עם 2 ליבות לפחות
- זיכרון RAM בנפח 4GiB לפחות
- נפח אחסון של 128GiB לפחות
דרישות מערכת ההפעלה
כדי להריץ את bmctl וליצור אשכול, תחנת העבודה של האדמין צריכה לעמוד באותן דרישות של מערכת ההפעלה (OS) כמו הצמתים. בכל מכונה צריכה לפעול גרסה נתמכת של Ubuntu.
הגדרת מערכת ההפעלה והתוכנה
בתחנת העבודה של האדמין, מתקינים ומגדירים את הדברים הבאים:
הגדרת Ubuntu
התקנת ה-CLI של gcloud
התקנת
kubectlהתקנת
bmctl
הגדרת מערכת ההפעלה
מריצים את הפקודות הבאות כדי לעדכן את הגדרות חומת האש, להתקין ולהגדיר את Docker ולוודא שכל מכונה משתמשת בסנכרון זמן:
משביתים את Uncomplicated Firewall (UFW) ובודקים את הסטטוס שלו:
sudo ufw disable sudo ufw statusמסירים את כל הגרסאות הקודמות של Docker, מעדכנים את מנהל החבילות ומתקינים את הגרסה העדכנית של Docker:
sudo apt-get remove docker docker-engine docker.io containerd runc sudo apt-get update sudo apt-get install \ apt-transport-https \ ca-certificates \ curl \ gnupg-agent \ software-properties-common \ docker.ioמוודאים שפועלת גרסה 19.03 ואילך של Docker:
sudo docker versionהגרסאות של הלקוח ושל השרת צריכות להיות 19.03 ומעלה, כמו שמוצג בתגובה לדוגמה הבאה:
Client: Version: 20.10.21 API version: 1.41 Go version: go1.18.1 ... Server: Engine: Version: 20.10.21 API version: 1.41 (minimum version 1.12) Go version: go1.18.1 ...יוצרים את הקבוצה
docker.sudo groupadd dockerמוסיפים את עצמכם לקבוצת Docker:
sudo usermod -aG docker $USERכדי להפעיל את השינויים בקבוצה:
newgrp dockerמוודאים ששעון המערכת מסונכרן:
timedatectlהפלט של
timedatectlמכיל את הסטטוס הבא:System clock synchronized: yes
התקנת Google Cloud CLI
כדי להתקין את Google Cloud CLI ב-Ubuntu, פועלים לפי ההוראות במדריך ההתקנה.
כדי להגדיר את ה-CLI של gcloud, מבצעים את השלבים הבאים בתחנת העבודה של האדמין:
נכנסים לחשבון כדי להגדיר את המאפיין
accountשל ה-CLI של gcloud:gcloud auth loginמגדירים את המאפיין
projectשל ה-CLI של gcloud:gcloud config set project PROJECT_IDמחליפים את
PROJECT_IDבמזהה הפרויקט ב-Google Cloud .מוודאים שהמאפיינים
accountו-projectמוגדרים בצורה נכונה:gcloud config listבפלט מוצגים הערכים של המאפיינים
accountו-project. לדוגמה:[core] account = my-name@google.com disable_usage_reporting = False project = my-project-1234 Your active configuration is: [default]
התקנת kubectl
כדי להתקין את kubectl:
מריצים את הפקודה הבאה בתחנת העבודה של האדמין:
gcloud components install kubectl
התקנת bmctl
bmctl הוא כלי שורת פקודה קנייני של Google Distributed Cloud, שמאפשר ליצור ולנהל אשכולות.
מתקינים את bmctl בתחנת העבודה של האדמין:
יוצרים ספרייה בשם
baremetalומוסיפים אותה לנתיב. אם אתם נמצאים בספריית הבית, הפקודות הן:mkdir baremetal export PATH="$HOME/baremetal:$PATH"מריצים את הפקודה הבאה כדי להוריד את הגרסה העדכנית של הקובץ הבינארי
bmctlולהפוך אותו לקובץ שניתן להפעלה:gcloud storage cp gs://anthos-baremetal-release/bmctl/1.36.200-gke.118/linux-amd64/bmctl . chmod +x ./bmctlמוודאים ש-
bmctlמותקן וניתן להפעלה:bmctl versionהתגובה אמורה להיראות כך:
[2023-05-12 17:36:16+0000] bmctl version: 1.14.2-gke.11, git commit: 4ff1347446a93925a079000b50437d4ecebcdf3a, build date: Mon Feb 27 14:07:30 PST 2023
קישוריות
לתחנת העבודה של האדמין צריכה להיות גישה ל- Google Cloud ולכל הצמתים באשכול.
גישה אל Google Cloud
תחנת העבודה של האדמין ניגשת אל Google Cloud כדי להוריד ולהתקין כלים ותמונות, לעבד בקשות הרשאה, ליצור חשבונות שירות, לנהל את הרישום ביומן והמעקב ועוד. אי אפשר ליצור אשכולות בלי גישה אלGoogle Cloud.
גישה מתחנת העבודה של האדמין
כדי ליצור ולנהל אשכולות מתחנת העבודה של האדמין, אתם צריכים את הגישה הבאה למכונות הצומת:
- קישוריות בשכבה 3 לכל מכונות הצמתים באשכול.
- גישה ל-VIP של מישור הבקרה.
- גישת SSH ללא סיסמה לכל מכונות הצמתים באשכול, בתור
rootאו בתור משתמש עם הרשאותsudoללא סיסמה.
בקטע הבא מוסבר איך להגדיר SSH בתחנת העבודה של האדמין ובמכונות הצומת.
2. הגדרת מכונות של צומתי אשכולות
כדי להתקין אשכול אדמין אחד ללא זמינות גבוהה ואשכול משתמש אחד ללא זמינות גבוהה, צריך שלוש מכונות:
מכונה לאשכול אדמין עם צומת אחד של מישור הבקרה.
שתי מכונות לאשכול משתמש עם צומת אחד של מישור הבקרה וצומת עובד אחד.
דרישות החומרה
כל מכונת צומת חייבת לעמוד בדרישות החומרה הבאות:
- מעבד עם 2 ליבות לפחות
- זיכרון RAM בנפח 4GiB לפחות
- נפח אחסון של 128GiB לפחות
דרישות מערכת ההפעלה
בכל מכונת צומת צריכה לפעול גרסה נתמכת של Ubuntu.
הגדרת Ubuntu
מגדירים את Ubuntu בכל צומת באמצעות אותן הוראות ששימשו לתחנת העבודה של האדמין.
הגדרת גישת SSH לצמתים
לתחנת העבודה של האדמין צריכה להיות גישת SSH ללא סיסמה לכל מכונות הצמתים באשכול. אפשר להגדיר את SSH בתור root או עם משתמש שיש לו הרשאות sudo ללא סיסמה.
אלה השלבים הכלליים להגדרת SSH ב-Google Distributed Cloud:
מתקינים ומגדירים SSH בכל המכונות.
יוצרים מפתחות SSH ומעתיקים את המפתח הציבורי לכל מכונת צומת.
השביתו את אימות הסיסמה במכונות הצומת.
מוודאים שיש גישת SSH בין תחנת העבודה של האדמין לבין מכונות הצמתים.
התקנה והגדרה של SSH בכל המכונות
ב-Google Distributed Cloud נדרשת תקשורת SSH ללא סיסמה בין תחנת העבודה של האדמין לבין הצמתים באשכול. מבצעים את השלבים הבאים בתחנת העבודה של האדמין ובכל מכונת צומת.
כדי להגדיר SSH במכונות שבהן פועלת מערכת Ubuntu:
אם עדיין לא מותקן שרת SSH, צריך להתקין אותו עכשיו:
sudo apt update sudo apt install openssh-server sudo systemctl status sshמפעילים אימות סיסמה של
rootSSH על ידי ביטול ההערה או הוספה של השורותPermitRootLoginו-PasswordAuthenticationבקובץ/etc/ssh/sshd_config, והגדרת הערכים ל-yes:# Authentication: #LoginGraceTime 2m PermitRootLogin yes #StrictModes yes #MaxAuthTries 6 #MaxSessions 10 ... PasswordAuthentication yesמגדירים סיסמת בסיס:
sudo passwd rootכדי להחיל את השינויים בהגדרות ה-SSH, מפעילים מחדש את שירות ה-SSH:
sudo systemctl restart ssh.serviceמפעילים מחדש את המכשיר.
כדי לוודא ש-SSH פועל, יוצרים חיבור SSH ממכונה אחרת.
יוצרים מפתחות SSH ומעתיקים את המפתח הציבורי לכל מכונת צומת
כדי ליצור חיבורים מאובטחים ללא סיסמה בין תחנת העבודה של האדמין לבין הצמתים, צריך ליצור מפתח SSH בתחנת העבודה של האדמין ולשתף את המפתח הציבורי עם הצמתים.
בתחנת העבודה של האדמין, יוצרים זוג מפתחות פרטי וציבורי. אל תגדירו ביטוי סיסמה למפתחות:
ssh-keygen -t rsaבתחנת העבודה של האדמין, מעתיקים את המפתח הציבורי שנוצר לכל אחת ממכונות הצמתים:
ssh-copy-id -i PUBLIC_KEY root@CLUSTER_NODE_IPמחליפים את מה שכתוב בשדות הבאים:
-
PUBLIC_KEY: הנתיב לקובץ שמכיל את המפתח הציבורי של SSH. כברירת מחדל, הנתיב הוא/home/USERNAME/.ssh/id_rsa.pub -
CLUSTER_NODE_IP: כתובת ה-IP של מכונת הצומת
-
השבתת אימות באמצעות סיסמה במכונות של צמתים
בשלב הזה, אתם כבר לא צריכים להפעיל אימות באמצעות סיסמה.
בכל מכונת צומת:
פותחים את
/etc/ssh/sshd_config, מגדירים אתPasswordAuthenticationלערךnoושומרים את הקובץ.מפעילים מחדש את שירות ה-SSH.
sudo systemctl restart ssh.service
אימות הגישה ל-SSH בין תחנת העבודה של האדמין לבין מכונות הצמתים
כשה-SSH מוגדר כמו שצריך, אתם יכולים ליצור חיבור SSH למכונת הצומת מתחנת העבודה של האדמין (כמשתמש root) בלי סיסמה.
מוודאים שאימות המפתח הציבורי פועל בין תחנת הניהול לבין הצמתים באשכול:
בתחנת העבודה של האדמין, מריצים את הפקודה הבאה לכל מכונת צומת:
ssh -o IdentitiesOnly=yes -i PRIVATE_KEY root@CLUSTER_NODE_IPמחליפים את מה שכתוב בשדות הבאים:
-
PRIVATE_KEY: הנתיב לקובץ שמכיל את המפתח הפרטי של ה-SSH. כברירת מחדל, הנתיב הוא/home/USERNAME/.ssh/id_rsa -
CLUSTER_NODE_IP: כתובת ה-IP של מכונת הצומת
-
3. תכנון הרשת
כשמתקינים אשכולות, חשוב לתכנן את כתובות ה-IP, ולוודא שלא נוצרות התנגשויות בין הכתובות. יכול להיות שתצטרכו את העזרה של מנהל הרשת כדי למצוא כתובות מתאימות, אפילו בהתקנה הפשוטה הזו. לא כולל CIDR של Pods ו-Services, צריך לפחות 15 כתובות IP ייחודיות להתקנה מינימלית של אשכול אדמין ואשכול משתמש.
מתכננים ומגדירים כתובות IP לרכיבי האשכול הבאים:
- צמתים באשכול: צריך כתובת IP לכל מכונת צומת
- כתובות IP וירטואליות (VIP): אתם צריכים כתובות VIP כדי לגשת לשרתי ה-API של Kubernetes, לשרת ה-proxy של Ingress ולשירותים מסוג LoadBalancer
- פודים ושירותים: צריך טווחי כתובות CIDR כדי להכיל כל פוד ושירות שפועלים באשכולות
בהמשך הקטע הזה יש דוגמאות לערכים שמתאימים להתקנה הזו ברשת היפותטית – הערכים שלכם יהיו שונים.
בהתקנה הקטנה הזו, תחנת העבודה של האדמין, הצומת של אשכול האדמין והצמתים של אשכול המשתמשים נמצאים באותו דומיין של שכבה 2. לדוגמה, נניח שכל כתובות ה-IP בטווח 172.16.20.0/24 מנותבות לדומיין מסוים בשכבה 2. נניח גם שמנהל הרשת אומר שאפשר להשתמש ב-172.16.20.10 עד 172.16.20.12 לכתובות של מכונות צומת, וב-172.16.0.13 עד 172.16.20.24 לכתובות VIP.
בתרשים הבא מוצג דומיין בשכבה 2, שכולל תחנת עבודה של אדמין, אשכול אדמין ואשכול משתמש:
כתובות IP לדוגמה של צומת באשכול
בטבלה הבאה מוצגת דוגמה לשימוש בכתובות IP לצומתי אשכול:
| מכונה | תיאור | כתובת IP |
|---|---|---|
| צומת מישור הבקרה של אשכול האדמין | מכונה פיזית שמשמשת כצומת של מישור הבקרה באשכול האדמין | 172.16.20.10 |
| צומת של מישור הבקרה באשכול המשתמשים | מכונה פיזית שמשמשת כצומת של מישור הבקרה באשכול המשתמשים | 172.16.20.11 |
| צומת עובד באשכול משתמשים | מכונה פיזית שמריצה עומסי עבודה של משתמשים | 172.16.20.12 |
דוגמאות לכתובות IP וירטואליות (VIP)
בטבלה הבאה מוצגת דוגמה לאופן שבו אפשר לציין כתובות VIP לאשכולות:
| VIP | תיאור | כתובת IP |
|---|---|---|
| כתובת ה-VIP של מישור הבקרה של אשכול האדמין | כתובת ה-VIP של מישור הבקרה של אשכול האדמין (שרת ה-API של Kubernetes באשכול האדמין) | 172.16.20.13 |
| כתובת ה-VIP של מישור הבקרה של אשכול המשתמשים | כתובת ה-VIP של מישור הבקרה של אשכול המשתמש (שרת ה-API של Kubernetes באשכול המשתמש) | 172.16.20.14 |
| כתובת VIP של Ingress | כתובת VIP של Ingress (כלולה בטווח של מאגר הכתובות של MetalLB) | 172.16.20.15 |
| כתובות VIP של שירותים | 10 כתובות לשימוש ככתובות IP חיצוניות לשירותים מסוג LoadBalancer. הכתובות מוקצות לפי הצורך בצומתי אשכולות של משתמשים.
הטווח הזה כולל את ה-VIP של הכניסה. החפיפה הזו בין כתובות ה-IP נדרשת ל-MetalLB, מאזן העומסים שכלול כברירת מחדל. |
172.16.20.15 - 172.16.20.24 |
כתובות IP לפודים ולשירותים
בנוסף לכתובות ה-IP שציינתם לצומתי האשכול ולכתובות ה-VIP, אתם צריכים לציין כתובות לפודים ולשירותים. מציינים טווח CIDR שישמש לכתובות ה-IP של Pods, וטווח CIDR נוסף שישמש לכתובות ה-ClusterIP של שירותי Kubernetes. משתמשים בכתובות IP במרחב הכתובות הפרטי, כפי שמתואר ב-RFC 1918.
הכתובות האלה מצוינות כחלק מהגדרת האשכול, כמו שמוצג בחלק הבא של המדריך.
כחלק מתכנון ה-IP, צריך להחליט באילו טווחי CIDR רוצים להשתמש לפודים ולשירותים. אלא אם יש לכם סיבה לעשות אחרת, כדאי להשתמש בטווחים הבאים:
| מטרה | טווח CIDR מאוכלס מראש |
|---|---|
| פודים של אשכול אדמין | 192.168.0.0/16 |
| שירותים של אשכול אדמין | 10.96.0.0/20 |
| פודים של אשכולות משתמשים | 192.168.0.0/16 |
| שירותי אשכולות של משתמשים | 10.96.0.0/20 |
הטווחים המוצעים ממחישים את הנקודות הבאות:
טווח ה-CIDR של Pod יכול להיות זהה לכמה אשכולות במודל הרשת שמוגדר כברירת מחדל, מצב אי.
טווח ה-CIDR של השירות יכול להיות זהה בכמה אשכולות.
בדרך כלל צריך יותר Pods מאשר שירותים באשכול, ולכן כנראה תרצו טווח CIDR של Pod שגדול יותר מטווח ה-CIDR של השירות. לדוגמה, טווח ה-Pod המוצע לאשכול משתמשים כולל 2(32-16) = 216 כתובות, אבל טווח השירות המוצע לאשכול משתמשים כולל רק 2(32-20) = 212 כתובות.
הימנעו מחפיפה
כדי למנוע חפיפה עם כתובות IP שאפשר להגיע אליהן ברשת, יכול להיות שתצטרכו להשתמש בטווחי CIDR שונים מההצעות הקודמות. טווחי הכתובות של השירותים וה-Pods לא יכולים לחפוף לכתובות מחוץ לאשכול שאתם רוצים להגיע אליהן מתוך האשכול.
לדוגמה, נניח שטווח השירות הוא 10.96.232.0/24 וטווח ה-Pod הוא 192.168.0.0/16. תנועה שנשלחת מ-Pod לכתובת באחד מהטווחים האלה מטופלת כתנועה בתוך האשכול, ולא יכולה להגיע ליעד מחוץ לאשכול.
באופן ספציפי, טווחי הכתובות של השירותים וה-Pods לא יכולים לחפוף ל:
כתובות IP של צמתים בכל אשכול
כתובות IP שמשמשות מכונות של מאזני עומסים
כתובות VIP שמשמשות את הצמתים של מישור הבקרה ומאזני העומסים
כתובת IP של שרתי DNS או שרתי NTP
4. נדרשת בדיקה של Google Cloud משאבים
כדי ליצור אשכולות, ב-Google Distributed Cloud צריך להפעיל קבוצה ספציפית של ממשקי Google API בפרויקט המשויך ב- Google Cloud . כדי להשתמש ב-Google APIs, ב-Google Distributed Cloud נדרשים חשבונות שירות שמוגדרים עם תפקידי IAM ספציפיים בפרויקט Google Cloud המשויך.
התהליך ליצירת אשכולות בחלק הבא של המדריך, יצירת אשכולות בסיסיים, מפעיל ממשקי API ויוצר חשבונות שירות באופן אוטומטי.
אלה ממשקי ה-API של Google שמופעלים באופן אוטומטי:
anthos.googleapis.comanthosaudit.googleapis.comanthosgke.googleapis.comcloudresourcemanager.googleapis.comconnectgateway.googleapis.comcontainer.googleapis.comgkeconnect.googleapis.comgkehub.googleapis.comgkeonprem.googleapis.comiam.googleapis.comlogging.googleapis.commonitoring.googleapis.comopsconfigmonitoring.googleapis.comserviceusage.googleapis.comstackdriver.googleapis.comstorage.googleapis.com
בטבלה הבאה מתוארים חשבונות השירות שנוצרים באופן אוטומטי:
| חשבון שירות | מטרה | תפקידים |
|---|---|---|
| anthos-baremetal-gcr | Google Distributed Cloud משתמש בחשבון השירות הזה כדי להוריד קובצי אימג' של קונטיינרים מ-Artifact Registry. | ללא |
| anthos-baremetal-connect | Connect Agent משתמש בחשבון השירות הזה כדי לשמור על החיבור בין האשכול לבין Google Cloud. כך אפשר לגשת לאשכול ולתכונות של ניהול עומסי העבודה, כולל מסוף Google Cloud ושער הקישור, כדי לבצע פעולות באשכול. | roles/gkehub.connect |
| anthos-baremetal-register | Connect Agent משתמש בחשבון השירות הזה כדי לרשום את האשכולות שלכם ב צי. | roles/gkehub.admin |
| anthos-baremetal-cloud-ops | הסוכן של Stackdriver משתמש בחשבון השירות הזה כדי לייצא יומנים ומדדים מאשכולות אל Cloud Logging ואל Cloud Monitoring. |
roles/logging.logWriter roles/monitoring.metricWriter roles/stackdriver.resourceMetadata.writer roles/opsconfigmonitoring.resourceMetadata.writer roles/monitoring.dashboardEditor |