פריסת אפליקציה ב-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 אחרי שמגדירים את פרויקט ברירת המחדל ואת המיקום, המשאבים נוצרים באופן אוטומטי בפרויקט ובמיקום האלה.

כדי להגדיר ערכי ברירת מחדל, פועלים לפי השלבים הבאים:

  1. מגדירים את פרויקט ברירת המחדל:

    gcloud config set project PROJECT_ID
    

    מחליפים את PROJECT_ID במזהה הפרויקט.

  2. הגדרת מיקום ברירת המחדל לניהול:

    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)

מחליפים את מה שכתוב בשדות הבאים:

בחירת מזהה רשת משנה

מריצים את הפקודה הבאה כדי לשמור את מזהה רשת המשנה של האשכול במשתנה סביבה:

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"

מחליפים את:

למידע נוסף ולפרמטרים אופציונליים, אפשר לעיין בדף העזר בנושא 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

  1. במסוף Google Cloud , נכנסים לדף Google Kubernetes Engine clusters overview.

    מעבר לאשכולות GKE

  2. האשכולות מוצגים לפי השם והמיקום שלהם.

  3. לוחצים על שם האשכול. מופיעה חלונית עם מידע על האשכול, כולל הסטטוס והתכונות המופעלות שלו.

קבלת פרטי אימות לאשכול

אחרי שיוצרים את האשכול, צריך לקבל פרטי אימות כדי ליצור אינטראקציה עם האשכול:

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.

בדיקה והצגה של האפליקציה

  1. בודקים את ה-Pods הפעילים באמצעות הפקודה kubectl get pods:

    kubectl get pods
    

    אמור להיות hello-server Pod אחד שפועל באשכול.

  2. בודקים את hello-server השירות באמצעות kubectl get service:

    kubectl get service hello-server
    

    מהפלט של הפקודה הזו, מעתיקים את כתובת ה-IP החיצונית של השירות מהעמודה EXTERNAL-IP.

  3. כדי לראות את האפליקציה בדפדפן האינטרנט, משתמשים בכתובת ה-IP החיצונית עם היציאה שנחשפה:

    http://EXTERNAL-IP
    

הרגע פרסתם אפליקציית אינטרנט בקונטיינר ב-GKE ב-Azure.

הסרת המשאבים

  1. מוחקים את השירות והפריסה של האפליקציה:

    kubectl delete service hello-server
    kubectl delete deployment hello-server
    
  2. כדי למחוק את מאגר הצמתים, מריצים את הפקודה gcloud container azure node-pools delete:

    gcloud container azure node-pools delete pool-0 --cluster azure-cluster-0
    
  3. כדי למחוק את האשכול, מריצים את הפקודה gcloud container azure clusters delete:

    gcloud container azure clusters delete azure-cluster-0
    

המאמרים הבאים