הפעלת Django ב-Google Kubernetes Engine

אפליקציות Django שפועלות ב-GKE משנות את קנה המידה שלהן באופן דינמי בהתאם לתנועה.

במדריך הזה אנחנו יוצאים מנקודת הנחה שאתם מכירים את פיתוח האתרים של Django. אם אתם חדשים בפיתוח Django, מומלץ לעבור על כתיבת אפליקציית Django הראשונה לפני שתמשיכו.

במדריך הזה נדגים את Django באופן ספציפי, אבל אפשר להשתמש בתהליך הפריסה הזה עם מסגרות אחרות שמבוססות על Django, כמו Wagtail ו-Django CMS.

במדריך הזה משתמשים ב-Django 5, שמחייב לפחות Python 3.10.

צריך גם להתקין את Docker.

מטרות

במדריך הזה תלמדו:

  • יצירה וחיבור של מסד נתונים ב-Cloud SQL.
  • יצירה ושימוש בערכי סודות של Kubernetes.
  • פריסת אפליקציית Django ב-Google Kubernetes Engine.

עלויות

במסמך הזה משתמשים ברכיבים הבאים של Google Cloud, והשימוש בהם כרוך בתשלום:

כדי להעריך את ההוצאות בהתאם לתחזית השימוש שלכם, אתם יכולים להיעזר במחשבון העלויות.

משתמשים חדשים של Google Cloud ? יכול להיות שאתם זכאים לתקופת ניסיון בחינם.

לפני שמתחילים

  1. נכנסים לחשבון Google Cloud . אם אתם משתמשים חדשים ב- Google Cloud, צרו חשבון כדי שתוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the Cloud SQL, GKE and Compute Engine APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  5. מתקינים את ה-CLI של gcloud.

  6. אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.

  7. כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:

    gcloud init
  8. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  9. Verify that billing is enabled for your Google Cloud project.

  10. Enable the Cloud SQL, GKE and Compute Engine APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  11. מתקינים את ה-CLI של gcloud.

  12. אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.

  13. כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:

    gcloud init

הכנת הסביבה

שכפול של אפליקציה לדוגמה

הקוד של אפליקציית Django לדוגמה נמצא במאגר GoogleCloudPlatform/python-docs-samples ב-GitHub.

  1. אפשר להוריד את הדוגמה כקובץ ZIP ולחלץ אותה, או לשכפל את המאגר למכונה המקומית:

    git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
    
  2. עוברים לספרייה שמכילה את הקוד לדוגמה:

    ‫Linux/macOS

    cd python-docs-samples/kubernetes_engine/django_tutorial
    

    Windows

    cd python-docs-samples\kubernetes_engine\django_tutorial
    

אישור הגדרת Python

המדריך הזה מסתמך על Python להרצת האפליקציה לדוגמה במחשב שלכם. כדי להשתמש בקוד לדוגמה צריך גם להתקין יחסי תלות

פרטים נוספים זמינים במדריך לסביבת פיתוח בשפת Python.

  1. מוודאים שגרסת Python היא 3.10 לפחות.

     python -V
    

    הגרסה שמופיעה צריכה להיות Python 3.10.0 ומעלה.

  2. יוצרים סביבה וירטואלית של Python ומתקינים את יחסי התלות:

    ‫Linux/macOS

    python -m venv venv
    source venv/bin/activate
    pip install --upgrade pip
    pip install -r requirements.txt
    

    Windows

    python -m venv venv
    venv\scripts\activate
    pip install --upgrade pip
    pip install -r requirements.txt
    

הורדת Cloud SQL Auth Proxy כדי להתחבר ל-Cloud SQL מהמחשב המקומי

כשפורסים את האפליקציה, היא משתמשת בשרת ה-proxy ל-Cloud SQL Auth שמוטמע בסביבת Google Kubernetes Engine כדי לתקשר עם מופע Cloud SQL. עם זאת, כדי לבדוק את האפליקציה באופן מקומי, צריך להתקין ולהשתמש בעותק מקומי של ה-proxy בסביבת הפיתוח. פרטים נוספים זמינים במדריך לשרת proxy ל-Cloud SQL Auth.

