שימוש בפרמטרים של פריסה

בדף הזה מוסבר איך להשתמש ב-Cloud Deploy כדי לפרוס אפליקציה לדוגמה ל-2 יעדים בו-זמנית (פריסה מקבילה), תוך העברת ערך פרמטר שונה לכל מניפסט או הגדרת שירות שעברו עיבוד, באמצעות 3 שיטות שונות.

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

  1. יוצרים שני אשכולות GKE או שני שירותים של Cloud Run.

    אפשר גם להשתמש באשכולות GKE מצורפים, אבל במדריך למתחילים הזה משתמשים רק ב-GKE וב-Cloud Run.

  2. יוצרים הגדרת Skaffold ומניפסט של Kubernetes או הגדרת שירות של Cloud Run.

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

  3. הגדרת צינור עיבוד הנתונים לפריסה ויעדי הפריסה ב-Cloud Deploy.

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

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

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

  6. אפשר לראות את ההשקה של בקר התנועה ואת ההשקות של בקרים משניים במסוף 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, Cloud Run, 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, Cloud Run, 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. אם ה-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, יוצרים שני אשכולות: deploy-params-cluster-prod1 ו-deploy-params-cluster-prod2, עם הגדרות ברירת מחדל. נקודות הקצה של Kubernetes API באשכולות צריכות להיות נגישות ברשת מהאינטרנט הציבורי. כברירת מחדל, יש גישה חיצונית לאשכולות GKE.

gcloud container clusters create-auto deploy-params-cluster-prod1 \
                 --project=PROJECT_ID \
                 --region=us-central1 \
                 && gcloud container clusters create-auto deploy-params-cluster-prod2 \
                 --project=PROJECT_ID \
                 --region=us-west1

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

‫Cloud Deploy משתמש ב-Skaffold כדי לספק את הפרטים לגבי מה לפרוס ואיך לפרוס אותו בצורה נכונה עבור יעדים נפרדים.

במדריך למתחילים הזה, יוצרים קובץ skaffold.yaml שמזהה את מניפסט Kubernetes או את הגדרת השירות של Cloud Run שבהם יש להשתמש כדי לפרוס את האפליקציה לדוגמה.

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

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

    GKE

    mkdir deploy-params-gke-quickstart
    cd deploy-params-gke-quickstart
    

    Cloud Run

    mkdir deploy-params-run-quickstart
    cd deploy-params-run-quickstart
    
  3. יוצרים קובץ בשם skaffold.yaml עם התוכן הבא:

    GKE

    apiVersion: skaffold/v4beta7
    kind: Config
    manifests:
      rawYaml:
      - kubernetes.yaml
    deploy:
      kubectl: {}
    

    Cloud Run

    apiVersion: skaffold/v4beta7
    kind: Config
    manifests:
      rawYaml:
      - service.yaml
    deploy:
      cloudrun: {}
    

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

    מידע נוסף על הקובץ הזה מופיע בskaffold.yamlמאמרי העזרה.

  4. יוצרים את ההגדרה של האפליקציה – הגדרת שירות ל-Cloud Run או מניפסט של Kubernetes ל-GKE.

    GKE

    יוצרים קובץ בשם kubernetes.yaml עם התוכן הבא:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: my-deployment
    spec:
      replicas: 1 # from-param: ${replicaCount}
      selector:
        matchLabels:
          app: my-app
      template:
        metadata:
          labels:
            app: my-app
          annotations:
            commit: defaultShaValue # from-param: ${git-sha}
        spec:
          containers:
          - name: nginx
            image: my-app-image
            env:
            - name: envvar1
              value: default1 # from-param: ${application_env1}
            - name: envvar2
              value: default2 # from-param: ${application_env2}
    

    הקובץ הזה הוא מניפסט של Kubernetes, שמוחל על האשכול כדי לפרוס את האפליקציה. קובץ האימג' של הקונטיינר לפריסה מוגדר כאן כ-placeholder, ‏ my-app-image, שמוחלף באימג' הספציפי כשיוצרים את הגרסה.

    Cloud Run

    יוצרים קובץ בשם service.yaml עם התוכן הבא:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: my-parallel-run-service
    spec:
      autoscaling.knative.dev/minScale: 1 # from-param: ${minInstances}
      selector:
        matchLabels:
          app: my-app
      template:
        metadata:
          annotations:
            commit: defaultShaValue # from-param: ${git-sha}
        spec:
          containers:
          - image: my-app-image
            env:
            - name: envvar1
              value: defaultValue1 # from-param: ${application_env1}
            - name: envvar2
              value: defaultValue2 # from-param: ${application_env2}
    

    הקובץ הזה הוא הגדרה בסיסית של שירות Cloud Run, שמשמשת לפריסת האפליקציה. קובץ האימג' של הקונטיינר שרוצים לפרוס מוגדר כאן כפלייסהולדר, my-app-image, שמוחלף באימג' הספציפי כשיוצרים את הגרסה.

