מדריך למתחילים בנושא Kf

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

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

סקירה כללית

  • אשכול GKE צריך לעמוד בדרישות הבאות:

    • אופציונלי, אבל מומלץ: האשכול צריך להיות ייעודי ל-Kf. אנחנו ממליצים להתקין רק את Kf ואת התלויות שלו כדי לשמור על מטריצת התאימות.

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

    • סוג המכונה המינימלי שכולל לפחות ארבעה vCPU, כמו e2-standard-4. אם לסוג המכונה של האשכול אין לפחות ארבע ליבות וירטואליות (vCPU), צריך לשנות את סוג המכונה כמו שמתואר במאמר העברת עומסי עבודה לסוגי מכונות שונים.

    • אופציונלי, אבל מומלץ: רישום האשכול לערוץ הפצה. אם יש לכם גרסת GKE סטטית, פועלים לפי ההוראות במאמר רישום של אשכול קיים בערוץ הפצה.

    • Workload Identity מופעל.

    • Artifact Registry מופעל.

    • Cloud Service Mesh‏ (ASM).

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

    • חשבון שירות של Google עם מדיניות IAM הבאה (הוראות ליצירה מפורטות בהמשך):

      • roles/iam.serviceAccountAdmin
      • serviceAccount:${CLUSTER_PROJECT}.svc.id.goog[kf/controller] (למשתתף serviceAccount:${CLUSTER_PROJECT}.svc.id.goog[kf/controller])

בקטע ניקוי יש הוראות למחיקת האשכול.

הפעלת התמיכה ב-Compute Engine

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

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

  6. מפעילים את Compute Engine API.

    הפעלת ה-API

הפעלה והגדרה של GKE

לפני שמתחילים, חשוב לוודא שביצעתם את הפעולות הבאות:

  • מפעילים את ממשק Google Kubernetes Engine API.
  • הפעלת Google Kubernetes Engine API
  • כדי להשתמש ב-CLI של Google Cloud למשימה הזו, צריך להתקין ואז להפעיל את gcloud CLI. אם התקנתם בעבר את ה-CLI של gcloud, מריצים את הפקודה gcloud components update כדי לקבל את הגרסה העדכנית. יכול להיות שגרסאות קודמות של ה-CLI של gcloud לא יתמכו בהרצת הפקודות שמופיעות במסמך הזה.

יצירה והכנה של אשכול GKE חדש

הגדרת משתני סביבה

Linux

export PROJECT_ID=YOUR_PROJECT_ID
export CLUSTER_PROJECT_ID=YOUR_PROJECT_ID
export CLUSTER_NAME=kf-cluster
export COMPUTE_ZONE=us-central1-a
export COMPUTE_REGION=us-central1
export CLUSTER_LOCATION=${COMPUTE_ZONE}
export NODE_COUNT=4
export MACHINE_TYPE=e2-standard-4
export NETWORK=default
export KF_VERSION=v2.1.0
export TEKTON_VERSION=v0.19.0

Windows Powershell

Set-Variable -Name PROJECT_ID -Value YOUR_PROJECT_ID
Set-Variable -Name CLUSTER_PROJECT_ID -Value YOUR_PROJECT_ID
Set-Variable -Name CLUSTER_NAME -Value kf-cluster
Set-Variable -Name COMPUTE_ZONE -Value us-central1-a
Set-Variable -Name COMPUTE_REGION -Value us-central1
Set-Variable -Name CLUSTER_LOCATION -Value $COMPUTE_ZONE
Set-Variable -Name NODE_COUNT -Value 4
Set-Variable -Name MACHINE_TYPE -Value e2-standard-4
Set-Variable -Name NETWORK -Value default
Set-Variable -Name KF_VERSION -Value v2.1.0
Set-Variable -Name TEKTON_VERSION -Value v0.19.0

הגדרת חשבון שירות

יוצרים חשבון שירות של GCP‏ (GSA) שישויך לחשבון שירות של Kubernetes באמצעות Workload Identity. כך לא צריך ליצור ולהוסיף מפתח של חשבון שירות.

  1. יוצרים את חשבון השירות שבו Kf ישתמש.

    gcloud iam service-accounts create ${CLUSTER_NAME}-sa \
      --project=${CLUSTER_PROJECT_ID} \
      --description="GSA for Kf ${CLUSTER_NAME}" \
      --display-name="${CLUSTER_NAME}"
  2. מאפשרים לחשבון השירות לשנות את המדיניות שלו. הוא ישמש את בקר Kf להוספת מרחבי שמות חדשים למדיניות, ויאפשר שימוש חוזר בזהות עומס העבודה.

    gcloud iam service-accounts add-iam-policy-binding ${CLUSTER_NAME}-sa@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com \
      --project=${CLUSTER_PROJECT_ID} \
      --role="roles/iam.serviceAccountAdmin" \
      --member="serviceAccount:${CLUSTER_NAME}-sa@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com"
  3. נותנים תפקיד של מדדי מעקב לגישת כתיבה ל-Cloud Monitoring.

    gcloud projects add-iam-policy-binding ${CLUSTER_PROJECT_ID} \
      --member="serviceAccount:${CLUSTER_NAME}-sa@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com" \
      --role="roles/monitoring.metricWriter"
  4. הקצאת תפקיד של רישום ביומן לגישת כתיבה ל-Cloud Logging.

    gcloud projects add-iam-policy-binding ${CLUSTER_PROJECT_ID} \
      --member="serviceAccount:${CLUSTER_NAME}-sa@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com" \
      --role="roles/logging.logWriter"

