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

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

במדריך למתחילים הזה תבצעו את הפעולות הבאות:

  1. יוצרים הגדרה של Skaffold ומניפסט של Kubernetes או הגדרת שירות של Cloud Run כדי לציין את תמונת מאגר התוכן (שנוצרה מראש) לפריסה.

  2. הגדרת צינור עיבוד נתונים לפריסה ב-Cloud Deploy ויעד פריסה אחד, שמפנה לאשכול GKE אחד או לשירות Cloud Run אחד.

    הצנרת הזו כוללת רק שלב אחד, עבור היעד היחיד.

  3. הגדרת מדיניות פריסה ליעד.

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

  4. יוצרים גרסה.

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

  5. מעיינים בתוצאות במסוף Google Cloud .

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

  6. שינוי מדיניות הפריסה מברירת המחדל.

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

  7. מעיינים בתוצאות במסוף Google Cloud .

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

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

  1. נכנסים לחשבון Google Cloud . אם אתם משתמשים חדשים ב- Google Cloud, צרו חשבון כדי שתוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
  2. 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the Cloud Deploy, Cloud Build, GKE, and Cloud Storage APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  5. התקינו את ה-CLI של Google Cloud.

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

  7. כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:

    gcloud init
  8. 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  9. Verify that billing is enabled for your Google Cloud project.

  10. Enable the Cloud Deploy, Cloud Build, GKE, and Cloud Storage APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  11. התקינו את ה-CLI של Google Cloud.

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

  13. כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:

    gcloud init
  14. אם כבר התקנתם את Google Cloud CLI, צריך לוודא שאתם מריצים את הגרסה העדכנית:

    gcloud components update
    
  15. מוודאים שלחשבון השירות שמוגדר כברירת מחדל ב-Compute Engine יש הרשאות מספיקות.

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

    1. קודם מוסיפים את התפקיד clouddeploy.jobRunner:
      gcloud projects add-iam-policy-binding PROJECT_ID \
          --member=serviceAccount:$(gcloud projects describe PROJECT_ID \
          --format="value(projectNumber)")-compute@developer.gserviceaccount.com \
          --role="roles/clouddeploy.jobRunner"
      
    2. מוסיפים את תפקיד המפתח לזמן הריצה הספציפי.
      • ב-GKE:

        gcloud projects add-iam-policy-binding PROJECT_ID \
            --member=serviceAccount:$(gcloud projects describe PROJECT_ID \
            --format="value(projectNumber)")-compute@developer.gserviceaccount.com \
            --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@developer.gserviceaccount.com \
            --role="roles/run.developer"
        

    3. מוסיפים את התפקיד iam.serviceAccountUser, שכולל את ההרשאה actAs לפריסה בסביבת זמן הריצה:
      gcloud iam service-accounts add-iam-policy-binding $(gcloud projects describe PROJECT_ID \
          --format="value(projectNumber)")-compute@developer.gserviceaccount.com \
          --member=serviceAccount:$(gcloud projects describe PROJECT_ID \
          --format="value(projectNumber)")-compute@developer.gserviceaccount.com \
          --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 שבו ישתמשו כדי לפרוס את האפליקציה לדוגמה.

  1. פותחים חלון טרמינל.

  2. יוצרים ספרייה חדשה ועוברים אליה.

    mkdir deploy-policy-quickstart
    cd deploy-policy-quickstart
    
  3. יוצרים קובץ בשם 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מאמר בנושא הפניה.

  4. יוצרים את המניפסט של האפליקציה – הגדרת שירות ל-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, שמוחלף באימג' הספציפי כשיוצרים את הגרסה.

יצירת צינור העברת נתונים ויעד

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

  1. יוצרים את צינור ההפצה ואת הגדרת היעד:

    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-qsprod
    

    Cloud 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
    
  2. רושמים את צינור עיבוד הנתונים ואת משאבי היעד בשירות Cloud Deploy:

    gcloud deploy apply --file=clouddeploy.yaml --region=us-central1 --project=PROJECT_ID
    

    עכשיו יש לכם צינור להעברת נתונים עם יעד אחד.

  3. מאשרים את הצנרת ואת היעדים:

    במסוף Google Cloud , נכנסים לדף Delivery pipelines של Cloud Deploy כדי לראות רשימה של צינורות העברת הנתונים שזמינים לכם.

    פתיחת הדף Delivery pipelines

    צינור העברת הנתונים שיצרתם מוצג, עם יעד אחד שמופיע בעמודה יעדים.

    דף צינור עיבוד נתונים לפריסה במסוף Google Cloud , שבו מוצג צינור עיבוד הנתונים

יצירת מדיניות הפריסה

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

  1. באותה תיקייה שבה יצרתם את צינור ההפצה ואת יעדי ההפצה, יוצרים קובץ חדש, 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. זו לא מדיניות ריאלית, אבל היא מוגדרת כך רק במדריך הזה, כדי לוודא שהמדיניות תהיה במקום כשיוצרים את הגרסה.

  2. רושמים את משאב מדיניות הפריסה בשירות Cloud Deploy:

    gcloud deploy apply --file=deploypolicy.yaml --region=us-central1 --project=PROJECT_ID
    
  3. מאשרים את מדיניות הפריסה:

    במסוף Google Cloud , עוברים לדף Deploy policies של Cloud Deploy כדי לראות רשימה של המדיניות הזמינה.

    פתיחה של הדף 'פריסת מדיניות'

    מדיניות הפריסה שיצרתם זה עתה מוצגת.

    הדף deploy policies במסוף Google Cloud

יצירת גרסה

הפצה היא המשאב המרכזי ב-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=, שמשמש להחלפת הפלייסהולדר (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=, שמשמש להחלפת הפלייסהולדר (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

  1. במסוף Google Cloud , חוזרים לדף Delivery pipelines של Cloud Deploy כדי לראות את צינור העברת השינויים (deploy-policy-pipeline).

    פתיחת הדף Delivery pipelines

  2. לוחצים על השם של צינור העברת הנתונים (deploy-policy-pipeline).

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

    המחשה של תהליך השליחה שמראה את ההשקה

    פריט התוכן יופיע בכרטיסייה פריטי תוכן בקטע פרטים על צינור ההפצה.

הסרת המשאבים

כדי לא לצבור חיובים לחשבון Google Cloud על המשאבים שבהם השתמשתם בדף הזה, פועלים לפי השלבים הבאים:

  1. מחיקה של אשכול GKE או שירות Cloud Run:

    GKE

    gcloud container clusters delete quickstart-cluster-qsprod --region=us-central1 --project=PROJECT_ID
    

    Cloud Run

    gcloud run services delete my-deploy-policy-run-service --region=us-central1 --project=PROJECT_ID
    
  2. מחיקת מדיניות הפריסה:

    gcloud deploy delete --file=deploypolicy.yaml --region=us-central1 --project=PROJECT_ID
    
  3. מחיקת צינור העברת התוכן, היעד, הגרסה וההשקה:

    gcloud deploy delete --file=clouddeploy.yaml --force --region=us-central1 --project=PROJECT_ID
    
  4. מוחקים את שתי הקטגוריות של Cloud Storage שנוצרו על ידי Cloud Deploy.

    פתיחת הדף Cloud Storage browser

סיימתם את המדריך למתחילים!

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