יצירת פייפליין של משלוחים ויעדים

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

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

    GKE

    בספרייה deploy-params-gke-quickstart, יוצרים קובץ חדש: clouddeploy.yaml, עם התוכן הבא:

    apiVersion: deploy.cloud.google.com/v1
    kind: DeliveryPipeline
    metadata:
      name: my-params-demo-app-1
    description: main application pipeline
    serialPipeline:
      stages:
      - targetId: params-prod-multi
        deployParameters:
        - values:
            replicaCount: "2"
          # Apply the deploy parameter replicaCount: "2" to the target with this label
          matchTargetLabels:
            label1: label1
        - values:
            replicaCount: "3"
          # Apply the deploy parameter replicaCount: "3" to the target with this label
          matchTargetLabels:
            label2: label2
    ---
    
    apiVersion: deploy.cloud.google.com/v1
    kind: Target
    metadata:
      name: params-prod-multi
    description: production clusters
    multiTarget:
      targetIds: [params-prod-a, params-prod-b]
    ---
    
    apiVersion: deploy.cloud.google.com/v1
    kind: Target
    metadata:
      name: params-prod-a
      labels:
        label1: label1
    description: production cluster 1
    deployParameters:
      application_env1: "sampleValue1"
    gke:
      cluster: projects/PROJECT_ID/locations/us-central1/clusters/deploy-params-cluster-prod1
    ---
    
    apiVersion: deploy.cloud.google.com/v1
    kind: Target
    metadata:
      name: params-prod-b
      labels:
        label2: label2
    description: production cluster 2
    deployParameters:
      application_env2: "sampleValue2"
    gke:
      cluster: projects/PROJECT_ID/locations/us-west1/clusters/deploy-params-cluster-prod2
    

    Cloud Run

    בספרייה deploy-params-run-quickstart, יוצרים קובץ חדש: clouddeploy.yaml, עם התוכן הבא:

    apiVersion: deploy.cloud.google.com/v1
    kind: DeliveryPipeline
    metadata:
      name: my-params-demo-app-1
    description: main application pipeline
    serialPipeline:
      stages:
      - targetId: params-prod-multi
        deployParameters:
        - values:
            minInstances: "2"
          # Apply the deploy parameter minInstances: "2" to the target with this label
          matchTargetLabels:
            label1: label1
        - values:
            minInstances: "3"
          # Apply the deploy parameter minInstances: "3" to the target with this label
          matchTargetLabels:
            label2: label2
    ---
    
    apiVersion: deploy.cloud.google.com/v1
    kind: Target
    metadata:
      name: params-prod-multi
    description: production clusters
    multiTarget:
      targetIds: [params-prod-a, params-prod-b]
    ---
    
    apiVersion: deploy.cloud.google.com/v1
    kind: Target
    metadata:
      name: params-prod-a
      labels:
        label1: label1
    description: production cluster 1
    deployParameters:
      application_env1: "sampleValue1"
    run:
      location: projects/PROJECT_ID/locations/us-central1
    ---
    
    apiVersion: deploy.cloud.google.com/v1
    kind: Target
    metadata:
      name: params-prod-b
      labels:
        label2: label2
    description: production cluster 2
    deployParameters:
      application_env2: "sampleValue2"
    run:
      location: projects/PROJECT_ID/locations/us-west1
    
  2. רושמים את צינור עיבוד הנתונים ואת היעדים בשירות Cloud Deploy:

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

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

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

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

    פתיחת הדף Delivery pipelines

    מוצג צינור העברת הנתונים שיצרתם. שימו לב שבעמודה Targets (יעדים) מופיע יעד אחד, למרות שהגדרתם שלושה יעדים (יעד אחד מרובה ויעדי צאצא).clouddeploy.yaml

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

    שימו לב שהיעד היחיד שמופיע הוא היעד המרובה params-prod-multi. יעדים של ילדים לא מוצגים.

יצירת גרסה

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

GKE

מריצים את הפקודה הבאה מהספרייה deploy-gke-parallel-quickstart כדי ליצור משאב release שמייצג את קובץ האימג' של הקונטיינר לפריסה:

 gcloud deploy releases create test-release-001 \
   --project=PROJECT_ID \
   --region=us-central1 \
   --delivery-pipeline=my-params-demo-app-1 \
   --images=my-app-image=gcr.io/google-containers/nginx@sha256:f49a843c290594dcf4d193535d1f4ba8af7d56cea2cf79d1e9554f077f1e7aaa \
   --deploy-parameters="git-sha=f787cac"

