בדף הזה מוסבר איך להגדיר את Cloud Deploy לעיבוד ההגדרה של כל יעד בצינור העברת נתונים.
Cloud Deploy משתמש ב-Skaffold כדי לעבד את המניפסטים של Kubernetes. השירות תומך ברינדור של מניפסטים גולמיים ובכלים מתקדמים יותר לניהול מניפסטים, כמו Helm, Kustomize ו-kpt.
תהליך העיבוד כולל שני שלבים:
כלי ניהול המניפסט יוצר את המניפסט.
Skaffold מחליף את ההפניות לתמונות במניפסט בתמונות שרוצים לפרוס במהדורה.
בדף הזה יש דוגמאות להגדרות באמצעות Helm ו-Kustomize.
שימוש ב-Skaffold כדי ליצור את התצורה
אם עדיין אין לכם קובץ הגדרות של Skaffold (skaffold.yaml), אתם יכולים להשתמש ב-Skaffold כדי ליצור קובץ כזה על סמך מה שיש במאגר.
מתקינים את Skaffold באמצעות Google Cloud CLI:
gcloud components install skaffoldמריצים את הפקודה
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.
המאמרים הבאים
- מידע נוסף על הגדרת צינור אספקה ב-Cloud Deploy
- הדרכה בנושא פרופילים של Cloud Deploy Skaffold
- מידע נוסף על Kustomize
- מידע נוסף על Helm
- מידע נוסף על Kpt
- מומלץ להשתמש ב-Artifact Registry כדי לאחסן ארטיפקטים כמו תרשימי Helm או התאמות אישיות.