הפעלת 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, if any are not already enabled.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the APIs

  5. Install the gcloud CLI.

  6. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  7. To initialize the gcloud CLI, run the following command:

    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, if any are not already enabled.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the APIs

  11. Install the gcloud CLI.

  12. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  13. To initialize the gcloud CLI, run the following command:

    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 מהמכונה המקומית

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

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

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

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

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

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

      uname -a
      

    ‏Linux‏ 64 סיביות

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

    ‏Linux‏ 32 סיביות

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

    macOS‏ 64 סיביות

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

    Mac M1

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

    ‏Windows‏ 64 סיביות

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

    ‏Windows‏ 32 סיביות

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

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

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

    כדי להוריד את קובץ האימג' העדכני למחשב המקומי באמצעות Docker, משתמשים בפקודה הבאה:

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

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

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

    אפשר להעביר את ההורדה למיקום נפוץ, כמו מיקום ב-PATH או ספריית הבית. אם תבחרו לעשות את זה, כשתפעילו את Cloud SQL Auth Proxy בהמשך המדריך, זכרו להפנות למיקום שבחרתם כשאתם משתמשים בפקודות 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.

    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. לוחצים על Create database.
    3. בתיבת הדו-שיח Database Name, מזינים DATABASE_NAME.
    4. לוחצים על יצירה.

    gcloud

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

      gcloud sql databases create DATABASE_NAME \
          --instance INSTANCE_NAME
      

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

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

    המסוף

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

    gcloud

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

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

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

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

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

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

    כניסה לדף Service accounts

  2. בוחרים את הפרויקט שמכיל את המכונה של Cloud SQL.
  3. לוחצים על Create service account.
  4. בשדה Service account name, מזינים שם תיאורי לחשבון השירות.
  5. משנים את הערך של Service account ID לערך ייחודי וקל לזיהוי, ולוחצים על Create and continue.
  6. לוחצים על השדה בחירת תפקיד ובוחרים אחד מהתפקידים הבאים:
    • Cloud SQL > Cloud SQL Client
    • Cloud SQL > Cloud SQL Editor
    • Cloud SQL > Cloud SQL Admin
  7. לוחצים על Done כדי לסיים ליצור את חשבון השירות.
  8. לוחצים על תפריט הפעולות של חשבון השירות החדש ובוחרים באפשרות Manage keys.
  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> במזהה הפרויקט ב-Google Cloud (PROJECT_ID).

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

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

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

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

  1. בטרמינל נפרד, מפעילים את Cloud SQL Auth Proxy:

    ‫Linux/macOS

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

    Windows

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

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

  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.

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

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

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

כדי להתחבר למסוף הניהול של 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 לשרת ה-proxy של Cloud SQL.

    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

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

kubectl get pods

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

kubectl logs [YOUR_POD_ID]

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

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

kubectl get services polls

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

הבנת הקוד

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

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

django-admin startproject mysite
python manage.py startapp polls

התצוגות, המודלים והגדרות הניתוב הבסיסיים הועתקו מהמדריך Writing your first Django app (חלק 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

הקובץ polls.yaml מציין שני משאבים ב-Kubernetes. הראשון הוא Service, שמגדיר שם עקבי וכתובת IP פנימית לאפליקציית האינטרנט של Django. השני הוא מאזן עומסים (LB) מסוג 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
    

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