יצירת אשכול ופריסת עומס עבודה באמצעות Terraform
אשכול של Kubernetes מספק שירותי מחשוב, אחסון, רשת ושירותים אחרים לאפליקציות, בדומה למרכז נתונים וירטואלי. אפליקציות והשירותים המשויכים להן שפועלים ב-Kubernetes נקראים עומסי עבודה.
במדריך הזה תוכלו לראות במהירות אשכול פעיל של Google Kubernetes Engine ועומס עבודה לדוגמה, שמוגדרים באמצעות Terraform. אחרי שתסיימו את ההגדרה, תוכלו לעיין בעומס העבודה במסוף לפני שתמשיכו לתוכנית הלימודים המעמיקה יותר שלנו, או שתתחילו לתכנן וליצור אשכול משלכם שמוכן להפקה. Google Cloud במדריך הזה אנחנו מניחים שאתם כבר מכירים את Terraform.
אם אתם מעדיפים להגדיר את אשכול הדוגמה ואת עומס העבודה במסוף Google Cloud , תוכלו לעיין במאמר יצירת אשכול במסוף Google Cloud .
לפני שמתחילים
כדי להפעיל את Kubernetes Engine API:
- נכנסים לחשבון Google Cloud . אם אתם משתמשים חדשים ב- Google Cloud, צרו חשבון כדי שתוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
-
התקינו את ה-CLI של Google Cloud.
-
אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
-
כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:
gcloud init -
יוצרים או בוחרים Google Cloud פרויקט.
תפקידים שנדרשים כדי לבחור או ליצור פרויקט
- Select a project: כדי לבחור פרויקט לא צריך תפקיד IAM ספציפי – אפשר לבחור כל פרויקט שקיבלתם בו תפקיד.
-
יצירת פרויקט: כדי ליצור פרויקט, צריך את התפקיד Project Creator (יצירת פרויקטים) (
roles/resourcemanager.projectCreator), שכולל את ההרשאהresourcemanager.projects.create. איך מקצים תפקידים
-
יוצרים Google Cloud פרויקט:
gcloud projects create PROJECT_ID
מחליפים את
PROJECT_IDבשם של פרויקט Google Cloud שיוצרים. -
בוחרים את הפרויקט שיצרתם: Google Cloud
gcloud config set project PROJECT_ID
מחליפים את
PROJECT_IDבשם הפרויקט ב- Google Cloud .
מפעילים את GKE API:
תפקידים שנדרשים להפעלת ממשקי API
כדי להפעיל ממשקי API, צריך את תפקיד ה-IAM 'אדמין של Service Usage' (
roles/serviceusage.serviceUsageAdmin), שכולל את ההרשאהserviceusage.services.enable. איך מקצים תפקידיםgcloud services enable container.googleapis.com
-
התקינו את ה-CLI של Google Cloud.
-
אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
-
כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:
gcloud init -
יוצרים או בוחרים Google Cloud פרויקט.
תפקידים שנדרשים כדי לבחור או ליצור פרויקט
- Select a project: כדי לבחור פרויקט לא צריך תפקיד IAM ספציפי – אפשר לבחור כל פרויקט שקיבלתם בו תפקיד.
-
יצירת פרויקט: כדי ליצור פרויקט, צריך את התפקיד Project Creator (יצירת פרויקטים) (
roles/resourcemanager.projectCreator), שכולל את ההרשאהresourcemanager.projects.create. איך מקצים תפקידים
-
יוצרים Google Cloud פרויקט:
gcloud projects create PROJECT_ID
מחליפים את
PROJECT_IDבשם של פרויקט Google Cloud שיוצרים. -
בוחרים את הפרויקט שיצרתם: Google Cloud
gcloud config set project PROJECT_ID
מחליפים את
PROJECT_IDבשם הפרויקט ב- Google Cloud .
מפעילים את GKE API:
תפקידים שנדרשים להפעלת ממשקי API
כדי להפעיל ממשקי API, צריך את תפקיד ה-IAM 'אדמין של Service Usage' (
roles/serviceusage.serviceUsageAdmin), שכולל את ההרשאהserviceusage.services.enable. איך מקצים תפקידיםgcloud services enable container.googleapis.com
-
מעניקים תפקידים לחשבון המשתמש. מריצים את הפקודה הבאה לכל אחד מהתפקידים הבאים ב-IAM:
roles/container.admin, roles/compute.networkAdmin, roles/iam.serviceAccountUsergcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE
מחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_ID: מזהה הפרויקט. -
USER_IDENTIFIER: המזהה של חשבון המשתמש . לדוגמה,myemail@example.com. -
ROLE: תפקיד ה-IAM שאתם מקצים לחשבון המשתמש.
-
הכנת הסביבה
במדריך הזה תשתמשו ב-Cloud Shell כדי לנהל משאבים שמתארחים ב-Google Cloud. ב-Cloud Shell מותקן מראש התוכנה שדרושה למדריך הזה, כולל Terraform, kubectl ו-Google Cloud CLI.
מפעילים סשן Cloud Shell מהמסוף על ידי לחיצה על סמל ההפעלה של Cloud Shell Activate Cloud Shell
. Google Cloud הפעולה הזו תפעיל סשן בחלונית התחתונה של Google Cloud המסוף.פרטי הכניסה לשירות שמשויכים למכונה הווירטואלית נוצרים אוטומטית, כך שלא צריך ליצור או להוריד מפתח לחשבון שירות.
לפני שמריצים פקודות, מגדירים את פרויקט ברירת המחדל ב-CLI של gcloud באמצעות הפקודה הבאה:
gcloud config set project PROJECT_IDמחליפים את
PROJECT_IDבמזהה הפרויקט.משכפלים את המאגר ב-GitHub:
git clone https://github.com/terraform-google-modules/terraform-docs-samples.git --single-branchעוברים לספריית העבודה:
cd terraform-docs-samples/gke/quickstart/autopilot
סקירת קובצי Terraform
Google Cloud פלאגין שמתממשק עם שירותים חיצוניים הוא פלאגין שמאפשר לכם לנהל ולהקצות Google Cloud משאבים באמצעות Terraform. הוא משמש כגשר בין ההגדרות של Terraform לבין ממשקי API של Google Cloud , ומאפשר להגדיר באופן הצהרתי משאבי תשתית, כמו מכונות וירטואליות ורשתות.
האשכול ואפליקציית הדוגמה במדריך הזה מוגדרים בשני קובצי Terraform שמשתמשים בספקי Google Cloud ובספקי Kubernetes.
בודקים את הקובץ
cluster.tf:cat cluster.tfהפלט אמור להיראות כך:
בקובץ הזה מתוארים המשאבים הבאים:
-
google_compute_network: רשת VPC עם IPv6 פנימי מופעל. -
google_compute_subnetwork: רשת משנה עם תמיכה ב-dual-stack. -
google_container_cluster: a dual-stack Autopilot mode cluster located inus-central1. ההגדרהdeletion_protectionקובעת אם אפשר להשתמש ב-Terraform כדי למחוק את האשכול הזה. אם מגדירים את הערך בשדהdeletion_protectionל-false, Terraform יכול למחוק את האשכול. לפרטים נוספים, אפשר לעיין במקור המידעgoogle_container_cluster.
-
בודקים את הקובץ
app.tf:cat app.tfהפלט אמור להיראות כך:
בקובץ הזה מתוארים המשאבים הבאים:
- פריסה עם תמונה לדוגמה של קונטיינר.
- שירות מסוג LoadBalancer. השירות חושף את הפריסה ביציאה 80.
(אופציונלי) חשיפת האפליקציה לאינטרנט
קובצי ה-Terraform לדוגמה מתארים אפליקציה עם כתובת IP פנימית, שאפשר לגשת אליה רק מאותו ענן וירטואלי פרטי (VPC) כמו אפליקציית הדוגמה. אם רוצים לגשת לממשק האינטרנט של אפליקציית ההדגמה הפועלת מהאינטרנט (לדוגמה, מהמחשב הנייד), צריך לשנות את קובצי ה-Terraform כדי ליצור כתובת IP ציבורית לפני שיוצרים את האשכול. אפשר לעשות את זה באמצעות עורך טקסט ישירות ב-Cloud Shell או באמצעות Cloud Shell Editor.
כדי לחשוף את אפליקציית ההדגמה לאינטרנט:
ב-
cluster.tf, משנים אתipv6_access_typeמ-INTERNALל-EXTERNAL.ipv6_access_type = "EXTERNAL"ב-
app.tf, מסירים את ההערהnetworking.gke.io/load-balancer-typeכדי להגדיר מאזן עומסים חיצוני.annotations = { "networking.gke.io/load-balancer-type" = "Internal" # Remove this line }
יצירת אשכול ופריסת אפליקציה
ב-Cloud Shell, מריצים את הפקודה הבאה כדי לוודא ש-Terraform זמין:
terraformהפלט אמור להיראות כך:
Usage: terraform [global options] <subcommand> [args] The available commands for execution are listed below. The primary workflow commands are given first, followed by less common or more advanced commands. Main commands: init Prepare your working directory for other commands validate Check whether the configuration is valid plan Show changes required by the current configuration apply Create or update infrastructure destroy Destroy previously-created infrastructureמאתחלים את Terraform:
terraform initמתכננים את ההגדרות של Terraform:
terraform planהחלת ההגדרות של Terraform
terraform applyכשמופיעה בקשה, מזינים
yesכדי לאשר את הפעולות. יכול להיות שיחלפו כמה דקות עד שהפקודה הזו תושלם. הפלט אמור להיראות כך:Apply complete! Resources: 6 added, 0 changed, 0 destroyed.
אימות הפעולה התקינה של האשכול
כדי לוודא שהאשכול פועל בצורה תקינה:
נכנסים לדף Workloads במסוף Google Cloud :
לוחצים על עומס העבודה
example-hello-app-deployment. יוצג הדף 'פרטי ה-Pod'. בדף הזה מוצג מידע על ה-Pod, כמו הערות, קונטיינרים שפועלים ב-Pod, שירותים שחושפים את ה-Pod ומדדים, כולל שימוש ב-CPU, בזיכרון ובדיסק.נכנסים לדף Services & Ingress במסוף Google Cloud :
לוחצים על
example-hello-app-loadbalancerLoadBalancer Service. יוצג דף הפרטים של השירות. בדף הזה מוצג מידע על השירות, כמו ה-Pods שמשויכים לשירות והיציאות שבהן השירות משתמש.בקטע External endpoints (נקודות קצה חיצוניות), לוחצים על IPv4 link (קישור IPv4) או על IPv6 link (קישור IPv6) כדי להציג את השירות בדפדפן. הפלט אמור להיראות כך:
Hello, world! Version: 2.0.0 Hostname: example-hello-app-deployment-5df979c4fb-kdwgr
הסרת המשאבים
כדי לא לצבור חיובים בחשבון על המשאבים שבהם השתמשתם בדף הזה, אתם צריכים למחוק את הפרויקט יחד עם המשאבים. Google Cloud Google Cloud
אם אתם מתכננים לעבור מדריכים נוספים או להמשיך לבדוק את הדוגמה, כדאי לחכות עד שתסיימו כדי לבצע את שלב הניקוי הזה.
ב-Cloud Shell, מריצים את הפקודה הבאה כדי למחוק את משאבי Terraform:
terraform destroy --auto-approve
פתרון בעיות בניקוי
אם מופיעה הודעת שגיאה דומה לThe network resource 'projects/PROJECT_ID/global/networks/example-network' is already being used by 'projects/PROJECT_ID/global/firewalls/example-network-yqjlfql57iydmsuzd4ot6n5v', צריך לבצע את הפעולות הבאות:
מוחקים את הכללים של חומת האש:
gcloud compute firewall-rules list --filter="NETWORK:example-network" --format="table[no-heading](name)" | xargs gcloud --quiet compute firewall-rules deleteמריצים מחדש את הפקודה של Terraform:
terraform destroy --auto-approve
המאמרים הבאים
אפשר לעיין באשכול ובעומס העבודה במסוף Google Cloud כדי לקבל מידע על חלק מההגדרות והמשאבים החשובים של עומס העבודה שפרסתם.
מידע נוסף על הגדרה ושימוש ב-Terraform עם GKE זמין במאמר תמיכה ב-Terraform ל-GKE.
כדאי לנסות את תוכנית הלימודים המפורטת יותר: אפליקציות שניתן להרחיב.
בסקירה הכללית בנושא ניהול אשכולות אפשר לקרוא איך מתחילים לנהל אשכולות בחיים האמיתיים.