הגדרת משתני סביבה

במאמר הזה מוסבר איך ליצור משתני סביבה ב-Knative serving ואיך להשתמש בהם.

כשמגדירים משתני סביבה, הם מוזרקים למאגר ונגישים לקוד. משתני הסביבה מוגדרים כצמדי מפתח/ערך. לדוגמה, נניח שאתם מפעילים שירות שמאפשר רישום נוסף ביומן כשהוא קורא LOGGING_VERBOSE: true בסביבה. בתרחיש הזה, מגדירים את צמד המפתח/ערך של משתנה הסביבה כ-LOGGING_VERBOSE=true. הפקודות המדויקות או ממשק המשתמש מוצגים בקטעים הבאים.

שמות שמורים

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

הגדרת משתני סביבה בשירות

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

אפשר להגדיר משתני סביבה באמצעות מסוף Google Cloud,‏ Google Cloud CLI או קובץ YAML כשפורסים שירות חדש או מעדכנים שירות קיים ופורסים עדכון: Google Cloud

המסוף

  1. נכנסים אל Knative serving במסוף Google Cloud :

    מעבר אל Knative serving

  2. אם אתם מגדירים שירות חדש שאתם פורסים, לוחצים על יצירת שירות. אם אתם מגדירים שירות קיים, לוחצים על השירות ואז על Edit & Deploy New Revision (עריכה ופריסה של עדכון חדש).

  3. בקטע הגדרות מתקדמות, לוחצים על משתנים וסודות.

  4. מבצעים את הפעולות הבאות:

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

  5. לוחצים על הבא כדי להמשיך לקטע הבא.

  6. בקטע Configure how this service is triggered (הגדרה של אופן הפעלת השירות), בוחרים את סוג הקישוריות שרוצים להשתמש בו כדי להפעיל את השירות.

  7. לוחצים על יצירה כדי לפרוס את התמונה ב-Knative serving ומחכים עד שהפריסה תסתיים.

שורת הפקודה

אפשר להשתמש ב-Google Cloud CLI כדי להגדיר משתני סביבה לשירותים חדשים או לעדכן שירותים קיימים:

  • בשירותים קיימים, מריצים את הפקודה gcloud run services update עם אחד מהפרמטרים הבאים כדי לעדכן את משתני הסביבה:

    דוגמה:

    gcloud run services update SERVICE --update-env-vars KEY1=VALUE1,KEY2=VALUE2

    מחליפים את:

    • SERVICE בשם של השירות.
    • KEY1=VALUE1,KEY2=VALUE2 ברשימה מופרדת בפסיקים של צמדים של שמות וערכים לכל משתנה סביבה. מציינים את השם של משתנה הסביבה לכל KEY ואת הערך של משתנה הסביבה הזה לכל VALUE. איך מציינים כמה פרמטרים
    • אפשרויות של פרמטרים של פקודות

      • כדי לציין משתנה סביבה שמכיל פסיק (,), צריך להשתמש בתו בריחה לכל KEY=VALUE עם תו מפריד שונה. לדוגמה, אם משתמשים ב-@:
        --set-env-vars "^@^KEY1=value,with,commas@KEY2=anothervalue@KEY3..."
      • כדי לציין כמה קבוצות של צמדי מפתח/ערך, אפשר לציין כמה פרמטרים כדי שהקוד יהיה קריא. דוגמה:
        [...]
        --set-env-vars "KEY=VALUE1" \
        --set-env-vars "KEY=VALUE2" \
        --set-env-vars "KEY=VALUE3"
  • בשירותים חדשים, מגדירים משתני סביבה על ידי הרצת הפקודה gcloud run deploy עם הפרמטר --set-env-vars:

    gcloud run deploy SERVICE --image=IMAGE_URL --set-env-vars KEY1=VALUE1,KEY2=VALUE2

    מחליפים את:

    • IMAGE_URL עם הפניה לקובץ אימג' של קונטיינר, לדוגמה, gcr.io/cloudrun/hello.
    • SERVICE בשם של השירות.
    • KEY1=VALUE1,KEY2=VALUE2 ברשימה מופרדת בפסיקים של צמדים של שמות וערכים לכל משתנה סביבה. מציינים את השם של משתנה הסביבה לכל KEY ואת הערך של משתנה הסביבה הזה לכל VALUE. איך מציינים כמה פרמטרים
    • אפשרויות של פרמטרים של פקודות

      • כדי לציין משתנה סביבה שמכיל פסיק (,), צריך להשתמש בתו בריחה לכל KEY=VALUE עם תו מפריד שונה. לדוגמה, אם משתמשים ב-@:
        --set-env-vars "^@^KEY1=value,with,commas@KEY2=anothervalue@KEY3..."
      • כדי לציין כמה קבוצות של צמדי מפתח/ערך, אפשר לציין כמה פרמטרים כדי שהקוד יהיה קריא. דוגמה:
        [...]
        --set-env-vars "KEY=VALUE1" \
        --set-env-vars "KEY=VALUE2" \
        --set-env-vars "KEY=VALUE3"

YAML

אפשר להוריד את ההגדרה של שירות קיים לקובץ YAML באמצעות הפקודה gcloud run services describe והדגל --format=export. אחר כך תוכלו לשנות את קובץ ה-YAML ולפרוס את השינויים האלה באמצעות הפקודה gcloud run services replace. חשוב לוודא שמשנים רק את המאפיינים שצוינו.

  1. מורידים את ההגדרה של השירות לקובץ בשם service.yaml בסביבת העבודה המקומית:

    gcloud run services describe SERVICE --format export > service.yaml

    מחליפים את SERVICE בשם של שירות Knative serving.

  2. בקובץ המקומי, מעדכנים את המאפיינים name ו-value מתחת למאפיין env מתחת ל-containers::

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        spec:
          containers:
          - env:
            - name: KEY-1
              value: VALUE-1
            - name: KEY-N
              value: VALUE-N

    החלפה

    • SERVICE בשם של שירות Knative serving
    • KEY-1, VALUE-1 עם משתנה הסביבה והערך. אפשר להוסיף עוד משתנים וערכים לפי הצורך.
  3. מחליפים את השירות בהגדרה החדשה שלו באמצעות הפקודה הבאה:

    gcloud run services replace service.yaml

הגדרת משתני סביבה כברירת מחדל במאגר התגים

אפשר להשתמש בהצהרה ENV בקובץ Dockerfile כדי להגדיר ערכי ברירת מחדל למשתני סביבה:

ENV KEY1=VALUE1,KEY2=VALUE2

סדר העדיפות: משתני מאגר תגים לעומת משתני שירות

אם מגדירים משתנה סביבה שמוגדר כברירת מחדל במאגר התגים וגם מגדירים משתנה סביבה עם אותו שם בשירות Knative Serving, הערך שמוגדר בשירות מקבל עדיפות.

כדי להשתמש בקישורים לשירות Kubernetes, צריך להפעיל את התמיכה בהם באופן ידני. בגלל בעיות בביצועים שנצפו במרחבי שמות עם אלפי שירותים ועדכונים, קישורי שירות של Kubernetes הושבתו כברירת מחדל החל מינואר 2021.

כדי להפעיל קישורים לשירות Kubernetes, מריצים את הפקודה הבאה כדי להגדיר את data.enable-service-links ל-true ב-ConfigMap של knative-serving/config-defaults:

kubectl patch cm -n knative-serving config-defaults -p '{"data":{"enable-service-links":"true"}}