יצירת אשכול GKE

gcloud container clusters create ${CLUSTER_NAME} \
  --project=${CLUSTER_PROJECT_ID} \
  --zone=${CLUSTER_LOCATION} \
  --num-nodes=${NODE_COUNT} \
  --machine-type=${MACHINE_TYPE} \
  --network=${NETWORK} \
  --addons=HttpLoadBalancing,HorizontalPodAutoscaling,NetworkPolicy \
  --enable-stackdriver-kubernetes \
  --enable-ip-alias \
  --enable-network-policy \
  --enable-autorepair \
  --enable-autoupgrade \
  --scopes=https://www.googleapis.com/auth/cloud-platform \
  --release-channel=regular \
  --workload-pool="${CLUSTER_PROJECT_ID}.svc.id.goog" \
  --service-account="${CLUSTER_NAME}-sa@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com"

הגדרת כללים לחומת האש

כדי להשתמש ב-Kf, צריך לפתוח כמה יציאות בחומת האש. לצומת הראשי צריכה להיות אפשרות לתקשר עם פודים ביציאות 80, ‏ 443, ‏ 8080, ‏ 8443 ו-6443.

הפעלה של Workload Identity

אחרי שיצרתם חשבון שירות ואשכול GKE, צריך לשייך את מרחב השמות של הזהות של האשכול לאשכול.

gcloud iam service-accounts add-iam-policy-binding \
  "${CLUSTER_NAME}-sa@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com" \
  --project=${CLUSTER_PROJECT_ID} \
  --role="roles/iam.workloadIdentityUser" \
  --member="serviceAccount:${CLUSTER_PROJECT_ID}.svc.id.goog[kf/controller]"

אשכול GKE ליעד

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

gcloud container clusters get-credentials ${CLUSTER_NAME} \
    --project=${CLUSTER_PROJECT_ID} \
    --zone=${CLUSTER_LOCATION}

יצירת מאגר Artifact Registry

  1. יוצרים Artifact Registry לאחסון קובצי אימג' של קונטיינרים.

    gcloud artifacts repositories create ${CLUSTER_NAME} \
      --repository-format=docker \
      --location=${COMPUTE_REGION}
  2. מעניקים לחשבון השירות הרשאה במאגר Artifact Registry.

    gcloud artifacts repositories add-iam-policy-binding ${CLUSTER_NAME} \
      --location=${COMPUTE_REGION} \
      --member="serviceAccount:${CLUSTER_NAME}-sa@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com" \
      --role='roles/artifactregistry.writer'
  3. מגדירים את האימות המקומי.

    gcloud auth configure-docker ${COMPUTE_REGION}-docker.pkg.dev

התקנת יחסי תלות של תוכנה באשכול

  1. התקנת Service Mesh.

  2. מתקינים את Tekton:

    kubectl apply -f "https://github.com/tektoncd/pipeline/releases/download/${TEKTON_VERSION}/release.yaml"