שימו לב לדגל --images=, שמשמש להחלפת ה-placeholder ‏ (my-app-image) במניפסט בתמונה ספציפית עם SHA. ‫Google ממליצה ליצור תבניות למניפסטים בדרך הזו, ולהשתמש בשמות תמונות שעומדים בדרישות של SHA כשיוצרים גרסת הפצה.

Cloud Run

מריצים את הפקודה הבאה מהספרייה deploy-run-parallel-quickstart כדי ליצור משאב release שמייצג את קובץ האימג' של הקונטיינר לפריסה:

 gcloud deploy releases create test-release-001 \
   --project=PROJECT_ID \
   --region=us-central1 \
   --delivery-pipeline=my-params-demo-app-1 \
   --images=my-app-image=us-docker.pkg.dev/cloudrun/container/hello@sha256:95ade4b17adcd07623b0a0c68359e344fe54e65d0cb01b989e24c39f2fcd296a \
   --deploy-parameters="git-sha=f787cac"

שימו לב לדגל --images=, שבו משתמשים כדי להחליף את ה-placeholder ‏ (my-app-image) בהגדרת השירות בתמונה הספציפית שמוגדרת באמצעות SHA. ‫Google ממליצה ליצור תבניות להגדרות של השירותים והמשימות בדרך הזו, ולהשתמש בשמות תמונות שעומדים בדרישות של SHA כשיוצרים מהדורות.

כמו תמיד, כשיוצרים מהדורה, נוצרת פריסה אוטומטית ליעד הראשון בצינור (אלא אם מציינים יעד ספציפי באמצעות --to-target=). במדריך הזה, היעד הזה הוא יעד מרובה, ולכן rollout הוא 'פריסת בקרה' לשני יעדי צאצא, ואין יעדים נוספים בצינור ההפצה. המשמעות היא שהפריסה של האפליקציה מתבצעת בכל מקום כשיוצרים את ההשקה.

צפייה בתוצאות במסוף Google Cloud

אחרי שיצרתם את הגרסה ואת הפריסה של בקר התנועה ואת פריסות המשנה, פריסות המשנה האלה נפרסות (או נמצאות בתהליך פריסה) באשכולות GKE או בשירותי Cloud Run המתאימים.

  1. במסוף Google Cloud , עוברים לדף Delivery pipelines של Cloud Deploy כדי לראות את צינור העברת התוכן my-parallel-demo-app-1.

    פתיחת הדף Delivery pipelines

  2. לוחצים על השם של צינור העברת הנתונים 'my-parallel-demo-app-1'.

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

    תרשים של תהליך השליחה במסוף Google Cloud

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

  3. לוחצים על שם הגרסה, test-release-001.

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

    rollouts in Google Cloud console

  4. בקטע Release details, בוחרים בכרטיסייה Artifacts.

    בטבלה Deploy parameters (פרמטרים לפריסה) מפורטים כל הפרמטרים שהגדרתם במניפסט והערכים שסיפקתם לפרמטרים האלה:

    GKE

    פרמטרים וערכים של פריסה שמוצגים במסוף Google Cloud

    Cloud Run

    פרמטרים וערכים של פריסה שמוצגים במסוף Google Cloud

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

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

  6. לוחצים על הצגת ההשוואה, בוחרים באפשרות params-prod-a ליעד אחד ובאפשרות params-prod-b ליעד השני.

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

    GKE

    ההבדלים בין המניפסטים שעברו עיבוד, עם הערכים שהועברו

    Cloud Run

    מניפסט שעבר עיבוד ספציפי ליעד, עם ערכים שהועברו

הסרת המשאבים

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

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

    GKE

    gcloud container clusters delete deploy-params-cluster-prod1 --region=us-central1 --project=PROJECT_ID \
    && gcloud container clusters delete deploy-params-cluster-prod2 --region=us-west1 --project=PROJECT_ID
    

    Cloud Run

    gcloud run services delete my-parallel-run-service --region=us-central1 --project=PROJECT_ID \
    && gcloud run services delete my-parallel-run-service --region=us-west1 --project=PROJECT_ID
    
  2. מוחקים את צינור העברת הנתונים, את היעדים המרובים, את יעדי המשנה, את הגרסה ואת ההשקות:

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

    אחד מסתיים ב-_clouddeploy והשני הוא [region].deploy-artifacts.[project].appspot.com.

    פתיחת הדף Cloud Storage browser

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

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