התקנת Kf מחוץ ל-Google Cloud

במאמר הזה מוסבר איך להתקין את Kf ואת התלות שלו באשכול מקומי שנוצר כחלק מ-Google Distributed Cloud, ב-VMware או בשרת פיזי.

אם אתם כבר מכירים את תהליך ההתקנה של Kf באשכול GKE ב- Google Cloud, ההבדלים העיקריים בתהליך ההתקנה בשרתים מקומיים הם:

  • לא צריך להתקין את Config Connector להתקנה מקומית.
  • התהליך בשרת המקומי משתמש בפרטי כניסה של Docker במקום ב-Workload Identity.

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

דרישות ל-Google Distributed Cloud

דרישות לגבי Kf

  • Cloud Service Mesh.

  • Tekton לשימוש ב-Kf. זה לא שירות שפונה למשתמשים.

  • חשבון שירות ייעודי של Google.

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

‫Linux ו-Mac

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} # Replace ZONE with REGION to switch
export NODE_COUNT=4
export MACHINE_TYPE=e2-standard-4
export NETWORK=default
export CLUSTER_PROJECT_ID=YOUR_PROJECT_ID
export CLUSTER_NAME=kf-cluster
export DOCKER_SERVER=YOUR_DOCKER_SERVER_URL
export SA_NAME=${CLUSTER_NAME}-sa
export SA_EMAIL=${SA_NAME}@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com

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 # Replace ZONE with REGION to switch
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 CLUSTER_PROJECT_ID -Value YOUR_PROJECT_ID
Set-Variable -Name CLUSTER_NAME -Value kf-cluster
Set-Variable -Name DOCKER_SERVER -Value YOUR_DOCKER_SERVER_URL
Set-Variable -Name SA_NAME -Value ${CLUSTER_NAME}-sa
Set-Variable -Name SA_EMAIL -Value ${SA_NAME}@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com

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

יוצרים את Google Cloud חשבון השירות (GSA) ואת המפתח של חשבון השירות שמשמשים את הבנייה לקריאה/כתיבה מ-Container Registry. השלב הזה שונה אם אתם משתמשים במאגר תמונות (container registry) אחר, כי יכול להיות שיש לו דרך אחרת להשיג את פרטי הכניסה לגישה למאגר.

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

    gcloud beta iam service-accounts create ${SA_NAME} \
        --project=${CLUSTER_PROJECT_ID} \
        --description="gcr.io admin for ${CLUSTER_NAME}" \
        --display-name="${CLUSTER_NAME}"
  2. מקצים לחשבון השירות את התפקיד storage.admin שנדרש לקריאה/כתיבה מ-Container Registry:

    gcloud projects add-iam-policy-binding ${CLUSTER_PROJECT_ID} \
        --member="serviceAccount:${SA_NAME}@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com" \
        --role="roles/storage.admin"
  3. יוצרים את המפתח של חשבון השירות:

    temp_dir=$(mktemp -d)
    key_path=${temp_dir}/key.json
    gcloud iam service-accounts keys create --iam-account ${SA_EMAIL} ${key_path}
    key_json=$(cat ${key_path})
    rm -rf ${temp_dir}

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

  1. מתקינים את Cloud Service Mesh.

    1. כדי להתקין את Cloud Service Mesh, פועלים לפי מדריך ההתקנה של Cloud Service Mesh.

    2. אם אתם משתמשים ב-Google Distributed Cloud, צריך להגדיר את loadBalancerIP לכתובת IP שהוקצתה לאשכול, כמו שמתואר במאמר הגדרת כתובות IP חיצוניות ל-Google Distributed Cloud.

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

    kubectl apply -f "https://storage.googleapis.com/tekton-releases/pipeline/previous/v0.32.1/release.yaml"

התקנת Kf

  1. מתקינים את Kf CLI:

    Linux

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

    gcloud storage cp gs://kf-releases/v2.9.0/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/v2.9.0/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/v2.9.0/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/v2.9.0/kf-windows.exe kf.exe
  2. מתקינים את האופרטור:

    kubectl apply -f "https://storage.googleapis.com/kf-releases/v2.9.0/operator.yaml"
  3. מגדירים את האופרטור ל-Kf:

    kubectl apply -f "https://storage.googleapis.com/kf-releases/v2.9.0/kfsystem.yaml"

יצירת סוד ב-Kubernetes לפרטי הכניסה של Docker

יוצרים סוד של Kubernetes במרחב השמות של Kf עבור פרטי הכניסה של Docker שיצרתם למעלה בהגדרת חשבון שירות. לאחר מכן, מתקנים את הסוד של Kubernetes בפריסת subresource-apiserver להעלאות של מקורות.

  1. מפעילים ומעדכנים את אופרטור Kf כדי להשתמש ב-Container Registry כמאגר התמונות.

    export CONTAINER_REGISTRY=${COMPUTE_REGION}-docker.pkg.dev/${CLUSTER_PROJECT_ID}/${CLUSTER_NAME}
    
    kubectl patch \
    kfsystem kfsystem \
    --type='json' \
    -p="[{'op': 'replace', 'path': '/spec/kf', 'value': {'enabled': true, 'config': {'featureFlags': {'enable_appdevexperience_builds': true}, 'spaceContainerRegistry': '${CONTAINER_REGISTRY}', 'secrets':{'workloadidentity':{'googleserviceaccount':'${CLUSTER_NAME}-sa', 'googleprojectid':'${CLUSTER_PROJECT_ID}'}}}}}]"
    
    export CONTAINER_REGISTRY=gcr.io/${CLUSTER_PROJECT_ID}
    kubectl patch kfsystem kfsystem \
      --type='json' \
      -p="[{'op': 'replace', 'path': '/spec/kf', 'value': {'enabled': true, 'config': {'spaceContainerRegistry':'${CONTAINER_REGISTRY}'}}}]"
    
  2. מוודאים שמרחב השמות kf נוצר על ידי אופרטור Kf. השלמת הפעולה עשויה להימשך כמה דקות.

    kubectl get namespace kf
  3. יוצרים סוד של Kubernetes לשימוש עם רשומות Docker.

    export secret_name=kf-gcr-key-${RANDOM}
    kubectl -n kf create secret docker-registry ${secret_name} \
       --docker-username=_json_key --docker-server ${DOCKER_SERVER} \
       --docker-password="${key_json}"
    
  4. מעדכנים את אופרטור Kf כדי לציין את הסוד שמכיל את פרטי הכניסה של Docker.

    kubectl patch kfsystem kfsystem \
      --type='json' \
      -p="[{'op': 'replace', 'path': '/spec/kf', 'value': {'config': {'secrets':{'build':{'imagePushSecrets':'${secret_name}'}}}}}]"
    

אימות ההתקנה

kf doctor --retries=20