קבלת אירועים באמצעות הודעות Pub/Sub‏ (ה-CLI של gcloud)

במדריך למתחילים הזה נסביר איך להגדיר שירות Google Kubernetes Engine ‏ (GKE) כיעד לקבלת אירועים מנושא Pub/Sub באמצעות Eventarc.

במדריך למתחילים הזה תלמדו:

  1. להשלים משימות הכנה כמו הפעלת ממשקי API והגדרת חשבון שירות.
  2. יוצרים אשכול GKE.
  3. מאחלים יעדים ב-GKE ב-Eventarc.
  4. פריסת שירות GKE שמקבל אירועים.
  5. יוצרים טריגר Eventarc שמקשר נושא Pub/Sub לשירות GKE.
  6. יצירה והצגה של אירוע Pub/Sub.

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

  1. נכנסים לחשבון Google Cloud . אם אתם משתמשים חדשים ב- Google Cloud, צרו חשבון כדי שתוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
  2. התקינו את ה-CLI של Google Cloud.

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

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

    gcloud init
  5. יוצרים או בוחרים Google Cloud פרויקט.

    תפקידים שנדרשים כדי לבחור או ליצור פרויקט

    • Select a project: כדי לבחור פרויקט לא צריך תפקיד IAM ספציפי – אפשר לבחור כל פרויקט שקיבלתם בו תפקיד.
    • יצירת פרויקט: כדי ליצור פרויקט, צריך את התפקיד Project Creator (יצירת פרויקטים) (roles/resourcemanager.projectCreator), שכולל את ההרשאה resourcemanager.projects.create. איך מקצים תפקידים
    • יוצרים Google Cloud פרויקט:

      gcloud projects create PROJECT_ID

      מחליפים את PROJECT_ID בשם של פרויקט Google Cloud שיוצרים.

    • בוחרים את הפרויקט שיצרתם: Google Cloud

      gcloud config set project PROJECT_ID

      מחליפים את PROJECT_ID בשם הפרויקט ב- Google Cloud .

  6. מוודאים שהחיוב מופעל בפרויקט Google Cloud .

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

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

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

    gcloud init
  10. יוצרים או בוחרים Google Cloud פרויקט.

    תפקידים שנדרשים כדי לבחור או ליצור פרויקט

    • Select a project: כדי לבחור פרויקט לא צריך תפקיד IAM ספציפי – אפשר לבחור כל פרויקט שקיבלתם בו תפקיד.
    • יצירת פרויקט: כדי ליצור פרויקט, צריך את התפקיד Project Creator (יצירת פרויקטים) (roles/resourcemanager.projectCreator), שכולל את ההרשאה resourcemanager.projects.create. איך מקצים תפקידים
    • יוצרים Google Cloud פרויקט:

      gcloud projects create PROJECT_ID

      מחליפים את PROJECT_ID בשם של פרויקט Google Cloud שיוצרים.

    • בוחרים את הפרויקט שיצרתם: Google Cloud

      gcloud config set project PROJECT_ID

      מחליפים את PROJECT_ID בשם הפרויקט ב- Google Cloud .

  11. מוודאים שהחיוב מופעל בפרויקט Google Cloud .

  12. מעדכנים את הרכיבים של Google Cloud CLI:
    gcloud components update
  13. מפעילים את ממשקי ה-API של Eventarc,‏ מנהל המשאבים ו-Google Kubernetes Engine:
    gcloud services enable eventarc.googleapis.com \
       cloudresourcemanager.googleapis.com \
       container.googleapis.com
  14. מגדירים את משתני ההגדרה שמשמשים במדריך הזה:
    PROJECT_ID=$(gcloud config get-value project)
    CLUSTER_NAME=events-cluster
    SERVICE_NAME=hello-gke
    LOCATION=us-central1
  15. אם אתם יוצרי הפרויקט, מוקצה לכם תפקיד הבעלים הבסיסי (roles/owner). כברירת מחדל, תפקיד ניהול הזהויות והרשאות הגישה (IAM) הזה כולל את ההרשאות שנדרשות לגישה מלאה לרוב המשאבים Google Cloud, ואפשר לדלג על השלב הזה.

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

    ההרשאות הנדרשות

    כדי לקבל את ההרשאות שדרושות לביצוע ההפעלה המהירה הזו, צריך לבקש מהאדמין להקצות לכם את תפקידי ה-IAM הבאים בפרויקט:

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

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

  16. חשוב לשים לב לחשבון השירות שמוגדר כברירת מחדל ב-Compute Engine, כי תצטרכו לצרף אותו לטריגר של Eventarc כדי לייצג את הזהות של הטריגר למטרות בדיקה. חשבון השירות הזה נוצר באופן אוטומטי אחרי שמפעילים או משתמשים בשירות Google Cloud שמשתמש ב-Compute Engine, והוא בפורמט האימייל הבא:

    PROJECT_NUMBER-compute@developer.gserviceaccount.com

    מחליפים את PROJECT_NUMBER במספר הפרויקט ב- Google Cloud. אפשר לראות את מספר הפרויקט בדף Welcome במסוף Google Cloud או על ידי הרצת הפקודה הבאה:

    gcloud projects describe PROJECT_ID --format='value(projectNumber)'

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

  17. מקצים לחשבון השירות שמוגדר כברירת מחדל ב-Compute Engine את התפקיד 'הרשאה לקריאת מינויים ב-Pub/Sub' (roles/pubsub.subscriber) בפרויקט, כדי שהטריגר של Eventarc יוכל לשלוף אירועים מ-Pub/Sub.
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \
        --role=roles/pubsub.subscriber
  18. אם הפעלתם את סוכן השירות של Cloud Pub/Sub ב-8 באפריל 2021 או לפני כן, כדי לתמוך בבקשות push מאומתות של Pub/Sub, צריך להקצות לסוכן השירות את התפקיד 'יצירת אסימונים בחשבון שירות' (roles/iam.serviceAccountTokenCreator). אחרת, התפקיד הזה מוענק כברירת מחדל:
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com \
        --role=roles/iam.serviceAccountTokenCreator

