הדף הזה הוא החלק הראשון במדריך בן שני חלקים, שבו מוסבר איך להשתמש ב-Google Distributed Cloud (תוכנה בלבד) כדי ליצור התקנה קטנה של אשכולות GKE בשרת Bare Metal לצורך הוכחת היתכנות. בחלק הראשון של המדריך הזה, תגדירו סביבת חומרה מינימלית ותתכננו את כתובות ה-IP. בחלק השני, יצירת אשכולות בסיסיים, יוצרים אשכול אדמין ואשכול משתמשים.
המדריך הזה מיועד לאדמינים, לארכיטקטים ולמפעילים שמגדירים, מנטרים ומנהלים את מחזור החיים של התשתית. מידע נוסף על תפקידים ומשימות נפוצים זמין במאמר תפקידים ומשימות נפוצים של משתמשי GKE.
יכול להיות שהתשתית שתגדירו באמצעות המדריך הזה לא תתאים לצרכים שלכם בסביבת הייצור. מידע נוסף על התקנות בייצור זמין במאמר בחירת מודל פריסה.
לפני שמתחילים
- מידע על Google Distributed Cloud
- כדאי להכיר כמה מושגים בסיסיים, כולל פרויקטים, הרשאות IAM וחשבונות שירות. Google Cloud
- נכנסים לחשבון 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 APIs ספציפיים וחשבונות שירות.
1. הגדרת תחנת עבודה לאדמין
תחנת העבודה של האדמין מארחת כלים וקובצי הגדרות ליצירה של אשכולות ולעבודה איתם.
דרישות חומרה
כדי להריץ כלים ולאחסן את המשאבים שקשורים ליצירה ולניהול של אשכולות, תחנת העבודה של האדמין צריכה כוח מחשוב, זיכרון ונפח אחסון משמעותיים.
צריך לוודא שתחנת העבודה של האדמין עומדת בדרישות החומרה הבאות:
- מעבד עם 2 ליבות לפחות
- זיכרון RAM בנפח 4GiB לפחות
- נפח אחסון של 128GiB לפחות
דרישות מערכת ההפעלה
כדי להריץ את bmctl וליצור אשכול, למחשב האדמין צריכות להיות אותן דרישות של מערכת הפעלה (OS) כמו לצמתים. בכל מכונה צריך להפעיל גרסה נתמכת של Ubuntu.
הגדרת מערכת ההפעלה והתוכנה
בתחנת העבודה של האדמין, מתקינים ומגדירים את הרכיבים הבאים:
הגדרת Ubuntu
התקנת ה-CLI של gcloud
התקנה של
kubectlהתקנה של
bmctl
הגדרת מערכת ההפעלה
מריצים את הפקודות הבאות כדי לעדכן את הגדרות חומת האש, להתקין ולהגדיר את Docker ולוודא שכל מכונה משתמשת בסנכרון זמן:
משביתים את חומת האש הפשוטה (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"מריצים את הפקודה הבאה כדי להוריד את הגרסה האחרונה של קובץ ה-
bmctlbinary ולהפוך אותו לקובץ הפעלה:gcloud storage cp gs://anthos-baremetal-release/bmctl/1.35.100/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כדי להפעיל אימות סיסמה של SSH, מבטלים את ההערה בשורות
PermitRootLoginו-PasswordAuthenticationבקובץ/etc/ssh/sshd_configאו מוסיפים אותן, ומגדירים את הערכים ל-yes:root# 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 כדי לגשת לשרתי Kubernetes API, ל-ingress proxy ולשירותים מסוג LoadBalancer
- Pods ו-Services: אתם צריכים טווחי כתובות CIDR כדי להכיל כל Pod ו-Service שפועלים באשכולות
בהמשך הקטע הזה יש דוגמאות לערכים שמתאימים להתקנה הזו ברשת היפותטית – הערכים שלכם יהיו שונים.
במקרה של התקנה קטנה, צריך למקם את תחנת העבודה של האדמין, את צומת האשכול של האדמין ואת צמתי האשכול של המשתמש באותו דומיין בשכבה 2. לדוגמה, נניח שכל כתובות ה-IP בטווח 172.16.20.0/24 מנותבות לדומיין מסוים בשכבה 2. נניח גם שמנהל הרשת אומר שאפשר להשתמש בכתובות 172.16.20.10 - 172.16.20.12 למכונות צמתים ובכתובות 172.16.0.13 -172.16.20.24 לכתובות IP וירטואליות.
הדיאגרמה הבאה ממחישה דומיין ברמה 2 עם תחנת עבודה של אדמין, אשכול אדמין ואשכול משתמשים:
כתובות IP לדוגמה של צומתי אשכול
בטבלה הבאה מופיעה דוגמה לאופן השימוש בכתובות IP לצורך צמתי אשכול:
| מכונה | תיאור | כתובת IP |
|---|---|---|
| צומת מישור הבקרה של אשכול אדמין | מכונה פיזית שמשמשת כצומת של מישור הבקרה עבור אשכול האדמין | 172.16.20.10 |
| צומת של מישור הבקרה באשכול משתמשים | מכונה פיזית שמשמשת כצומת של מישור הבקרה עבור אשכול המשתמשים | 172.16.20.11 |
| צומת עובד באשכול משתמשים | מכונה פיזית שמריצה עומסי עבודה של משתמשים | 172.16.20.12 |
דוגמאות לכתובות IP וירטואליות (VIP)
בטבלה הבאה מופיעה דוגמה לאופן שבו אפשר לציין כתובות VIP עבור האשכולות:
| VIP | תיאור | כתובת IP |
|---|---|---|
| כתובת ה-VIP של מישור הבקרה של אדמין קלאסטר | כתובת ה-VIP של מישור הבקרה של אשכול האדמין (שרת ה-Kubernetes API של אשכול האדמין) | 172.16.20.13 |
| כתובת ה-VIP של מישור הבקרה של אשכול המשתמשים | כתובת VIP של מישור הבקרה של אשכול משתמשים (שרת Kubernetes API של אשכול משתמשים) | 172.16.20.14 |
| כתובת VIP של תעבורת נתונים נכנסת | כתובת VIP של Ingress (כלולה בטווח של מאגר הכתובות של MetalLB) | 172.16.20.15 |
| כתובות VIP של שירותים | עשר כתובות לשימוש ככתובות IP חיצוניות לשירותים מסוג LoadBalancer. הכתובות מוקצות לפי הצורך בצמתים של אשכולות משתמשים.
הטווח הזה כולל את כתובת ה-VIP של הכניסה. חפיפה כזו של כתובות IP היא דרישה ל-MetalLB, מאזן העומסים המצורף שמוגדר כברירת מחדל. |
172.16.20.15 - 172.16.20.24 |
כתובות IP של Pods ושירותים
בנוסף לכתובות ה-IP שציינתם לצמתים של האשכולות ולכתובות ה-VIP, צריך לציין כתובות ל-Pods ולשירותים. מציינים טווח CIDR לשימוש בכתובות IP של Pod וטווח CIDR אחר לשימוש בכתובות ClusterIP של שירותי Kubernetes. משתמשים בכתובות IP במרחב הכתובות הפרטי, כפי שמתואר ב-RFC 1918.
הכתובות האלה מצוינות כחלק מהגדרת האשכול, כמו שמוצג בחלק הבא של המדריך הזה.
במסגרת תכנון כתובות ה-IP, צריך להחליט באילו טווחי CIDR רוצים להשתמש עבור Pods ו-Services. אלא אם יש לכם סיבה אחרת, מומלץ להשתמש בטווחים הבאים:
| מטרה | טווח CIDR שאוכלס מראש |
|---|---|
| רכיבי Pod באשכול אדמין | 192.168.0.0/16 |
| שירותים של אשכול אדמין | 10.96.0.0/20 |
| Pods באשכול משתמש | 192.168.0.0/16 |
| שירותים באשכול משתמש | 10.96.0.0/20 |
הטווחים המוצעים ממחישים את הנקודות הבאות:
טווח ה-CIDR של ה-Pod יכול להיות זהה לכמה אשכולות במודל הרשת שמוגדר כברירת מחדל, במצב איים.
טווח ה-CIDR של השירות יכול להיות זהה לכמה אשכולות.
בדרך כלל צריך יותר פודים משירותים באשכול, ולכן כדאי להשתמש בטווח CIDR של פודים שגדול יותר מטווח ה-CIDR של השירותים. לדוגמה, טווח הפודים המומלץ לאשכול משתמשים הוא 2(32-16) = 216 כתובות, אבל טווח השירותים המומלץ לאשכול משתמשים הוא רק 2(32-20) = 212 כתובות.
הימנעות מחפיפה
כדי למנוע חפיפה עם כתובות IP שאפשר להגיע אליהן ברשת שלכם, יכול להיות שתצטרכו להשתמש בטווחים של CIDR ששונים מההצעות הקודמות. הטווחים של השירות וה-Pod לא יכולים לחפוף לכתובות מחוץ לאשכול שאתם רוצים להגיע אליהן מתוך האשכול.
לדוגמה, נניח שטווח השירות הוא 10.96.232.0/24 וטווח ה-Pod הוא 192.168.0.0/16. תעבורת נתונים שנשלחת מ-Pod לכתובת באחד מהטווחים האלה מטופלת כתעבורת נתונים בתוך האשכול, ולא יכולה להגיע ליעד מחוץ לאשכול.
בפרט, טווחי ה-Service וה-Pod לא יכולים לחפוף ל:
כתובות ה-IP של הצמתים בכל אשכול
כתובות IP שמשמשות מכונות של מאזן עומסים
כתובות VIP שמשמשות צמתים של רמת הבקרה ומאזני עומסים
כתובת ה-IP של שרתי DNS או שרתי NTP
4. נדרשת בדיקה Google Cloud משאבים
כדי ליצור אשכולות, צריך להפעיל בפרויקט המשויך ב-Google Distributed Cloud קבוצה ספציפית של ממשקי Google API. Google Cloud כדי להשתמש בממשקי Google API, צריך להגדיר ב-Google Distributed Cloud חשבונות שירות עם תפקידי IAM ספציפיים בפרויקט המשויך שלכם ב- Google Cloud .
התהליך ליצירת אשכולות בחלק הבא של המדריך הזה, יצירת אשכולות בסיסיים, מאפשר הפעלה של ממשקי API ויצירה של חשבונות שירות באופן אוטומטי.
אלה ממשקי Google API שמופעלים באופן אוטומטי:
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 |