התקנה של Kf

  1. במאמר יצירה והכנה של אשכול GKE ל-Kf מוסבר איך ליצור אשכול שמוכן להרצת Kf.

  2. בוחרים את הגרסה הרצויה של Kf ורושמים אותה. אפשר לעיין בדף הורדות Kf כדי לראות את הגרסאות הזמינות

  3. התקנת CLI:

    Linux

    הפעולה הזו תתקין את kf לכל המשתמשים במערכת. כדי להתקין אותו רק לעצמכם, פועלים לפי ההוראות בכרטיסייה Cloud Shell.

    gcloud storage cp gs://kf-releases/${KF_VERSION}/kf-linux /tmp/kf
    chmod a+x /tmp/kf
    sudo mv /tmp/kf /usr/local/bin/kf

    Mac

    הפעולה הזו תתקין את kf לכל המשתמשים במערכת.

    gcloud storage cp gs://kf-releases/${KF_VERSION}/kf-darwin /tmp/kf
    chmod a+x /tmp/kf
    sudo mv /tmp/kf /usr/local/bin/kf

    Cloud Shell

    הפקודה הזו תתקין את kf במכונת Cloud Shell שלכם אם אתם משתמשים ב-bash. אם אתם משתמשים במעטפת אחרת, יכול להיות שתצטרכו לשנות את ההוראות.

    mkdir -p ~/bin
    gcloud storage cp gs://kf-releases/${KF_VERSION}/kf-linux ~/bin/kf
    chmod a+x ~/bin/kf
    echo "export PATH=$HOME/bin:$PATH" >> ~/.bashrc
    source ~/.bashrc

    Windows

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

    gcloud storage cp gs://kf-releases/${KF_VERSION}/kf-windows.exe kf.exe
  4. מתקינים רכיבי שרת:

    ‫Linux ו-Mac

    הקובץ kf.yaml יורד לספרייה הנוכחית.

    gcloud storage cp gs://kf-releases/${KF_VERSION}/kf.yaml /tmp/kf.yaml
    kubectl apply -f /tmp/kf.yaml

    Windows

    הקובץ kf.yaml יורד לספרייה הנוכחית.

    gcloud storage cp gs://kf-releases/${KF_VERSION}/kf.yaml kf.yaml
    kubectl apply -f kf.yaml
  5. הגדרת סודות:

    export WI_ANNOTATION=iam.gke.io/gcp-service-account=${CLUSTER_NAME}-sa@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com
    
    kubectl annotate serviceaccount controller ${WI_ANNOTATION} \
    --namespace kf \
    --overwrite
    
    echo "{\"apiVersion\":\"v1\",\"kind\":\"ConfigMap\",\"metadata\":{\"name\":\"config-secrets\", \"namespace\":\"kf\"},\"data\":{\"wi.googleServiceAccount\":\"${CLUSTER_NAME}-sa@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com\"}}" | kubectl apply -f -
  6. הגדרת ברירות מחדל של Kf. אפשר לשנות את הערכים האלה בהמשך. בדוגמה שלמטה נעשה שימוש בתבניות דומיין עם ספק DNS של תו כללי כדי לספק לכל מרחב שם דומיין משלו:

    export CONTAINER_REGISTRY=${COMPUTE_REGION}-docker.pkg.dev/${CLUSTER_PROJECT_ID}/${CLUSTER_NAME}
    export DOMAIN='$(SPACE_NAME).$(CLUSTER_INGRESS_IP).nip.io'
    
    kubectl patch configmaps config-defaults \
    -n=kf \
    -p="{\"data\":{\"spaceContainerRegistry\":\"${CONTAINER_REGISTRY}\",\"spaceClusterDomains\":\"- domain: ${DOMAIN}\"}}"
  7. אימות ההתקנה:

    kf doctor --retries 10

העברת אפליקציה

דרישות מוקדמות

כדי להשלים את החלק הזה, צריך:

  1. ‫Kf מותקן באשכול GKE תואם. הוראות מופיעות במאמר התקנת Kf.
  2. ‫A .kubeconfig שמטרגט את אשכול Kf. אם יצרתם את האשכול לפי ההוראות במסמך הזה, הפעולה הזו כבר בוצעה. אפשר ליצור את ההגדרה באופן מפורש באמצעות gcloud container clusters get-credentials ${CLUSTER_NAME} --zone ${CLUSTER_LOCATION}
  3. ה-CLI של kf מותקן ונמצא בנתיב. הוראות מופיעות במאמר התקנת Kf.
  4. ה-CLI של git מותקן ונמצא בנתיב.

הכנת המרחב

  1. יצירת מרחב חדש:

    kf create-space test-space
  2. מטרגטים את המרחב:

    kf target -s test-space

העלאה של אפליקציית הבדיקה של Cloud Foundry

  1. משכפלים את מאגר האפליקציה לבדיקה:

    git clone https://github.com/cloudfoundry-samples/test-app go-test-app
    cd go-test-app
  2. דחיפת האפליקציה:

    kf push test-app
  3. מאתרים את כתובת ה-URL של האפליקציה:

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

      kf app test-app --output 'jsonpath={.status.urls[0]}'

    2. או את הפעולה הבאה לגישה מסורתית יותר של שיתוף פעולה סינון:

      kf apps

  4. פותחים את כתובת ה-URL בדפדפן.

הסרת המשאבים

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

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

    gcloud container clusters delete ${CLUSTER_NAME} --zone ${CLUSTER_LOCATION}
  2. מחיקה של חשבון שירות של Google:

    gcloud iam service-accounts delete ${CLUSTER_NAME}-sa@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com
  3. מחיקת קישורי מדיניות IAM:

    gcloud projects remove-iam-policy-binding ${CLUSTER_PROJECT_ID} \
      --member="serviceAccount:${CLUSTER_NAME}-sa@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com" \
      --role="roles/storage.admin"
    
    gcloud projects remove-iam-policy-binding ${CLUSTER_PROJECT_ID} \
      --member="serviceAccount:${CLUSTER_NAME}-sa@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com" \
      --role="roles/iam.serviceAccountAdmin"
    
    gcloud projects remove-iam-policy-binding ${CLUSTER_PROJECT_ID} \
      --member="serviceAccount:${CLUSTER_NAME}-sa@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com" \
      --role="roles/monitoring.metricWriter"
  4. מחיקת מאגר תמונות של קונטיינרים:

    gcloud artifacts repositories delete ${CLUSTER_NAME} \
      --location=${COMPUTE_REGION}