בדף הזה מופיעות הוראות למתחילים ליצירת אשכול ומאגר צמתים, ואז לפריסת אפליקציה לדוגמה באמצעות GKE ב-AWS.
הדף הזה מיועד לאדמינים ב-IT ולמפעילים שרוצים להגדיר, לנטר ולנהל תשתית ענן. מידע נוסף על תפקידים נפוצים ועל משימות לדוגמה שאנחנו מתייחסים אליהן בתוכן זמין במאמר תפקידים נפוצים של משתמשים ב-GKE ומשימות. Google Cloud
מדריך למתחילים לאשכול באמצעות Terraform
אפשר להשתמש ב-Terraform כדי ליצור אשכול ומאגר צמתים. לפני שיוצרים את האשכול, סקריפטים של Terraform מכינים גם את ה-VPC של AWS.
מידע נוסף על Terraform בסביבת AWS זמין בהפניה לאשכול Terraform ובהפניה למאגר צמתים של Terraform.
אחרי שיוצרים VPC ואשכול באמצעות Terraform, אפשר לדלג אל פריסת אפליקציה באשכול כדי לפרוס אפליקציה לדוגמה.
הפעלה מהירה של אשכול ללא Terraform
אם אתם מעדיפים להכין את ה-VPC של AWS וליצור מאגר צמתים ומאגר צמתים בלי Terraform, אתם יכולים לפעול לפי ההוראות האלה.
לפני שמתחילים
לפני שיוצרים אשכול, צריך להשלים את הדרישות המוקדמות. בפרט, אתם צריכים לספק את המשאבים הבאים:
- AWS VPC שבו האשכול יפעל.
- עד שלושה תתי-רשתות של 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 on 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 שמשויך לאשכול שבחרתם בשלב הקודם של יצירת תפקיד במישור הבקרה. -
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
אמור להיות
hello-serverPod אחד שפועל באשכול.בודקים את
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