ניהול מניפסטים ב-Cloud Deploy

בדף הזה מוסבר איך להגדיר את Cloud Deploy לעיבוד ההגדרה של כל יעד בצינור העברת נתונים.

‫Cloud Deploy משתמש ב-Skaffold כדי לעבד את המניפסטים של Kubernetes. השירות תומך ברינדור של מניפסטים גולמיים ובכלים מתקדמים יותר לניהול מניפסטים, כמו Helm,‏ Kustomize ו-kpt.

תהליך העיבוד כולל שני שלבים:

  1. כלי ניהול המניפסט יוצר את המניפסט.

  2. ‫Skaffold מחליף את ההפניות לתמונות במניפסט בתמונות שרוצים לפרוס במהדורה.

בדף הזה יש דוגמאות להגדרות באמצעות Helm ו-Kustomize.

שימוש ב-Skaffold כדי ליצור את התצורה

אם עדיין אין לכם קובץ הגדרות של Skaffold ‏ (skaffold.yaml), אתם יכולים להשתמש ב-Skaffold כדי ליצור קובץ כזה על סמך מה שיש במאגר.

  1. מתקינים את Skaffold באמצעות Google Cloud CLI:

    gcloud components install skaffold

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

    skaffold init --skip-build

הפקודה הזו יוצרת קובץ skaffold.yaml במאגר. הקובץ הזה מפנה למניפסטים במאגר הזה. התוכן נראה כך:

apiVersion: skaffold/v4beta7
kind: Config
metadata:
  name: sample-app
manifests:
  rawYaml:
    - k8s-manifests/deployment.yaml
    - k8s-manifests/rbac.yaml
    - k8s-manifests/redis.yaml
    - k8s-manifests/service.yaml

עיבוד מניפסטים גולמיים

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

כברירת מחדל, Cloud Deploy משתמש ב-skaffold render כדי לעבד את מניפסטים של Kubernetes, ומחליף שמות של תמונות לא מתויגות בשמות של תמונות מתויגות של קובצי האימג' בקונטיינרים שאתם פורסים. לאחר מכן, כשמקדמים את הגרסה, Cloud Deploy משתמש ב-skaffold apply כדי להחיל את המניפסטים ולפרוס את התמונות באשכול Google Kubernetes Engine.

קטע manifests מהגדרה בסיסית נראה כך:

manifests:
  rawYaml:
    - PATH_TO_MANIFEST

מידע נוסף על הערכים שאפשר להעביר כאן זמין במסמכי התיעוד של Skaffold.

עיבוד באמצעות Helm

אתם יכולים להשתמש ב-Cloud Deploy כדי לעבד את תרשימי Helm. כדי לעשות זאת, צריך לכלול פרטים של תרשים Helm ב-deploy stanza בפרופיל Skaffold.

כל הגדרה כזו נראית כך:

apiVersion: skaffold/v4beta7
kind: Config
manifests:
  helm:
    releases:
      - name: RELEASE_NAME
        chartPath: PATH_TO_HELM_CHART

כאשר:

RELEASE_NAME הוא השם של מופע תרשים Helm של הגרסה הזו.

PATH_TO_HELM_CHART הוא הנתיב המקומי לתרשים Helm ארוז או לספרייה של תרשים Helm לא ארוז.

אפשר להשתמש באפשרויות הגדרה נוספות של Helm, כפי שמתואר במסמכי התיעוד של Skaffold.

עיבוד באמצעות Kustomize

אפשר להשתמש ב-Kustomize עם Cloud Deploy. כדי לעשות זאת, מצביעים על קובצי ה-Kustomization מתוך קטע ה-deploy בהגדרות הפרופיל של skaffold.yaml.

אתם כוללים הגדרת Kustomize נפרדת לכל יעד שבו אתם משתמשים ב-Kustomize, מתחת לכל profile תואם ב-skaffold.yaml.

כל הגדרה כזו נראית כך:

apiVersion: skaffold/v4beta7
kind: Config
manifests:
  kustomize:
    paths:
      - PATH_TO_KUSTOMIZE

כאשר:

PATH_TO_KUSTOMIZE מצביע על קובצי ההתאמה האישית. ערך ברירת המחדל הוא ["."].

אפשר להשתמש באפשרויות הגדרה נוספות של Kustomize, כפי שמתואר במסמכי התיעוד של Skaffold.

הגדרת מניפסטים שונים לכל יעד

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

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

פרופילים עם מניפסטים גולמיים

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

apiVersion: skaffold/v4beta7
kind: Config
profiles:
  - name: prod
    manifests:
      rawYaml:
        - prod.yaml
  - name: staging
    manifests:
      rawYaml:
        - staging.yaml

פרופילים עם Kustomize

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

apiVersion: skaffold/v4beta7
kind: Config
profiles:
  - name: prod
    manifests:
      kustomize:
        paths:
          - environments/prod
  - name: staging
    manifests:
      kustomize:
        paths:
          - environments/staging

פרופילים שמופיעים בתהליך השליחה

הפרופילים האלה, שמוגדרים ב-skaffold.yaml, מופיעים בהגדרות של צינור ההפצה, לכל יעד:

serialPipeline:
  stages:
  - targetId: staging-target
    profiles:
    - staging
  - targetId: prod-target
    profiles:
    - prod

החלפת תמונה ספציפית כשיוצרים את הפריט

בקובץ המניפסט אפשר להשתמש בplaceholder לשם התמונה, שאפשר להחליף אותו כשיוצרים את הגרסה.

דוגמה למניפסט עם placeholder לתמונה:

apiVersion: v1
kind: Deployment
metadata:
  name: getting-started
  labels:
    app: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: my-app-image

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

gcloud deploy releases create test-release-001 \
  --project=test-gke-using-deployment \
  --region=us-central1 \
  --delivery-pipeline=my-gke-demo-app-1 \
  --images=my-app-image=gcr.io/google-containers/nginx@sha256:f49a843c290594dcf4d193535d1f4ba8af7d56cea2cf79d1e9554f077f1e7aaa

המניפסט המעובד שמתקבל כולל עכשיו הפניה לתמונה שצוינה במקום my-app-image.

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