שרת proxy ל-Cloud SQL Auth משתמש ב-Cloud SQL API כדי ליצור אינטראקציה עם מופע SQL. כדי לעשות את זה, צריך לאמת את האפליקציה באמצעות ה-CLI של gcloud.

  1. אימות וקבלת פרטי כניסה ל-API:

    gcloud auth application-default login
    
  2. מורידים ומתקינים את שרת ה-proxy ל-Cloud SQL Auth במחשב המקומי.

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

    אם מריצים את הפקודה ב-Linux או ב-Mac, אפשר למצוא את המידע הזה באמצעות הפקודה הבאה:

      uname -a
      

    ‏Linux‏ 64 סיביות

    1. מורידים את שרת ה-proxy ל-Cloud SQL Auth:
      curl -o cloud-sql-proxy https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.22.1/cloud-sql-proxy.linux.amd64
    2. הופכים את שרת ה-proxy ל-Cloud SQL Auth לקובץ הפעלה:
      chmod +x cloud-sql-proxy

    ‏Linux‏ 32 סיביות

    1. מורידים את שרת ה-proxy ל-Cloud SQL Auth:
      curl -o cloud-sql-proxy https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.22.1/cloud-sql-proxy.linux.386
    2. אם הפקודה curl לא נמצאה, מריצים את הפקודה sudo apt install curl וחוזרים על פקודת ההורדה.
    3. הופכים את שרת ה-proxy ל-Cloud SQL Auth לקובץ הפעלה:
      chmod +x cloud-sql-proxy

    macOS‏ 64 סיביות

    1. מורידים את שרת ה-proxy ל-Cloud SQL Auth:
      curl -o cloud-sql-proxy https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.22.1/cloud-sql-proxy.darwin.amd64
    2. הופכים את שרת ה-proxy ל-Cloud SQL Auth לקובץ הפעלה:
      chmod +x cloud-sql-proxy

    Mac M1

    1. מורידים את שרת ה-proxy ל-Cloud SQL Auth:
        curl -o cloud-sql-proxy https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.22.1/cloud-sql-proxy.darwin.arm64
        
    2. הופכים את שרת ה-proxy ל-Cloud SQL Auth לקובץ הפעלה:
        chmod +x cloud-sql-proxy
        

    ‏Windows‏ 64 סיביות

    לוחצים לחיצה ימנית על https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.22.1/cloud-sql-proxy.x64.exe ובוחרים באפשרות שמירת קישור בשם כדי להוריד את שרת ה-proxy ל-Cloud SQL Auth. משנים את שם הקובץ ל-cloud-sql-proxy.exe.

    ‏Windows‏ 32 סיביות

    לוחצים לחיצה ימנית על https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.22.1/cloud-sql-proxy.x86.exe ובוחרים באפשרות שמירת קישור בשם כדי להוריד את שרת ה-proxy ל-Cloud SQL Auth. משנים את שם הקובץ ל-cloud-sql-proxy.exe.

    קובץ אימג' של Docker לשרת proxy ל-Cloud SQL Auth

    לשרת ה-proxy ל-Cloud SQL Auth יש תמונות קונטיינר שונות, כמו distroless, alpine ו-buster. קובץ האימג' של קונטיינר ברירת המחדל של שרת proxy ל-Cloud SQL Auth משתמש ב-distroless, שלא מכיל מעטפת. אם אתם צריכים מעטפת או כלים קשורים, אתם יכולים להוריד תמונה שמבוססת על alpine או על buster. מידע נוסף זמין במאמר תמונות קונטיינר של Cloud SQL Auth Proxy.

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

    docker pull gcr.io/cloud-sql-connectors/cloud-sql-proxy:2.22.1
    

    מערכת הפעלה אחרת

    במערכות הפעלה אחרות שלא נכללות כאן, אפשר לקמפל את Cloud SQL Auth Proxy מהמקור.

    אתם יכולים להעביר את ההורדה למיקום נפוץ, כמו מיקום בPATH או בספריית הבית. אם תבחרו לעשות את זה, כשתפעילו את שרת ה-proxy ל-Cloud SQL Auth בהמשך המדריך, תצטרכו לציין את המיקום שבחרתם כשמשתמשים בפקודות cloud-sql-proxy.

