שימוש במדיניות פריסה כדי להגביל את ההשקה
במדריך למתחילים הזה נסביר איך למנוע פריסות של Cloud Deploy ליעד במהלך תקופה מסוימת, ואיך לבטל את ההגבלה הזו.
במדריך למתחילים הזה תבצעו את הפעולות הבאות:
יוצרים הגדרת Skaffold ומניפסט של Kubernetes או הגדרת שירות של Cloud Run כדי לציין את תמונת הקונטיינר (שנוצרה מראש) לפריסה.
מגדירים את צינור עיבוד הנתונים לפריסה של Cloud Deploy ויעד פריסה אחד, שמפנה לאשכול GKE אחד או לשירות Cloud Run אחד.
הצינור הזה כולל רק שלב אחד, עבור היעד היחיד.
הגדרת מדיניות פריסה ליעד.
המדיניות מגדירה טווח תאריכים שבמהלכו אסור לבצע השקות לקהל היעד הזה.
יוצרים גרסה.
בדרך כלל, כשיוצרים גרסת הפצה, Cloud Deploy יוצר פריסה הדרגתית ליעד הראשון בהתקדמות של צינור העברת התוכן. במקרה הזה, מכיוון שיש מדיניות שמונעת פריסה ליעד, לא נוצרת הפצה ליעד הזה.
מעיינים בתוצאות במסוף Google Cloud .
בגלל המדיניות, לא תראו השקה של הגרסה, ולא תהיה פעולה בהמתנה בתרשים של צינור ההפצה.
שינוי מדיניות הפריסה.
השינוי הזה גורם לכך ש-Cloud Deploy יוצר עכשיו את ההשקה בהדרגה עבור היעד.
מעיינים בתוצאות במסוף Google Cloud .
עכשיו המדיניות מבוטלת, ולכן אפשר לראות שההשקה מתבצעת (או שהיא הושלמה, אם עבר מספיק זמן).
לפני שמתחילים
-
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 theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Cloud Deploy, Cloud Build, GKE, and Cloud Storage APIs, if any are not already enabled.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. 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.-
Install the Google Cloud CLI.
-
Configure the gcloud CLI to use your federated identity.
For more information, see Sign in to the gcloud CLI with your federated identity.
-
To initialize the gcloud CLI, run the following command:
gcloud initאם כבר התקנתם את Google Cloud CLI, צריך לוודא שאתם מריצים את הגרסה העדכנית:
gcloud components update
- מוודאים שלחשבון השירות שמשמש כברירת מחדל ב-Compute Engine יש הרשאות מספיקות.
יכול להיות שלחשבון השירות כבר יש את ההרשאות הנדרשות. השלבים האלה מיועדים לפרויקטים שבהם השבתתם את ההקצאות האוטומטיות של תפקידים בחשבונות שירות שמוגדרים כברירת מחדל.
- קודם מוסיפים את התפקיד
clouddeploy.jobRunner:gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:$(gcloud projects describe PROJECT_ID \ --format="value(projectNumber)")-compute@ \ --role="roles/clouddeploy.jobRunner" - מוסיפים את תפקיד המפתח לסביבת זמן הריצה הספציפית.
- ב-GKE:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:$(gcloud projects describe PROJECT_ID \ --format="value(projectNumber)")-compute@ \ --role="roles/container.developer" - ל-Cloud Run:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:$(gcloud projects describe PROJECT_ID \ --format="value(projectNumber)")-compute@ \ --role="roles/run.developer" -
מוסיפים את התפקיד
iam.serviceAccountUser, שכולל את ההרשאהactAsלפריסה בסביבת זמן הריצה:gcloud iam service-accounts add-iam-policy-binding $(gcloud projects describe PROJECT_ID \ --format="value(projectNumber)")-compute@ \ --member=serviceAccount:$(gcloud projects describe PROJECT_ID \ --format="value(projectNumber)")-compute@ \ --role="roles/iam.serviceAccountUser" \ --project=PROJECT_ID
יצירת סביבת זמן ריצה
אם אתם פורסים ל-Cloud Run, אתם יכולים לדלג על הפקודה הזו.
ב-GKE, יוצרים אשכול אחד: quickstart-cluster-qsprod.
נקודת קצה ל-API של Kubernetes באשכול צריכה להיות נגישה מהאינטרנט הציבורי. אשכולות GKE נגישים חיצונית כברירת מחדל.
gcloud container clusters create-auto quickstart-cluster-qsprod \
--project=PROJECT_ID \
--region=us-central1
הכנת ההגדרה של Skaffold ומניפסט האפליקציה
Cloud Deploy משתמש ב-Skaffold כדי לספק את הפרטים לגבי מה לפרוס ואיך לפרוס אותו ליעד.
במדריך למתחילים הזה יוצרים קובץ skaffold.yaml שמזהה את מניפסט Kubernetes שבו יש להשתמש כדי לפרוס את האפליקציה לדוגמה.
פותחים חלון טרמינל.
יוצרים ספרייה חדשה ועוברים אליה.
mkdir deploy-policy-quickstart cd deploy-policy-quickstartיוצרים קובץ בשם
skaffold.yamlעם התוכן הבא:GKE
apiVersion: skaffold/v4beta1 kind: Config manifests: rawYaml: - k8s-pod.yaml deploy: kubectl: {}Cloud Run
apiVersion: skaffold/v4beta1 kind: Config manifests: rawYaml: - service.yaml deploy: cloudrun: {}הקובץ הזה הוא קובץ תצורה מינימלי של Skaffold. במדריך למתחילים הזה, אתם יוצרים את הקובץ. אבל אפשר גם לבקש מ-Cloud Deploy ליצור אחד בשבילכם, עבור אפליקציות בסיסיות שאינן בסביבת ייצור.
מידע נוסף על קובץ ההגדרה הזה מופיע ב
skaffold.yamlמאמר בנושא הפניה.יוצרים את המניפסט של האפליקציה – הגדרת שירות ל-Cloud Run או מניפסט Kubernetes ל-GKE.
GKE
יוצרים קובץ בשם
k8s-pod.yamlעם התוכן הבא:apiVersion: v1 kind: Pod metadata: name: getting-started spec: containers: - name: nginx image: my-app-imageהקובץ הזה הוא מניפסט בסיסי של Kubernetes, שמוחל על האשכול כדי לפרוס את האפליקציה. קובץ האימג' של הקונטיינר שרוצים לפרוס מוגדר כאן כ-placeholder,
my-app-image, שמוחלף באימג' הספציפי כשיוצרים את הגרסה.Cloud Run
יוצרים קובץ בשם
service.yamlעם התוכן הבא:apiVersion: serving.knative.dev/v1 kind: Service metadata: name: my-deploy-policy-run-service spec: template: spec: containers: - image: my-app-imageהקובץ הזה הוא הגדרה בסיסית של שירות Cloud Run, שמשמשת לפריסת האפליקציה. קובץ האימג' של קונטיינר לפריסה מוגדר כאן כפלייסהולדר,
my-app-image, שמוחלף באימג' הספציפי כשיוצרים את הגרסה.
יצירה של צינור העברת נתונים ויעד
אפשר להגדיר את צינור העברת הנתונים ואת יעדי ההעברה בקובץ אחד או בקבצים נפרדים. במדריך למתחילים הזה, יוצרים קובץ אחד עם שניהם.
יוצרים את צינור ההפצה ואת הגדרת היעד:
GKE
בספרייה
deploy-policy-quickstart, יוצרים קובץ חדש:clouddeploy.yaml, עם התוכן הבא:apiVersion: deploy.cloud.google.com/v1 kind: DeliveryPipeline metadata: name: deploy-policy-pipeline serialPipeline: stages: - targetId: prod-target --- apiVersion: deploy.cloud.google.com/v1 kind: Target metadata: name: prod-target description: production cluster gke: cluster: projects/PROJECT_ID/locations/us-central1/clusters/quickstart-cluster-qsprodCloud Run
בספרייה
deploy-policy-quickstart, יוצרים קובץ חדש:clouddeploy.yaml, עם התוכן הבא:apiVersion: deploy.cloud.google.com/v1 kind: DeliveryPipeline metadata: name: deploy-policy-pipeline serialPipeline: stages: - targetId: prod-target --- apiVersion: deploy.cloud.google.com/v1 kind: Target metadata: name: prod-target description: production Run service run: location: projects/PROJECT_ID/locations/us-central1רושמים את צינור עיבוד הנתונים ואת משאבי היעד בשירות Cloud Deploy:
gcloud deploy apply --file=clouddeploy.yaml --region=us-central1 --project=PROJECT_ID
עכשיו יש לכם צינור להעברת נתונים עם יעד אחד.
מאשרים את הצנרת ואת היעדים:
במסוף Google Cloud , נכנסים לדף Delivery pipelines של Cloud Deploy כדי לראות רשימה של צינורות העברת הנתונים שזמינים לכם.
צינור העברת הנתונים שיצרתם מוצג, עם יעד אחד שמופיע בעמודה יעדים.

