הוספת תבנית כסוג מורכב

בדף הזה מוסבר איך ליצור סוג מורכב באמצעות Deployment Manager. אחרי שיוצרים סוג מורכב, אפשר לקרוא לסוג הזה בהגדרה וליצור פריסות.

סוג מורכב הוא תבנית אחת או יותר שהוגדרו לפעול יחד, והן נוספו באופן קבוע ל-Deployment Manager. אחרי שמוסיפים סוג מורכב, אפשר להשתמש בו כמו בסוג בבעלות Google. מידע נוסף על סוגים

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

אולי יעניין אותך גם שיתוף סוגים בין פרויקטים.

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

  • אם רוצים להשתמש בדוגמאות לשורת הפקודה במדריך הזה, צריך להתקין את כלי שורת הפקודה`gcloud`.
  • כדי להשתמש בדוגמאות ל-API במדריך הזה, צריך להגדיר גישה ל-API.
  • כדאי להשתמש ב-v2beta API עבור דוגמאות ה-API במדריך הזה.

רכיבים של סוג מורכב

כדי ליצור סוג מורכב, צריך ליצור תבנית Jinja או Python ברמה העליונה, ואפשר גם ליצור קבוצה של קובצי תמיכה שבסופו של דבר יתורגמו לסוגי בסיס. סוגים מורכבים יכולים לכלול משאבים שהם בעצמם סוגים מורכבים אחרים. ‫Deployment Manager ירחיב את הסוגים האלה באופן רקורסיבי במהלך הפריסה.

סוג מורכב מורכב מהרכיבים הבאים:

  • תבנית ברמה העליונה: תבנית Jinja או Python ברמה העליונה שמופעלת במהלך ההרחבה כשמפעילים את הסוג.
  • סכימה: קובץ JSON Schema שמתאר מידע על התבנית ברמה העליונה ועל כל ייבוא משני שהוגדר.
  • קבצים מיובאים: כל הקבצים הנוספים שנדרשים להרצה, כמו קבצי עזר, תבניות משנה וסכימות רלוונטיות לתבניות המשנה, אם רלוונטי. הפעולה הזו אופציונלית. סוג מורכב יכול להכיל גם תבנית אחת ברמה העליונה.

יצירת סוג מורכב

אפשר ליצור סוג מורכב על ידי רישום התבנית ברמה העליונה של הגדרה והייבוא והסכימה שמשויכים אליה. יוצרים סוג מורכב באמצעות gcloud או ה-API.

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

gcloud

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

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

$ gcloud beta deployment-manager types create [TYPE_NAME] --template=[TOP_LEVEL_TEMPLATE]

where:

  • [TYPE_NAME] הוא השם שרוצים לתת לסוג הזה
  • [TOP_LEVEL_TEMPLATE] הוא הנתיב היחסי לתבנית ברמה העליונה שמתארת את הסוג הזה.

API

ב-API, שולחים בקשת POST שמכילה את השדות composite ו-name. בשדה composite, מגדירים:

  • הסכימה ברמה העליונה
  • התוכן של התבניות המיובאות
  • התוכן של התבנית ברמה העליונה

גוף הבקשה ל-API בנוי באופן הבא:

POST https://www.googleapis.com/deploymentmanager/v2beta/projects/[PROJECT_ID]/global/compositeTypes

{
 "composite": {
  "files": {
   "schema": "[CONTENTS_OF_SCHEMA]",
   "imports": [
    {
     "name": "[TEMPLATE_FILE]",
     "content": "[CONTENTS_OF_TEMPLATE_FILE]"
    },
    {
     "name": "[ANOTHER_TEMPLATE_IF_NECESSARY]",
     "content": "[CONTENTS_OF_TEMPLATES]"
    }
   ],
   "template": "[TOP-LEVEL_TEMPLATE_CONTENTS]",
   "templateFileType": "[FILE_TYPE]"
  }
 },
 "name": "[TYPE_NAME]"
}

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

פריסה של סוג מורכב

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

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

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

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

types: [PROJECT_ID]/composite:[TYPE_NAME]

לדוגמה:

resources:
- name: my example-resource
  type: example-project/composite:autoscaled-igm
  properties:
  ...

פריסה של סוג מורכב ישירות באמצעות כלי שורת הפקודה

‫Deployment Manager מאפשר לפרוס סוג מורכב ישירות באמצעות Google Cloud CLI. במקום ליצור קובץ הגדרות אישיות ברמה העליונה, ה-CLI של gcloud ייצור בשבילכם באופן אוטומטי קובץ הגדרות אישיות ברמה העליונה.

לדוגמה, הפקודה הבאה פורסת סוג מורכב שנקרא autoscaled-igm:

gcloud deployment-manager deployments create my-igm \
    --composite-type example-project/composite:autoscaled-igm

אפשר גם להגדיר מאפיינים של סוג מורכב באמצעות הדגל --properties:

gcloud deployment-manager deployments create my-igm \
    --composite-type example-project/composite:autoscaled-igm \
    --properties zone:us-central1-a

חשוב לזכור:

  • כל הערכים מנותחים כערכי YAML. לדוגמה, הערך version: 3 מועבר כמספר שלם. אם רוצים לציין אותו כמחרוזת, צריך להוסיף גרשיים בודדים עם תו בריחה סביב הערך, version: \'3\'.

  • ערכים בוליאניים לא תלויי-רישיות, ולכן המערכת מתייחסת ל-TRUE, ל-true ול-True באותו אופן.

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

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

gcloud deployment-manager deployments create my-igm \
    --composite-type example-project/composite:autoscaled-igm \
    --properties zone:us-central1-a,machineType:n1-standard-1,image:debian-8

אחרי שמריצים את הפקודה הזו, Deployment Manager יוצר פריסה באמצעות הסוג המורכב שסיפקתם. אפשר לוודא שהפריסה נוצרה באמצעות מסוף Google Cloud או ה-CLI של gcloud. מידע על צפייה בפריסה מופיע במאמר צפייה במניפסט.

דוגמה: יצירת סוג מורכב

‫Deployment Manager מציע דוגמאות רבות להגדרות ממאגר GitHub של Deployment Manager שאפשר להשתמש בהן כסוגים מורכבים. בדוגמה הזו, תוסיפו סוג מורכב שפורס שירות עם זמינות גבוהה ומאוזן עומסים לכמה אזורים באזור אחד. מידע נוסף זמין בדוגמה המלאה.

בדוגמה הזו, קובץ ההגדרות ברמה העליונה הוא הקובץ ha-service.py. כל תבניות המשנה מיובאות בקובצי הסכימה.

  1. מורידים את קובצי ה-Python והסכימה מהספרייה ב-GitHub. השמטה של קבצים בספריית משנה וקבצים של דיאגרמות.
  2. בספרייה המקומית שאליה הורדתם את כל הקבצים, מריצים את הפקודה הבאה כדי ליצור סוג מורכב חדש בשם ha-service-example:

    gcloud beta deployment-manager types create ha-service-example --template=ha-service.py
    
  3. כדי לוודא שהסוג נוצר בהצלחה, מקבלים רשימה של סוגים:

    gcloud beta deployment-manager types list --provider composite
    
  4. תאר את הסוג החדש:

    gcloud beta deployment-manager types describe ha-service-example --provider composite
    
  5. יוצרים הגדרה חדשה שפורסת את הסוג. מחליפים את [PROJECT_ID] במזהה הפרויקט:

    resources:
    - name: ha-service-example
      type: [PROJECT_ID]/composite:ha-service-example
      properties:
        dockerImage: gcr.io/deployment-manager-examples/nodejsservicestatic
        zones:
        - us-central1-b
        - us-central1-a
    

    שומרים את ההגדרה בשם example-config.yaml. שימו לב שלא הייתם צריכים לייבא תבניות כלשהן בהגדרה.

  6. מבצעים פריסה של הסוג המורכב החדש:

    gcloud deployment-manager deployments create ha-service-deployment --config example-config.yaml
    

    ה-API מחזיר רשימה של משאבים שנוצרו מהסוג:

    Waiting for create [operation-1488254932422-5498f5a950d71-2bd3b8c8-b13ddab5]...done.
    Create operation operation-1488254932422-5498f5a950d71-2bd3b8c8-b13ddab5 completed successfully.
    NAME                                            TYPE                             STATE      ERRORS  INTENT
    ha-service-deployment-lb-fr                      compute.v1.forwardingRule        COMPLETED  []
    ha-service-deployment-lb-hc                      compute.v1.httpHealthCheck       COMPLETED  []
    ha-service-deployment-lb-tp                      compute.v1.targetPool            COMPLETED  []
    ha-service-deployment-service-us-central1-a-as   compute.v1.autoscaler            COMPLETED  []
    ha-service-deployment-service-us-central1-a-igm  compute.v1.instanceGroupManager  COMPLETED  []
    ha-service-deployment-service-us-central1-a-it   compute.v1.instanceTemplate      COMPLETED  []
    ha-service-deployment-service-us-central1-b-as   compute.v1.autoscaler            COMPLETED  []
    ha-service-deployment-service-us-central1-b-igm  compute.v1.instanceGroupManager  COMPLETED  []
    ha-service-deployment-service-us-central1-b-it   compute.v1.instanceTemplate      COMPLETED  []

כל הכבוד, יצרת את הסוג המורכב הראשון שלך!

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