יצירת שירותי גיבוי

במדריך הזה נעשה שימוש בכמה Google Cloud שירותים כדי לספק את מסד הנתונים, אחסון המדיה ואחסון הסודות שתומכים בפרויקט Django שנפרס. השירותים האלה פרוסים באזור ספציפי. כדי לשפר את היעילות בין השירותים, מומלץ לפרוס את כל השירותים באותו אזור. מידע נוסף על האזור הקרוב ביותר אליכם זמין במאמר מוצרים שזמינים לפי אזור.

הגדרת מכונה של Cloud SQL ל-PostgreSQL

‫Django תומך רשמית במספר מסדי נתונים רלציוניים, אבל התמיכה הכי טובה היא ב-PostgreSQL. ‫Cloud SQL תומך ב-PostgreSQL, ולכן במדריך הזה נבחר להשתמש בסוג הזה של מסד נתונים.

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

  1. יוצרים את מכונת PostgreSQL:

    המסוף

    1. נכנסים לדף Cloud SQL Instances במסוף Google Cloud .

      כניסה לדף Cloud SQL Instances

    2. לוחצים על Create Instance.

    3. לוחצים על Choose PostgreSQL (בחירת PostgreSQL).

    4. ב-SQL Edition, בוחרים באפשרות Enterprise.

    5. בקטע Edition Preset (הגדרות קבועות מראש של מהדורה), בוחרים באפשרות Sandbox (ארגז חול).

    6. בשדה Instance ID (מזהה המופע), מזינים את הערך INSTANCE_NAME.

    7. מזינים סיסמה למשתמש postgres.

    8. משאירים את ערכי ברירת המחדל בשאר השדות.

    9. לוחצים על Create Instance.

    לוקח כמה דקות עד שהמכונה מוכנה לשימוש.

    gcloud

    • יוצרים את מכונת PostgreSQL:

      gcloud sql instances create INSTANCE_NAME \
          --project PROJECT_ID \
          --database-version POSTGRES_16 \
          --tier db-n1-standard-2 \
          --region REGION
      

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

    • INSTANCE_NAME: שם המכונה של Cloud SQL
    • PROJECT_ID: מזהה הפרויקט Google Cloud
    • REGION: Google Cloud האזור

    יצירת המכונה והכנתה לשימוש נמשכות כמה דקות.

  2. במכונה שנוצרה, יוצרים מסד נתונים:

    המסוף

    1. בדף של האינסטנס, עוברים לכרטיסייה Databases (מסדי נתונים).
    2. לוחצים על יצירת מסד נתונים.
    3. בתיבת הדו-שיח Database Name, מזינים DATABASE_NAME.
    4. לוחצים על יצירה.

    gcloud

    • יוצרים את מסד הנתונים במופע שנוצר לאחרונה:

      gcloud sql databases create DATABASE_NAME \
          --instance INSTANCE_NAME
      

      מחליפים את DATABASE_NAME בשם של מסד הנתונים בתוך המכונה.

  3. יוצרים משתמש במסד הנתונים:

    המסוף

    1. בדף של המופע, עוברים לכרטיסייה משתמשים.
    2. לוחצים על הוספת חשבון משתמש.
    3. בתיבת הדו-שיח בחירת שיטת האימות בקטע 'אימות מובנה':
    4. מזינים את שם המשתמש DATABASE_USERNAME.
    5. מזינים את הסיסמה DATABASE_PASSWORD
    6. לוחצים על הוספה.

    gcloud

    • יוצרים את המשתמש במכונה שנוצרה לאחרונה:

      gcloud sql users create DATABASE_USERNAME \
          --instance INSTANCE_NAME \
          --password DATABASE_PASSWORD
      

      מחליפים את PASSWORD בסיסמה מאובטחת.

יצירה של חשבון שירות

