שילוב של Connect gateway עם Cloud Build

זהו מדריך בסיסי לשילוב של Cloud Build עם שער Connect, שמאפשר ליצור צינור CI/CD לאשכולות GKE שפועלים בסביבות שונות.

המדריך הזה מבוסס על ההנחה שאתם מכירים את הקטעים הקודמים במדריך ל-Connect gateway, וגם את Cloud Build. ההוראות האלה מתבססות על cloud-sdk כלי ליצירת תמונות, שנדרש בו תסריט קצר (כפי שמוסבר בהמשך).

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

  • ודאו שכלי שורת הפקודה הבאים מותקנים:

    • הגרסה העדכנית של Google Cloud CLI, שכוללת את gcloud, כלי שורת הפקודה לאינטראקציה עם Google Cloud.
    • kubectl, כלי שורת הפקודה לאינטראקציה עם Kubernetes.

    אם אתם משתמשים ב-Cloud Shell כסביבת המעטפת שלכם לאינטראקציה עם Google Cloud, הכלים האלה מותקנים אצלכם.

  • מוודאים שהפעלתם את ה-CLI של gcloud לשימוש בפרויקט.

  • מוודאים ששער Connect וממשקי API נדרשים אחרים מופעלים בפרויקט, כמו שמתואר במדריך ההגדרה.

1. הקצאת תפקידי IAM לחשבון השירות ב-Cloud Build

כברירת מחדל, Cloud Build משתמש בחשבון שירות כדי להריץ את כל העבודות הנדרשות, עם כתובת בפורמט Google Cloud .MY_PROJECT_NUMBER-compute@cloudbuild.gserviceaccount.com אפשר למצוא את כתובת האימייל בחשבון השירות של הפרויקט בקטע Cloud Build - הרשאות במסוףGoogle Cloud .

צילום מסך של דף ההגדרות של Cloud Build

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

2. ציון מדיניות RBAC לחשבון השירות ב-Cloud Build

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

מומלץ מאוד להשתמש ב-Policy Controller כדי לפרוס ולתחזק מדיניות RBAC בכמה אשכולות.

3. יצירת צינור עיבוד נתונים ב-Cloud Build

כדי להגדיר את צינור עיבוד הנתונים, צריך קובץ cloudbuild.yaml בתהליך העבודה של Cloud Build. הדוגמה הבאה היא פשוטה ומציגה פריסה של מניפסט סטטי לשני אשכולות שונים (אחד של GKE ב- Google Cloudואחד ב-VMware). מידע נוסף על הגדרת צינור עיבוד נתונים ב-Cloud Build זמין במסמכי התיעוד של Cloud Build.

steps:
- name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
  entrypoint: bash
  id: Deploy to cluster on Google Cloud
  args:
  - '-c'
  - |
    set -x && \
    export KUBECONFIG="$(pwd)/gateway-kubeconfig" && \
    gcloud container fleet memberships get-credentials my-gke-cluster && \
    kubectl --kubeconfig gateway-kubeconfig apply -f myapp.yaml
- name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
  entrypoint: bash
  id: Deploy to cluster on VMware
  args:
  - '-c'
  - |
    set -x && \
    export KUBECONFIG="$(pwd)/gateway-kubeconfig" && \
    gcloud container fleet memberships get-credentials my-vmware-cluster && \
    kubectl --kubeconfig gateway-kubeconfig apply -f myapp.yaml

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

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-nginx
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 3
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80

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

שימוש מתקדם

מכיוון שהדוגמה שלנו מבוססת על מושגים סטנדרטיים של Cloud Build, אתם יכולים להתאים אותה אישית לצרכים הספציפיים שלכם בתחום ה-CI/CD. לדוגמה, אם רוצים ליצור תמונה מאפס ולפרוס אותה בצינור העיבוד, אפשר להשתמש במצב ההכנה של כלי ה-gke-deploy builder. לדוגמה, תצורת ה-build הבאה של Cloud Build:

  1. יוצר קובץ אימג' של Docker מ-Dockerfile שנמצא בספריית הבסיס של מאגר Git, ומתייג אותו באמצעות ה-SHA של Git.
  2. הפקודה מעלה את התמונה המתויגת אל Container Registry של הפרויקט.
  3. הסקריפט מכין את קובצי המניפסט של Kubernetes בספרייה manifest על ידי הגדרת תגי התמונות הנכונים, ומציב את קובצי המניפסט של הפלט בספרייה output/expanded.
  4. פריסה לאשכול GKE באתר באמצעות Connect gateway.
steps:
- name: 'gcr.io/cloud-builders/docker'
  id: "Build Container"
  args: ['build', '--tag=gcr.io/$PROJECT_ID/demo-app:$SHORT_SHA', '.']
- name: 'gcr.io/cloud-builders/docker'
  id: "Push to GCR"
  args: ['push', 'gcr.io/$PROJECT_ID/demo-app:$SHORT_SHA']
- name: "gcr.io/cloud-builders/gke-deploy"
  id: "Prepare Manifests"
  args:
  - prepare
  - --filename=manifests/
  - --image=gcr.io/$PROJECT_ID/demo-app:$SHORT_SHA
- name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
  entrypoint: bash
  id: "Deploy to cluster on VMware
  args:
  - '-c'
  - |
    set -x && \
    export KUBECONFIG="$(pwd)/gateway-kubeconfig" && \
    gcloud container fleet memberships get-credentials my-vmware-cluster && \
    kubectl --kubeconfig=gateway-kubeconfig apply -f output/expanded

שימו לב שבדוגמה הזו היינו צריכים ליצור סוד למשיכת תמונות כדי לאשר לאשכול GKE המקומי למשוך תמונות מ-Container Registry.

רעיונות נוספים לשימוש ב-Cloud Build זמינים במסמכי התיעוד של Cloud Build.