שילוב של 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 @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. לדוגמה, הגדרת Cloud Build הבאה:

  1. יוצר קובץ אימג' של Docker מ-Dockerfile שנמצא בספריית הבסיס של מאגר Git, ומתייג אותו באמצעות Git SHA.
  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.