הפרוקסי דורש חשבון שירות עם הרשאות עריכה עבור מכונת Cloud SQL. מידע נוסף על חשבונות שירות זמין במאמר Google Cloud סקירה כללית על אימות.

  1. נכנסים לדף Service accounts במסוף Google Cloud .

    כניסה לדף Service accounts

  2. בוחרים את הפרויקט שמכיל את מופע Cloud SQL.
  3. לוחצים על יצירת חשבון שירות.
  4. בשדה Service account name, מזינים שם תיאורי לחשבון השירות.
  5. משנים את מזהה חשבון השירות לערך ייחודי וקל לזיהוי, ואז לוחצים על יצירה והמשך.
  6. לוחצים על השדה Select a role (בחירת תפקיד) ובוחרים באחד מהתפקידים הבאים:
    • Cloud SQL > Cloud SQL Client
    • Cloud SQL > Cloud SQL Editor
    • Cloud SQL > Cloud SQL Admin
  7. לוחצים על Done כדי לסיים ליצור את חשבון השירות.
  8. לוחצים על תפריט הפעולות של חשבון השירות החדש ובוחרים באפשרות ניהול מפתחות.
  9. לוחצים על התפריט הנפתח Add key ואז על Create new key.
  10. מוודאים שסוג המפתח הוא JSON ולוחצים על Create.

    קובץ המפתח הפרטי יורד למחשב שלכם. אפשר להעביר אותו למיקום אחר. חשוב לשמור על אבטחת קובץ המפתח.

הגדרת מסד הנתונים

משתמשים בפקודות הבאות כדי להגדיר משתני סביבה לגישה למסד הנתונים. משתני הסביבה האלה משמשים לבדיקות מקומיות.

‫Linux/MacOS

export DATABASE_NAME=DATABASE_NAME
export DATABASE_USER=DATABASE_USERNAME
export DATABASE_PASSWORD=DATABASE_PASSWORD

Windows

set DATABASE_USER=DATABASE_USERNAME
set DATABASE_PASSWORD=DATABASE_PASSWORD

הגדרת GKE

  1. האפליקציה הזו מיוצגת בהגדרה אחת של Kubernetes שנקראת polls. ב-polls.yaml מחליפים את <your-project-id> במזהה הפרויקט (PROJECT_ID) ב-Google Cloud .

  2. מריצים את הפקודה הבאה ורושמים את הערך של connectionName:

    gcloud sql instances describe INSTANCE_NAME --format "value(connectionName)"
    
  3. בקובץ polls.yaml, מחליפים את <your-cloudsql-connection-string> בערך connectionName.

הפעלת האפליקציה במחשב המקומי

אחרי שמגדירים את שירותי הגיבוי, אפשר להריץ את האפליקציה במחשב. ההגדרה הזו מאפשרת פיתוח מקומי, יצירת משתמש על והחלת העברות של מסד הנתונים.

  1. במסוף נפרד, מפעילים את שרת ה-proxy ל-Cloud SQL Auth:

    ‫Linux/macOS

    ./cloud-sql-proxy PROJECT_ID:REGION:INSTANCE_NAME
    

    Windows

    cloud-sql-proxy.exe PROJECT_ID:REGION:INSTANCE_NAME
    

    בשלב הזה נוצר חיבור מהמחשב המקומי למכונת Cloud SQL למטרות בדיקה מקומית. חשוב להשאיר את שרת ה-proxy ל-Cloud SQL Auth פועל כל הזמן שבודקים את האפליקציה באופן מקומי. הפעלת התהליך הזה בטרמינל נפרד מאפשרת לכם להמשיך לעבוד בזמן שהתהליך הזה פועל.

  2. בטרמינל המקורי, מגדירים את מזהה הפרויקט באופן מקומי:

    ‫Linux/macOS

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID
    

    Windows

    set GOOGLE_CLOUD_PROJECT=PROJECT_ID
    
  3. מריצים את ההעברות של Django כדי להגדיר את המודלים והנכסים:

    python manage.py makemigrations
    python manage.py makemigrations polls
    python manage.py migrate
    python manage.py collectstatic
    
  4. מפעילים את שרת האינטרנט של Django:

    python manage.py runserver 8080
    
  5. בדפדפן, עוברים אל http://localhost:8080.

    אם אתם ב-Cloud Shell, לוחצים על הלחצן Web Preview (תצוגה מקדימה של אתר) ובוחרים באפשרות Preview on port 8080 (תצוגה מקדימה ביציאה 8080).

    בדף מוצג הטקסט: "Hello, world. אתה נמצא במדד הסקרים". שרת האינטרנט של Django שפועל במחשב שלכם מספק את דפי האפליקציה לדוגמה.

  6. מקישים על Ctrl/Cmd+C כדי לעצור את שרת האינטרנט המקומי.

