פריסת אפליקציה ב-GKE ב-Azure
בדף הזה מוסבר איך ליצור אשכול ומאגר צמתים, ואז לפרוס אפליקציה לדוגמה באמצעות GKE ב-Azure.
תמיכה ב-Terraform
אם אתם מכירים את Terraform, אתם יכולים להשתמש בסקריפטים של Terraform שזמינים ב-GitHub כדי לבצע אוטומציה של הדרישות המוקדמות וליצור אשכול.
לפני שמתחילים
לפני שיוצרים אשכול, צריך להשלים את הדרישות המוקדמות. בפרט, אתם צריכים לספק את המשאבים הבאים:
- רשת וירטואלית של Azure שבה האשכול יפעל.
- רשת משנה עבור רפליקות מישור הבקרה של Kubernetes.
- הקצאות תפקידים ב-Azure שיעניקו ל-GKE ב-Azure גישה לסביבת Azure באמצעות חשבון ראשי לשירות.
- משאב AzureClient שמשמש את GKE ב-Azure לאימות לשירותי Azure ולניהול משאבים בחשבון Azure שלכם.
- זוג מפתחות SSH לגישה למכונות וירטואליות של Azure באשכול.
באחריותכם ליצור ולנהל את המשאבים האלה, שאפשר לשתף בין כל האשכולות. כל משאבי Azure הבסיסיים האחרים של האשכול מנוהלים על ידי GKE ב-Azure.
קביעת הגדרות ברירת מחדל ל-CLI של gcloud
משתמשים ב-CLI של gcloud כדי להגדיר את הגדרות ברירת המחדל לפרויקט ול Google Cloud אזור ברירת המחדל.
לפרויקט יש מזהה פרויקט כמזהה ייחודי. כשיוצרים פרויקט, אפשר להשתמש במזהה הפרויקט שנוצר באופן אוטומטי או ליצור מזהה משלכם.
האזור Google Cloud הוא מיקום שממנו ינוהלו האשכולות. לדוגמה, us-west1. פרטים נוספים מופיעים במאמר בנושא אזורי ניהול.
כשמגדירים את הגדרות ברירת המחדל האלה, לא צריך לכלול אותן כשמריצים את Google Cloud CLI. אפשר גם לציין הגדרות או לבטל את הגדרות ברירת המחדל באמצעות הדגלים --project ו---location ב-Google Cloud CLI.
כשיוצרים משאבי GKE ב-Azure אחרי שמגדירים את פרויקט ברירת המחדל ואת המיקום, המשאבים נוצרים באופן אוטומטי בפרויקט ובמיקום האלה.
כדי להגדיר ערכי ברירת מחדל, פועלים לפי השלבים הבאים:
מגדירים את פרויקט ברירת המחדל:
gcloud config set project PROJECT_IDמחליפים את
PROJECT_IDבמזהה הפרויקט.הגדרת מיקום ברירת המחדל לניהול:
gcloud config set container_azure/location GOOGLE_CLOUD_LOCATIONמחליפים את
GOOGLE_CLOUD_LOCATIONבמיקום שלכם, למשלus-west1.
בחירת מזהי משאבים של Azure לאשכול
בחירת מזהה של קבוצת משאבים
כדי לשמור את קבוצת המשאבים של האשכול במשתנה סביבה, מריצים את הפקודה הבאה:
CLUSTER_RESOURCE_GROUP_ID=$(az group show --query id --output tsv \
--resource-group=CLUSTER_RESOURCE_GROUP_NAME)
מחליפים את CLUSTER_RESOURCE_GROUP_NAME בשם של קבוצת המשאבים שבה רוצים להקצות את משאבי האשכול, שהגדרתם בשלב הקודם של יצירת קבוצת משאבים ב-Azure.
בחירת מזהה של רשת וירטואלית
מריצים את הפקודה הבאה כדי לשמור את מזהה ה-VNet של האשכול במשתנה סביבה:
VNET_ID=$(az network vnet show --query id --output tsv \
--resource-group=VNET_RESOURCE_GROUP_NAME \
--name=VNET_NAME)
מחליפים את מה שכתוב בשדות הבאים:
-
VNET_RESOURCE_GROUP_NAMEעם שם קבוצת המשאבים שמכילה את הרשת הווירטואלית, כפי שהוגדר בשלב שלפני כן יצירת רשת וירטואלית ב-Azure. -
VNET_NAMEעם השם של הרשת הווירטואלית, כפי שהוגדר בשלב הדרישות המוקדמות יצירת רשת וירטואלית ב-Azure.
בחירת מזהה רשת משנה
מריצים את הפקודה הבאה כדי לשמור את מזהה רשת המשנה של האשכול במשתנה סביבה:
SUBNET_ID=$(az network vnet subnet show --query id --output tsv \
--resource-group VNET_RESOURCE_GROUP_NAME \
--vnet-name VNET_NAME \
--name SUBNET_NAME)
מחליפים את:
-
VNET_RESOURCE_GROUP_NAMEעם שם של קבוצת משאבים קיימת שכוללת את הרשת הווירטואלית. זה יכול להיות השם של קבוצת המשאבים שהגדרתם במאמר יצירת רשת וירטואלית ב-Azure. -
VNET_NAMEבשם של הרשת הווירטואלית. זה יכול להיות השם של הרשת הווירטואלית שהגדרתם במאמר יצירת רשת וירטואלית ב-Azure. -
SUBNET_NAMEעם השם של תת-הרשת, לדוגמה,default.
בחירת טווחי CIDR לאשכול
כדי להגדיר את האשכול ב-Kubernetes, צריך לספק שני טווחי CIDR. צריך לבחור את טווחי ה-CIDR האלה כך שלא תהיה חפיפה בינם לבין טווחי ה-CIDR שמשמשים את רשתות המשנה של ה-VPC. הם צריכים להיות גדולים מספיק בשביל הגודל המקסימלי הצפוי של האשכול.
טווח CIDR של כתובות ה-IP של ה-Pod: כשיוצרים
Podחדש, מוקצית לו כתובת IP מהטווח הזה. טווח לדוגמה: 192.168.208.0/20טווח CIDR של כתובת השירות: כשיוצרים שירות חדש, מוקצית לו כתובת IP מהטווח הזה. טווח לדוגמה: 192.168.224.0/20
יצירת אשכול
משתמשים בפקודה הבאה כדי ליצור אשכול ב-GKE ב-Azure.
gcloud container azure clusters create azure-cluster-0 \
--cluster-version 1.34.1-gke.4700 \
--azure-region AZURE_REGION \
--fleet-project FLEET_PROJECT_ID \
--client CLIENT_NAME \
--resource-group-id $CLUSTER_RESOURCE_GROUP_ID \
--vnet-id $VNET_ID \
--subnet-id $SUBNET_ID \
--pod-address-cidr-blocks POD_CIDR_BLOCK \
--service-address-cidr-blocks SERVICE_CIDR_BLOCK \
--ssh-public-key "SSH_PUBLIC_KEY" \
--tags "google:gkemulticloud:cluster=azure-cluster-0"
מחליפים את:
-
AZURE_REGION: אזור נתמך ב-Azure שמשויך לאזור Google Cloud שלכם -
FLEET_PROJECT_IDעם מזהה פרויקט המארח של ה-Fleet שבו האשכול יירשם. -
CLIENT_NAME: השם של AzureClient. -
POD_CIDR_BLOCK: טווח כתובות ה-Pod של האשכול -
SERVICE_CIDR_BLOCK: טווח כתובות השירות של האשכול -
SSH_PUBLIC_KEYעם הטקסט של מפתח ה-SSH הציבורי שנוצר בשלב הקודם של יצירת זוג מפתחות SSH. אם שמרתם את המפתח הציבורי במשתנה סביבה בשלב הזה, אתם יכולים להשתמש ב-${SSH_PUBLIC_KEY}.
למידע נוסף ולפרמטרים אופציונליים, אפשר לעיין בדף העזר בנושא gcloud container azure clusters create.
יצירת מאגר צמתים
יוצרים מאגר צמתים באמצעות Google Cloud CLI:
gcloud container azure node-pools create pool-0 \
--cluster azure-cluster-0 \
--node-version 1.34.1-gke.4700 \
--vm-size Standard_B2s \
--max-pods-per-node 110 \
--min-nodes 1 \
--max-nodes 5 \
--ssh-public-key "SSH_PUBLIC_KEY" \
--subnet-id $SUBNET_ID \
--tags "google:gkemulticloud:cluster=azure-cluster-0"
מחליפים את SSH_PUBLIC_KEY בטקסט של מפתח ה-SSH הציבורי, כפי שנוצר בשלב המקדים יצירת זוג מפתחות SSH. אם שמרתם את המפתח הציבורי במשתנה סביבה, תוכלו להשתמש ב-${SSH_PUBLIC_KEY}.
הצגת הסטטוס של האשכול
אחרי שיוצרים אשכול ומאגר צמתים, אפשר לראות את הסטטוס של האשכול באמצעות Google Cloud CLI או במסוף Google Cloud . כדי לראות את סטטוס האשכול, בוחרים אם משתמשים ב-Google Cloud CLI או במסוף Google Cloud ופועלים לפי השלבים הבאים:
gcloud
משתמשים בפקודה gcloud container azure clusters describe כדי לקבל פרטים על האשכול:
gcloud container azure 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 azure clusters get-credentials azure-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 יוצרת מאזן עומסים של Azure עבור המאגר. הדגל --port מאתחל את יציאה 80 הציבורית לאינטרנט, והדגל --target-port מנתב את התנועה ליציאה 8080 של האפליקציה.
החיוב על מאזני עומסים מתבצע בהתאם לתמחור של מאזן העומסים של Azure.
בדיקה והצגה של האפליקציה
בודקים את ה-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 ב-Azure.
הסרת המשאבים
מוחקים את השירות והפריסה של האפליקציה:
kubectl delete service hello-server kubectl delete deployment hello-server
כדי למחוק את מאגר הצמתים, מריצים את הפקודה
gcloud container azure node-pools delete:gcloud container azure node-pools delete pool-0 --cluster azure-cluster-0
כדי למחוק את האשכול, מריצים את הפקודה
gcloud container azure clusters delete:gcloud container azure clusters delete azure-cluster-0