יצירת אשכול GKE

אשכול GKE מורכב לפחות ממכונת מישור בקרה אחת של האשכול ומכמה מכונות worker שנקראות צמתים. צמתים הם מכונות וירטואליות (VM) של Compute Engine שמריצות את תהליכי Kubernetes שנדרשים כדי שהן יהיו חלק מהאשכול. אתם פורסים אפליקציות באשכולות, והאפליקציות פועלות בצמתים.

יוצרים אשכול Autopilot בשם events-cluster:

gcloud container clusters create-auto $CLUSTER_NAME \
    --region $LOCATION

יכול להיות שיחלפו כמה דקות עד שהאשכול ייווצר. אחרי שהאשכול נוצר, הפלט אמור להיראות כך:

Creating cluster events-cluster...done.
Created [https://container.googleapis.com/v1/projects/MY_PROJECT/zones/us-central1/clusters/events-cluster].
[...]
STATUS: RUNNING

ייווצר אשכול GKE בשם events-cluster בפרויקט עם מזהה פרויקט Google Cloud של MY_PROJECT.

הפעלת יעדי GKE

לכל טריגר שמטרגט שירות GKE,‏ Eventarc יוצר רכיב להעברת אירועים ששולף אירועים מ-Pub/Sub ומעביר אותם ליעד. כדי ליצור את הרכיב ולנהל משאבים באשכול GKE, צריך להעניק הרשאות לסוכן השירות של Eventarc:

  1. הפעלת יעדי GKE ל-Eventarc:

    gcloud eventarc gke-destinations init
  2. בהנחיה לקשירת התפקידים הנדרשים, מזינים y.

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

    • compute.viewer
    • container.developer
    • iam.serviceAccountAdmin

יצירת יעד של שירות GKE

פריסת שירות GKE שיקבל אירועים ויתעד אותם באמצעות תמונה מוכנה מראש, us-docker.pkg.dev/cloudrun/container/hello:

  1. ‫Kubernetes משתמש בקובץ YAML שנקרא kubeconfig כדי לאחסן את פרטי האימות של האשכול עבור kubectl. מעדכנים את הקובץ kubeconfig בפרטי הכניסה ובפרטי נקודת הקצה כדי להפנות את kubectl אל אשכול GKE:

    gcloud container clusters get-credentials $CLUSTER_NAME \
        --region $LOCATION
    
  2. יוצרים פריסת Kubernetes:

    kubectl create deployment $SERVICE_NAME \
        --image=us-docker.pkg.dev/cloudrun/container/hello
    
  3. חשיפה כשירות Kubernetes:

    kubectl expose deployment $SERVICE_NAME \
        --type ClusterIP \
        --port 80 \
        --target-port 8080
    

יצירת טריגר Eventarc

כשמפרסמים הודעה בנושא Pub/Sub, טריגר Eventarc שולח הודעות לשירות hello-gkeGKE.

  1. יוצרים טריגר GKE כדי להאזין להודעות Pub/Sub:

    נושא חדש ב-Pub/Sub

    gcloud eventarc triggers create gke-trigger-pubsub \
        --location="$LOCATION" \
        --destination-gke-cluster=$CLUSTER_NAME \
        --destination-gke-location=$LOCATION \
        --destination-gke-namespace=default \
        --destination-gke-service=$SERVICE_NAME \
        --destination-gke-path=/ \
        --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
        --service-account="PROJECT_NUMBER-compute@developer.gserviceaccount.com"
    

    כך נוצר נושא Pub/Sub חדש וטריגר בשם gke-trigger-pubsub.

    נושא Pub/Sub קיים

    gcloud eventarc triggers create gke-trigger-pubsub \
        --location="$LOCATION" \
        --destination-gke-cluster=$CLUSTER_NAME \
        --destination-gke-location=$LOCATION \
        --destination-gke-namespace=default \
        --destination-gke-service=$SERVICE_NAME \
        --destination-gke-path=/ \
        --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
        --service-account="PROJECT_NUMBER-compute@developer.gserviceaccount.com" \
        --transport-topic=projects/PROJECT_ID/topics/TOPIC_ID
    

    מחליפים את מה שכתוב בשדות הבאים:

    • PROJECT_ID: מזהה הפרויקט ב- Google Cloud
    • TOPIC_ID: המזהה של נושא ה-Pub/Sub הקיים. נוצר טריגר בשם gke-trigger-pubsub לנושא ה-Pub/Sub הקיים.
  2. מוודאים שהטריגר נוצר בהצלחה. יכול להיות שיחלפו עד שתי דקות עד שהטריגר יפעל באופן מלא.

     gcloud eventarc triggers list
    

    הפלט אמור להיראות כך:

    NAME: gke-trigger-pubsub
    TYPE: google.cloud.pubsub.topic.v1.messagePublished
    DESTINATION: GKE: hello-gke
    ACTIVE: Yes
    LOCATION: us-central1
    

יצירה וצפייה באירוע

אפשר ליצור אירוע שיפעיל את שירות GKE על ידי פרסום הודעה בנושא Pub/Sub. אחר כך תוכלו לראות את ההודעה ביומני ה-pod.

  1. מאתרים ומגדירים את נושא ה-Pub/Sub כמשתנה סביבה:

    TOPIC=$(gcloud eventarc triggers describe gke-trigger-pubsub \
        --location=us-central1 \
        --format='value(transport.pubsub.topic)')
  2. שולחים הודעה לנושא ב-Pub/Sub כדי ליצור אירוע:

    gcloud pubsub topics publish $TOPIC --message="Hello World"

    שירות GKE רושם את ההודעה של האירוע ביומנים.

  3. כדי לראות את הודעת האירוע:

    1. מאתרים את מזהה הפוד:

      kubectl get pods

      הפלט אמור להיראות כך:

      NAME                                         READY   STATUS             RESTARTS   AGE
      hello-gke-645964f578-2mjjt                   1/1     Running            0          35s

      מעתיקים את NAME של הפוד כדי להשתמש בו בשלב הבא.

    2. בודקים את היומנים של ה-pod:

      kubectl logs NAME

      מחליפים את NAME בשם הפוד שהעתקתם.

    3. מחפשים רשומה ביומן שדומה ל:

      2022/02/24 22:23:49 Hello from Cloud Run! The container started successfully and is listening for HTTP requests on $PORT
      {"severity":"INFO","eventType":"google.cloud.pubsub.topic.v1.messagePublished","message":"Received event of type google.cloud.pubsub.topic.v1.messagePublished. Event data: Hello World"[...]}
      

הסרת המשאבים

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

אתם יכולים:

  1. מחיקת טריגר Eventarc

    הפעולה הזו תמחק גם את נושא ה-Pub/Sub המשויך.

  2. מחיקת אשכול GKE.

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

כדי למחוק Google Cloud פרויקט:

gcloud projects delete PROJECT_ID

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

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

קבלת אירועים באמצעות יומני ביקורת של Cloud (Google Cloud CLI)