שימוש במסוף Admin של Django

כדי להתחבר למסוף Admin של Django, צריך ליצור משתמש על. מכיוון שיש לכם חיבור למסד הנתונים שאפשר לגשת אליו באופן מקומי, אתם יכולים להריץ פקודות ניהול:

  1. יוצרים משתמש על. תוצג בקשה להזין שם משתמש, כתובת אימייל וסיסמה.

    python manage.py createsuperuser
    
  2. מפעילים שרת אינטרנט מקומי:

    python manage.py runserver
    
  3. בדפדפן, עוברים לכתובת http://localhost:8000/admin.

  4. מתחברים לאתר האדמין באמצעות שם המשתמש והסיסמה שבהם השתמשתם כשביצעתם את הפקודה createsuperuser.

פריסת האפליקציה ב-GKE

כשהאפליקציה נפרסת ב- Google Cloud, היא משתמשת בשרת Gunicorn. ‫Gunicorn לא מציג תוכן סטטי, ולכן האפליקציה משתמשת ב-Cloud Storage כדי להציג תוכן סטטי.

איסוף והעלאה של משאבים סטטיים

  1. יוצרים קטגוריה של Cloud Storage והופכים אותה לקריאה באופן ציבורי.

    gcloud storage buckets create gs://PROJECT_ID_MEDIA_BUCKET
    gcloud storage buckets add-iam-policy-binding gs://PROJECT_ID_MEDIA_BUCKET --member=allUsers --role=roles/storage.legacyObjectReader
    
  2. אוספים את כל התוכן הסטטי באופן מקומי לתיקייה אחת:

    python manage.py collectstatic
    
  3. מעלים את התוכן הסטטי ל-Cloud Storage:

    gcloud storage rsync ./static gs://PROJECT_ID_MEDIA_BUCKET/static --recursive
    
  4. ב-mysite/settings.py, מגדירים את הערך של STATIC_URL לכתובת ה-URL הבאה, ומחליפים את [YOUR_GCS_BUCKET] בשם הקטגוריה:

    http://storage.googleapis.com/PROJECT_ID_MEDIA_BUCKET/static/
    

הגדרת GKE

  1. כדי לאתחל את GKE, עוברים לדף Clusters.

    כניסה לדף Clusters

    כשמשתמשים ב-GKE בפעם הראשונה בפרויקט, צריך לחכות עד להודעה 'Kubernetes Engine is getting ready. יכול להיות שיחלפו כמה דקות עד שההודעה 'הפעולה הזו תימשך דקה או יותר' תיעלם.

  2. יצירת אשכול GKE:

    gcloud container clusters create polls \
      --scopes "https://www.googleapis.com/auth/userinfo.email","cloud-platform" \
      --num-nodes 4 --zone "us-central1-a"
    

    אם מופיעה הודעת שגיאה דומה ל-Project is not fully initialized with the default service accounts, יכול להיות שתצטרכו לאתחל את Google Kubernetes Engine.

    הפעלת GKE

    אם קיבלתם שגיאה, צריך להיכנס אל Google Cloud המסוף כדי לאתחל את GKE בפרויקט.

    כניסה לדף Clusters

    ממתינים להודעה 'Kubernetes Engine is getting ready. ההודעה 'הפעולה עשויה להימשך דקה או יותר' תיעלם.

  3. אחרי שיוצרים את האשכול, משתמשים בכלי שורת הפקודה kubectl, שמשולב עם ה-CLI של gcloud, כדי ליצור אינטראקציה עם אשכול GKE. מכיוון ש-gcloud ו-kubectl הם כלים נפרדים, צריך לוודא ש-kubectl מוגדר כך שיפעל עם האוסף הנכון.

    gcloud container clusters get-credentials polls --zone "us-central1-a"
    