יצירת מדיניות פריסה
אפשר להגדיר את מדיניות הפריסה באותו קובץ שבו מוגדר צינור העברת הנתונים והיעדים, או בקובץ נפרד. במדריך למתחילים הזה, אנחנו מגדירים אותו בנפרד.
באותה ספרייה שבה יצרתם את צינור העברת הנתונים ואת יעדי ההעברה, יוצרים קובץ חדש,
deploypolicy.yaml, עם התוכן הבא:apiVersion: deploy.cloud.google.com/v1 description: Restrict all rollouts in the deploy-policy-pipeline resource for the next ten years kind: DeployPolicy metadata: name: quickstart-deploy-policy selectors: - deliveryPipeline: id: 'deploy-policy-pipeline' rules: - rolloutRestriction: id: no-rollouts timeWindows: timeZone: America/New_York oneTimeWindows: - start: 2024-01-01 00:00 end: 2034-01-01 24:00המדיניות הזו חוסמת השקות למשך 10 שנים, החל מ-1 בינואר 2024. זו לא מדיניות ריאלית, אבל היא מוגדרת כך רק במדריך הזה, כדי לוודא שהמדיניות קיימת כשיוצרים את הגרסה.
רושמים את משאב מדיניות הפריסה בשירות Cloud Deploy:
gcloud deploy apply --file=deploypolicy.yaml --region=us-central1 --project=PROJECT_ID
מאשרים את מדיניות הפריסה:
במסוף Google Cloud , עוברים לדף Deploy policies של Cloud Deploy כדי לראות רשימה של המדיניות הזמינה.
מדיניות הפריסה שיצרתם מוצגת.

