בדף הזה מפורטות הוראות להתחלה מהירה ליצירת אשכול ומאגר צמתים, ואז לפריסת אפליקציה לדוגמה באמצעות GKE ב-AWS.
הדף הזה מיועד לאדמינים ב-IT ולמפעילים שרוצים להגדיר, לנטר ולנהל תשתית ענן. מידע נוסף על תפקידים נפוצים ועל משימות לדוגמה שאנחנו מתייחסים אליהן ב Google Cloud תוכן, זמין במאמר תפקידים נפוצים של משתמשים ומשימות ב-GKE.
הפעלה מהירה של האשכול באמצעות Terraform
אפשר להשתמש ב-Terraform כדי ליצור אשכול ומאגר צמתים. לפני שיוצרים את האשכול, סקריפטים של Terraform מכינים גם את ה-VPC של AWS.
מידע נוסף על Terraform בסביבת AWS זמין במאמר בנושא הפניה לאשכול Terraform ובמאמר בנושא הפניה למאגר צמתים של Terraform.
אחרי שיוצרים VPC ואשכול באמצעות Terraform, אפשר לדלג אל פריסת אפליקציה באשכול כדי לפרוס אפליקציה לדוגמה.
הפעלה מהירה של אשכול ללא Terraform
אם אתם מעדיפים להכין את ה-VPC של AWS וליצור מאגר צמתים ומאגר צמתים בלי Terraform, אתם יכולים לפעול לפי ההוראות האלה.
לפני שמתחילים
לפני שיוצרים אשכול, צריך להשלים את הדרישות המוקדמות. בפרט, אתם צריכים לספק את המשאבים הבאים:
- ענן וירטואלי פרטי של AWS שבו האשכול יפעל.
- עד שלושה תתי-רשתות של AWS לשלוש רפליקות של מישור הבקרה. כל אחד מהם צריך להיות באזור זמינות שונה ב-AWS.
- תפקיד ה-IAM ב-AWS ש-GKE ב-AWS מקבל כשמנהלים את האשכול. לשם כך נדרש סט ספציפי של הרשאות IAM.
- מפתחות CMK סימטריים של KMS להצפנת נתונים (etcd) והגדרות של אשכול במצב מנוחה.
- פרופיל המופע של AWS IAM לכל עותק משוכפל של מישור הבקרה. לשם כך נדרש סט ספציפי של הרשאות IAM.
- זוג מפתחות SSH של EC2 (אופציונלי) אם אתם צריכים גישת SSH למופעי EC2 שמריצים כל העתק של מישור הבקרה.
באחריותכם ליצור ולנהל את המשאבים האלה, שאפשר לשתף בין כל האשכולות של GKE ב-AWS. כל משאבי ה-AWS הבסיסיים האחרים בהיקף האשכול מנוהלים על ידי GKE ב-AWS.
קביעת הגדרות ברירת מחדל ל-CLI של gcloud
משתמשים ב-CLI של gcloud כדי להגדיר את הגדרות ברירת המחדל של פרויקט ברירת המחדל ושל האזור Google Cloud .
לפרויקט יש מזהה פרויקט כמזהה ייחודי. כשיוצרים פרויקט, אפשר להשתמש במזהה הפרויקט שנוצר באופן אוטומטי או ליצור מזהה משלכם.
האזור Google Cloud הוא מיקום שממנו ינוהלו האשכולות. לדוגמה, us-west1. פרטים נוספים זמינים במאמר בנושא אזורי ניהול.
כשמגדירים את הגדרות ברירת המחדל האלה, לא צריך לכלול אותן כשמריצים את Google Cloud CLI. אפשר גם לציין הגדרות או לבטל את הגדרות ברירת המחדל באמצעות הדגלים --project ו---location ב-Google Cloud CLI.
כשיוצרים משאבי GKE on AWS אחרי שמגדירים את פרויקט ברירת המחדל ואת המיקום, המשאבים נוצרים באופן אוטומטי בפרויקט ובמיקום האלה.
כדי להגדיר ערכי ברירת מחדל, פועלים לפי השלבים הבאים:
מגדירים את פרויקט ברירת המחדל:
gcloud config set project PROJECT_IDמחליפים את
PROJECT_IDבמזהה הפרויקט.הגדרת מיקום ברירת המחדל לניהול:
gcloud config set container_aws/location GOOGLE_CLOUD_LOCATIONמחליפים את
GOOGLE_CLOUD_LOCATIONבמיקום שלכם, כמוus-west1.
בחירת טווחי CIDR לאשכול
ב-Kubernetes צריך לספק שני טווחי CIDR לאשכול. צריך לבחור את טווחי ה-CIDR האלה כך שלא תהיה חפיפה בינם לבין טווחי ה-CIDR שמשמשים את רשתות המשנה של ה-VPC. הם צריכים להיות גדולים מספיק בשביל הגודל המקסימלי הצפוי של האשכול.
טווח CIDR של כתובות ה-IP של ה-Pod: כשיוצרים
Podחדש, מוקצית לו כתובת IP מהטווח הזה. טווח לדוגמה: 192.168.208.0/20טווח CIDR של כתובת למקרי חירום: כשיוצרים
Serviceחדש, מוקצית לו כתובת IP מהטווח הזה. טווח לדוגמה: 192.168.224.0/20
יצירת אשכול
כדי ליצור אשכול ב-GKE ב-AWS, מריצים את הפקודה הבאה. מידע נוסף על הפקודה הזו, כולל הפרמטרים האופציונליים שלה, זמין בדף העזר בנושא gcloud container aws create.
gcloud container aws clusters create aws-cluster-0 \
--cluster-version 1.34.1-gke.4700 \
--aws-region AWS_REGION \
--fleet-project FLEET_PROJECT_ID \
--vpc-id VPC_ID \
--subnet-ids CONTROL_PLANE_SUBNET_1,CONTROL_PLANE_SUBNET_2,CONTROL_PLANE_SUBNET_3 \
--pod-address-cidr-blocks POD_CIDR_BLOCK \
--service-address-cidr-blocks SERVICE_CIDR_BLOCK \
--role-arn API_ROLE_ARN \
--iam-instance-profile CONTROL_PLANE_PROFILE \
--database-encryption-kms-key-arn DB_KMS_KEY_ARN \
--config-encryption-kms-key-arn CONFIG_KMS_KEY_ARN \
--tags "google:gkemulticloud:cluster=aws-cluster-0"
מחליפים את מה שכתוב בשדות הבאים:
-
AWS_REGION: האזור ב-AWS שבו רוצים ליצור את האשכול. -
FLEET_PROJECT_ID: פרויקט המארח של ה-Fleet שבו האשכול יירשם -
VPC_ID: המזהה של ה-VPC ב-AWS עבור האשכול הזה, שהגדרתם בשלב המקדים יצירת ה-VPC -
CONTROL_PLANE_SUBNET_1,CONTROL_PLANE_SUBNET_2, CONTROL_PLANE_SUBNET_3: מזהי תת-הרשת של שלושת המופעים של מישור הבקרה של האשכול שיצרתם בשלב של התנאי המוקדם יצירת תת-רשתות פרטיות -
POD_CIDR_BLOCK: טווח כתובות ה-CIDR של הפודים באשכול -
SERVICE_CIDR_BLOCK: טווח כתובות CIDR לשירותים של האשכול -
API_ROLE_ARN: מספר ה-ARN של תפקיד ה-IAM בשירות GKE Multi-Cloud שיצרתם בשלב שלפני יצירת תפקיד GKE Multi-Cloud API -
CONTROL_PLANE_PROFILE: שם הפרופיל של מופע IAM שמשויך לאשכול שבחרתם בשלב שלפני כן, Create control plane role. -
DB_KMS_KEY_ARN: שם משאב Amazon (ARN) של אחד ממפתחות AWS KMS שיצרתם בשלב שלפני יצירת מפתח AWS KMS. -
CONFIG_KMS_KEY_ARN: שם משאב Amazon (ARN) של אחד ממפתחות AWS KMS שיצרתם בשלב יצירת מפתח AWS KMS.
אם הפרמטר --tags קיים, הוא מחיל את תג ה-AWS שצוין על כל משאבי ה-AWS הבסיסיים שמנוהלים על ידי GKE ב-AWS. בדוגמה הזו, הצמתים של מישור הבקרה מתויגים בשם האשכול שאליו הם שייכים.
יצירת מאגר צמתים
כדי ליצור מאגר צמתים, משתמשים בפקודה הבאה:
gcloud container aws node-pools create pool-0 \
--cluster aws-cluster-0 \
--node-version 1.34.1-gke.4700 \
--min-nodes 1 \
--max-nodes 5 \
--max-pods-per-node 110 \
--root-volume-size 50 \
--subnet-id NODEPOOL_SUBNET_ID \
--iam-instance-profile NODEPOOL_PROFILE \
--config-encryption-kms-key-arn CONFIG_KMS_KEY_ARN \
--ssh-ec2-key-pair EC2_KEY_PAIR \
--tags "google:gkemulticloud:cluster=aws-cluster-0"
מחליפים את מה שכתוב בשדות הבאים:
-
NODEPOOL_SUBNET_ID: המזהה של אחת מרשתות המשנה הפרטיות שיצרתם בשלב שלפני זה, יצירת רשתות משנה פרטיות -
NODEPOOL_PROFILE: השם של פרופיל מכונת ה-IAM למכונות EC2 במאגר הצמתים שבחרתם בשלב שלפני הדרישה המוקדמת יצירת תפקיד IAM למאגר צמתים -
CONFIG_KMS_KEY_ARN: שם משאב Amazon (ARN) של מפתח AWS KMS להצפנת נתוני משתמשים -
EC2_KEY_PAIR(אופציונלי): השם של זוג מפתחות EC2 שנוצר לגישת SSH (אופציונלי) שיצרתם בשלב המקדים יצירת זוג מפתחות SSH
הצגת הסטטוס של האשכול
אחרי שיוצרים אשכול ומאגר צמתים, אפשר לראות את הסטטוס של האשכול באמצעות Google Cloud CLI או במסוף Google Cloud . כדי לראות את סטטוס האשכול, בוחרים אם משתמשים ב-Google Cloud CLI או במסוף Google Cloud ופועלים לפי השלבים הבאים:
gcloud
משתמשים בפקודה gcloud container aws clusters describe כדי לקבל פרטים על האשכול:
gcloud container aws clusters describe CLUSTER_NAME \
--location GOOGLE_CLOUD_LOCATION
מחליפים את מה שכתוב בשדות הבאים:
-
CLUSTER_NAME: השם של האשכול -
GOOGLE_CLOUD_LOCATION: השם של המיקום שממנו מנוהל האשכול Google Cloud
מסוף Google Cloud
במסוף Google Cloud , נכנסים לדף Google Kubernetes Engine clusters overview.
הקלאסטרים מופיעים לפי השם והמיקום שלהם.
לוחצים על שם האשכול. מופיעה חלונית עם מידע על האשכול, כולל הסטטוס והתכונות המופעלות שלו.
קבלת פרטי כניסה לאימות עבור האשכול
אחרי שיוצרים את האשכול, צריך לקבל פרטי אימות כדי ליצור אינטראקציה עם האשכול:
gcloud container aws clusters get-credentials aws-cluster-0
הפקודה הזו מגדירה את kubectl כדי לגשת לאשכול שיצרתם באמצעות שער החיבור. כדי להשתמש בשער Connect, צריך לפחות מאגר צמתים אחד, כי הוא מסתמך על סוכן Connect, שפועל כפריסה באשכול.
פריסת אפליקציה באשכול
אחרי שיוצרים אשכול, אפשר לפרוס בו אפליקציה מבוססת-קונטיינר. במדריך למתחילים הזה, אפשר לפרוס את אפליקציית האינטרנט לדוגמה שלנו, hello-app.
משתמשים באובייקטים של Kubernetes כדי ליצור ולנהל את המשאבים של האשכול. משתמשים באובייקט Deployment כדי לפרוס אפליקציות חסרות מצב (stateless) כמו שרתי אינטרנט. אובייקטים של Service מגדירים כללים ומאזני עומסים לגישה לאפליקציה שלכם מהאינטרנט.
יצירת הפריסה
כדי להריץ את hello-app באשכול, צריך לפרוס את האפליקציה על ידי הרצת הפקודה הבאה:
kubectl create deployment hello-server --image=us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
פקודת Kubernetes הזו, kubectl create deployment, יוצרת פריסה בשם hello-server. ה-Pod של הפריסה מריץ את קובץ האימג' של הקונטיינר hello-app.
בפקודה הזו:
-
--imageמציין קובץ אימג' של קונטיינר לפריסה. במקרה הזה, הפקודה מושכת את תמונת הדוגמה ממאגר Artifact Registry,us-docker.pkg.dev/google-samples/containers/gke/hello-app. הערך:1.0מציין את גרסת התמונה הספציפית שיש לשלוף. אם לא מציינים גרסה, נעשה שימוש בתמונה שתויגה באמצעותlatest.
חשיפת הפריסה
אחרי פריסת האפליקציה, צריך לחשוף אותה לאינטרנט כדי שהמשתמשים יוכלו לגשת אליה. אפשר לחשוף את האפליקציה על ידי יצירת Service, שהוא משאב Kubernetes שחושף את האפליקציה לתנועה חיצונית.
כדי לחשוף את האפליקציה, מריצים את הפקודה הבאה של kubectl expose:
kubectl expose deployment hello-server --type LoadBalancer --port 80 --target-port 8080
העברת הסימון --type LoadBalancer יוצרת איזון עומסים של AWS עבור הקונטיינר. הדגל --port מאתחל את היציאה הציבורית 80 לאינטרנט, והדגל --target-port מנתב את התנועה ליציאה 8080 של האפליקציה.
מאזני עומסים מחויבים בהתאם לתמחור של מאזני עומסים ב-AWS.
בדיקה והצגה של האפליקציה
בודקים את ה-Pods הפעילים באמצעות
kubectl get pods:kubectl get pods
אמור להופיע Pod אחד
hello-serverשפועל באשכול.בודקים את השירות
hello-serverבאמצעות הפקודהkubectl get service:kubectl get service hello-server
מהפלט של הפקודה הזו, מעתיקים את כתובת ה-IP החיצונית של השירות מהעמודה
EXTERNAL-IP.כדי לראות את האפליקציה בדפדפן האינטרנט, משתמשים בכתובת ה-IP החיצונית עם היציאה שנחשפת:
http://EXTERNAL-IP
הרגע פרסת אפליקציית אינטרנט בקונטיינר ב-GKE ב-AWS.
הסרת המשאבים
מוחקים את השירות והפריסה של האפליקציה:
kubectl delete service hello-server kubectl delete deployment hello-server
כדי למחוק את מאגר הצמתים, מריצים את הפקודה
gcloud container aws node-pools delete:gcloud container aws node-pools delete pool-0 --cluster aws-cluster-0
כדי למחוק את האשכול, מריצים את הפקודה
gcloud container aws clusters delete:gcloud container aws clusters delete aws-cluster-0