הגדרת Cloud SQL

  1. כדי לאפשר לאפליקציית GKE להתחבר למופע Cloud SQL, צריך כמה סודות. אחד נדרש לגישה ברמת המופע (חיבור), ושני האחרים נדרשים לגישה למסד הנתונים. מידע נוסף על שתי רמות בקרת הגישה זמין במאמר בנושא בקרת גישה למופעים.

    1. כדי ליצור את הסוד לגישה ברמת המופע, מציינים את המיקום, PATH_TO_CREDENTIAL_FILE, של מפתח חשבון השירות בפורמט JSON שהורדתם כשייצרתם את חשבון השירות (ראו יצירת חשבון שירות):

      kubectl create secret generic cloudsql-oauth-credentials \
        --from-file=credentials.json=PATH_TO_CREDENTIAL_FILE
      
    2. כדי ליצור את הסודות לגישה למסד הנתונים, משתמשים במסד הנתונים של SQL, בשם המשתמש ובסיסמה שהוגדרו כשיוצרים שירותי גיבוי. איך מגדירים מכונה של Cloud SQL ל-PostgreSQL

      kubectl create secret generic cloudsql \
        --from-literal=database=DATABASE_NAME \
        --from-literal=username=DATABASE_USERNAME \
        --from-literal=password=DATABASE_PASSWORD
      
  2. מאחזרים את תמונת Docker הציבורית של Cloud SQL Proxy.

    docker pull b.gcr.io/cloudsql-docker/gce-proxy
    
  3. יוצרים קובץ אימג' של Docker ומחליפים את <your-project-id> במזהה הפרויקט.

    docker build -t gcr.io/PROJECT_ID/polls .
    
  4. מגדירים את Docker כך שישתמש ב-gcloud ככלי עזר לפרטי כניסה, כדי שתוכלו להעביר את קובץ האימג' בדחיפה אל Container Registry:

    gcloud auth configure-docker
    
  5. מעלים את קובץ אימג' של Docker. מחליפים את <your-project-id> במזהה הפרויקט.

    docker push gcr.io/PROJECT_ID/polls
    
  6. יוצרים את משאב GKE:

    kubectl create -f polls.yaml
    

פריסת האפליקציה ב-GKE

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

kubectl get pods

מחכים כמה דקות עד שהסטטוסים של ה-Pods יוצגו כ-Running. אם הפודים לא מוכנים או אם אתם רואים הפעלות מחדש, אתם יכולים לקבל את היומנים של פוד מסוים כדי להבין את הבעיה. ‫[YOUR-POD-ID] הוא חלק מהפלט שמוחזר על ידי הפקודה kubectl get pods הקודמת.

kubectl logs [YOUR_POD_ID]

הצגת האפליקציה בהפעלה ב- Google Cloud

אחרי שה-pods מוכנים, אפשר לקבל את כתובת ה-IP החיצונית של מאזן העומסים:

kubectl get services polls

שימו לב לכתובת EXTERNAL-IP ועברו לכתובת http://[EXTERNAL-IP] בדפדפן כדי לראות את דף הנחיתה של הסקרים ב-Django ולגשת למסוף האדמין.

הסבר על הקוד

אפליקציה לדוגמה

אפליקציית הדוגמה של Django נוצרה באמצעות כלי Django רגילים. הפקודות הבאות יוצרות את הפרויקט ואת אפליקציית הסקרים:

django-admin startproject mysite
python manage.py startapp polls

התצוגות, המודלים והגדרות הניתוב הבסיסיים הועתקו מתוך כתיבת האפליקציה הראשונה ב-Django (חלק 1 וחלק 2).

הגדרת מסד נתונים

הקובץ settings.py מכיל את ההגדרות של מסד הנתונים של SQL:

DATABASES = {
    "default": {
        # If you are using Cloud SQL for MySQL rather than PostgreSQL, set
        # 'ENGINE': 'django.db.backends.mysql' instead of the following.
        "ENGINE": "django.db.backends.postgresql",
        "NAME": os.getenv("DATABASE_NAME"),
        "USER": os.getenv("DATABASE_USER"),
        "PASSWORD": os.getenv("DATABASE_PASSWORD"),
        "HOST": "127.0.0.1",
        "PORT": "5432",
    }
}