יצירת גרסה
הפצה היא המשאב המרכזי ב-Cloud Deploy שמייצג את השינויים שנפרסים. צינור העברת התוכן מגדיר את מחזור החיים של הגרסה הזו. פרטים על מחזור החיים הזה מופיעים במאמר ארכיטקטורת שירות Cloud Deploy.
GKE
מריצים את הפקודה הבאה מהספרייה deploy-policy-quickstart כדי ליצור את הגרסה:
gcloud deploy releases create test-release-001 \
--project=PROJECT_ID \
--region=us-central1 \
--delivery-pipeline=deploy-policy-pipeline \
--images=my-app-image=gcr.io/google-containers/nginx@sha256:f49a843c290594dcf4d193535d1f4ba8af7d56cea2cf79d1e9554f077f1e7aaa
שימו לב לדגל --images=, שמשמש להחלפת ה-placeholder (my-app-image) במניפסט או בהגדרת השירות בתמונה הספציפית שעומדת בדרישות SHA. Google ממליצה ליצור תבניות למניפסטים בדרך הזו, ולהשתמש בשמות תמונות שעומדים בדרישות של SHA כשיוצרים גרסת הפצה.
Cloud Run
מריצים את הפקודה הבאה מהספרייה deploy-policy-quickstart כדי ליצור את הגרסה:
gcloud deploy releases create test-release-001 \
--project=PROJECT_ID \
--region=us-central1 \
--delivery-pipeline=deploy-policy-pipeline \
--images=my-app-image=us-docker.pkg.dev/cloudrun/container/hello@sha256:95ade4b17adcd07623b0a0c68359e344fe54e65d0cb01b989e24c39f2fcd296a
שימו לב לדגל --images=, שמשמש להחלפת ה-placeholder (my-app-image) במניפסט או בהגדרת השירות בתמונה הספציפית שעומדת בדרישות של SHA. Google ממליצה ליצור תבניות למניפסטים בדרך הזו, ולהשתמש בשמות תמונות שעומדים בדרישות של SHA כשיוצרים גרסת הפצה.
בנסיבות רגילות, Cloud Deploy יוצר את הפריסה ליעד הראשון כשיוצרים את הגרסה באמצעות הפקודה הזו. במקרה הזה, מכיוון שההשקות מוגבלות בהתאם למדיניות הפריסה, לא נוצרת השקה. הודעת שגיאה מוצגת בשורת הפקודה:
ERROR: (gcloud.deploy.releases.create) A create-rollout attempt was blocked by the "quickstart-deploy-policy"
policy. Target: "prod-target", Delivery pipeline: "deploy-policy-pipeline", policy rule: "no-rollouts"
שינוי המדיניות מברירת המחדל
כדי לפרוס את האפליקציה לדוגמה שנחסמת על ידי מדיניות הפריסה, צריך לבטל את המדיניות הזו. כדי לעשות את זה, יוצרים השקה חדשה לגרסה הזו, והפעם כוללים את האפשרות --override-deploy-policies:
GKE
מריצים את הפקודה הבאה מהספרייה deploy-policy-quickstart כדי ליצור את הגרסה:
gcloud deploy releases promote --release=test-release-001 \
--project=PROJECT_ID \
--region=us-central1 \
--delivery-pipeline=deploy-policy-pipeline \
--to-target=prod-target \
--override-deploy-policies=quickstart-deploy-policy
Cloud Run
מריצים את הפקודה הבאה מהספרייה deploy-policy-quickstart כדי ליצור את הגרסה:
gcloud deploy releases promote --release=test-release-001 \
--project=PROJECT_ID \
--region=us-central1 \
--delivery-pipeline=deploy-policy-pipeline \
--to-target=prod-target \
--override-deploy-policies=quickstart-deploy-policy
כי כללת את
--override-deploy-policies=quickstart-deploy-policy, ויש לך את התפקיד
roles/clouddeploy.policyAdmin, לכן Cloud Deploy מתעלם ממדיניות הפריסה שיצרת ויוצר את ההשקה לprod-target.
הצגת התוצאות במסוף Google Cloud
במסוף Google Cloud , חוזרים לדף Delivery pipelines של Cloud Deploy כדי לראות את צינור אספקת התוכנה (
deploy-policy-pipeline).לוחצים על השם של צינור העברת הנתונים (
deploy-policy-pipeline).בתרשים של צינור הנתונים מוצג סטטוס הפריסה של האפליקציה. במקרה הזה, המדיניות בוטלה, ולכן הפריסה נוצרה והסתיימה בהצלחה.

פריט התוכן יופיע בכרטיסייה פריטי תוכן בקטע פרטים על צינור ההפצה.
הסרת המשאבים
כדי לא לצבור חיובים לחשבון Google Cloud על המשאבים שבהם השתמשתם בדף הזה:
מוחקים את אשכול GKE או את שירות Cloud Run:
GKE
gcloud container clusters delete quickstart-cluster-qsprod --region=us-central1 --project=PROJECT_IDCloud Run
gcloud run services delete my-deploy-policy-run-service --region=us-central1 --project=PROJECT_IDמחיקת מדיניות הפריסה:
gcloud deploy delete --file=deploypolicy.yaml --region=us-central1 --project=PROJECT_IDמחיקת צינור העברת התוכן, היעד, הגרסה וההשקה:
gcloud deploy delete --file=clouddeploy.yaml --force --region=us-central1 --project=PROJECT_IDמוחקים את שתי קטגוריות האחסון ב-Cloud Storage שנוצרו על ידי Cloud Deploy.
סיימתם את המדריך למתחילים.