הגדרות של Kubernetes pod

בקובץ polls.yaml מוגדרים שני משאבי Kubernetes. הראשון הוא Service, שמגדיר שם עקבי וכתובת IP פנימית לאפליקציית האינטרנט של Django. השני הוא מאזן עומסים מסוג HTTP עם כתובת IP חיצונית שפונה לציבור.

# The polls service provides a load-balancing proxy over the polls app
# pods. By specifying the type as a 'LoadBalancer', Kubernetes Engine will
# create an external HTTP load balancer.
# For more information about Services see:
#   https://kubernetes.io/docs/concepts/services-networking/service/
# For more information about external HTTP load balancing see:
#   https://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/
apiVersion: v1
kind: Service
metadata:
  name: polls
  labels:
    app: polls
spec:
  type: LoadBalancer
  ports:
  - port: 80
    targetPort: 8080
  selector:
    app: polls

השירות מספק שם רשת וכתובת IP, ותאי GKE מריצים את קוד האפליקציה מאחורי השירות. קובץ polls.yaml מציין פריסה שמספקת עדכונים הצהרתיים לפודים של GKE. השירות מפנה תעבורה לפריסה על ידי התאמת הבורר של השירות לתווית של הפריסה. במקרה הזה, הסלקטור polls תואם לתווית polls.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: polls
  labels:
    app: polls
spec:
  replicas: 3
  selector:
    matchLabels:
      app: polls
  template:
    metadata:
      labels:
        app: polls
    spec:
      containers:
      - name: polls-app
        # Replace  with your project ID or use `make template`
        image: gcr.io/<your-project-id>/polls
        # This setting makes nodes pull the docker image every time before
        # starting the pod. This is useful when debugging, but should be turned
        # off in production.
        imagePullPolicy: Always
        env:
            - name: DATABASE_NAME
              valueFrom:
                secretKeyRef:
                  name: cloudsql
                  key: database
            - name: DATABASE_USER
              valueFrom:
                secretKeyRef:
                  name: cloudsql
                  key: username
            - name: DATABASE_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: cloudsql
                  key: password
        ports:
        - containerPort: 8080

      - image: gcr.io/cloudsql-docker/gce-proxy:1.16
        name: cloudsql-proxy
        command: ["/cloud_sql_proxy", "--dir=/cloudsql",
                  "-instances=<your-cloudsql-connection-string>=tcp:5432",
                  "-credential_file=/secrets/cloudsql/credentials.json"]
        volumeMounts:
          - name: cloudsql-oauth-credentials
            mountPath: /secrets/cloudsql
            readOnly: true
          - name: ssl-certs
            mountPath: /etc/ssl/certs
          - name: cloudsql
            mountPath: /cloudsql
      volumes:
        - name: cloudsql-oauth-credentials
          secret:
            secretName: cloudsql-oauth-credentials
        - name: ssl-certs
          hostPath:
            path: /etc/ssl/certs
        - name: cloudsql
          emptyDir: {}

הסרת המשאבים

כדי להימנע מחיובים בחשבון Google Cloud בגלל השימוש במשאבים שנעשה במסגרת המדריך הזה, אפשר למחוק את הפרויקט שמכיל את המשאבים, או להשאיר את הפרויקט ולמחוק את המשאבים בנפרד.

מחיקת הפרויקט

  1. במסוף Google Cloud , נכנסים לדף Manage resources.

    כניסה לדף Manage resources

  2. ברשימת הפרויקטים, בוחרים את הפרויקט שרוצים למחוק ולוחצים על Delete.
  3. כדי למחוק את הפרויקט, כותבים את מזהה הפרויקט בתיבת הדו-שיח ולוחצים על Shut down.

מחיקת המשאבים הבודדים

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

  1. מוחקים את אשכול Google Kubernetes Engine:

    gcloud container clusters delete polls
    
  2. מוחקים את קובץ האימג' של Docker שדחפתם ל-Container Registry:

    gcloud container images delete gcr.io/PROJECT_ID/polls
    
  3. מחיקת המכונה של Cloud SQL:

    gcloud sql instances delete INSTANCE_NAME
    

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