Instal Kf di Google Cloud

Dokumen ini menjelaskan cara menyiapkan cluster GKE, lalu menginstal Kf dan dependensinya.

Sebelum memulai

Persyaratan cluster GKE

Persyaratan Kf

Tinjau dan pahami izin akses komponen dalam Kf di halaman dependensi dan arsitektur Kf.

Matriks dependensi mencantumkan versi tertentu.

Mengaktifkan dukungan untuk Compute Engine

  1. Login ke akun Google Cloud Anda. Jika Anda baru menggunakan Google Cloud, buat akun untuk mengevaluasi performa produk kami dalam skenario dunia nyata. Pelanggan baru juga mendapatkan kredit gratis senilai $300 untuk menjalankan, menguji, dan men-deploy workload.
  2. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

  3. Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.

  4. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

  5. Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.

  6. Aktifkan Compute Engine API.

    Mengaktifkan API

Mengaktifkan dukungan untuk Artifact Registry

  1. Aktifkan Artifact Registry API.

    Aktifkan Artifact Registry API

Mengaktifkan dan mengonfigurasi GKE

Sebelum memulai, pastikan Anda telah menjalankan tugas berikut:

  • Aktifkan Google Kubernetes Engine API.
  • Aktifkan Google Kubernetes Engine API
  • Jika ingin menggunakan Google Cloud CLI untuk tugas ini, instal lalu initialize gcloud CLI. Jika sebelumnya Anda telah menginstal gcloud CLI, dapatkan versi terbaru dengan menjalankan gcloud components update.

Menyiapkan variabel lingkungan

Linux dan 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

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

Menyiapkan akun layanan

Buat akun layanan Google Cloud yang akan dikaitkan dengan Akun Layanan Kubernetes melalui Workload Identity. Tindakan ini akan mencegah perlunya membuat dan memasukkan kunci akun layanan.

  1. Buat akun layanan yang akan digunakan Kf.

    gcloud iam service-accounts create ${CLUSTER_NAME}-sa \
    --project=${CLUSTER_PROJECT_ID} \
    --description="GSA for Kf ${CLUSTER_NAME}" \
    --display-name="${CLUSTER_NAME}"
  2. Buat peran IAM kustom baru.

    gcloud iam roles create serviceAccountUpdater \
    --project=${CLUSTER_PROJECT_ID} \
    --title "Service Account Updater" \
    --description "This role only updates members on a GSA" \
    --permissions iam.serviceAccounts.get,iam.serviceAccounts.getIamPolicy,iam.serviceAccounts.list,iam.serviceAccounts.setIamPolicy
  3. Mengizinkan akun layanan mengubah kebijakannya sendiri. Pengontrol Kf akan menggunakannya untuk menambahkan ruang (name) baru ke kebijakan, sehingga memungkinkan penggunaan kembali untuk Workload Identity.

    gcloud projects add-iam-policy-binding ${CLUSTER_PROJECT_ID} \
      --member="serviceAccount:${CLUSTER_NAME}-sa@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com" \
      --role="projects/${CLUSTER_PROJECT_ID}/roles/serviceAccountUpdater"
  4. Memberikan peran metrik pemantauan untuk akses tulis ke 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"
  5. Berikan peran logging untuk akses tulis ke 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"

Membuat cluster GKE

gcloud container clusters create ${CLUSTER_NAME} \
  --project=${CLUSTER_PROJECT_ID} \
  --zone=${CLUSTER_LOCATION} \
  --num-nodes=${NODE_COUNT} \
  --machine-type=${MACHINE_TYPE} \
  --disk-size "122" \
  --network=${NETWORK} \
  --addons HorizontalPodAutoscaling,HttpLoadBalancing,GcePersistentDiskCsiDriver \
  --enable-dataplane-v2 \
  --enable-stackdriver-kubernetes \
  --enable-ip-alias \
  --enable-autorepair \
  --enable-autoupgrade \
  --scopes cloud-platform \
  --release-channel=regular \
  --workload-pool="${CLUSTER_PROJECT_ID}.svc.id.goog" \
  --service-account="${CLUSTER_NAME}-sa@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com"

Menetapkan aturan firewall

Kf memerlukan beberapa port {i>firewall<i} agar terbuka. Node master harus dapat berkomunikasi dengan pod pada porta 80, 443, 8080, 8443 dan 6443.

Aktifkan Workload Identity

Setelah Anda memiliki akun layanan dan cluster GKE, kaitkan namespace identitas cluster dengan cluster.

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

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

Cluster GKE Target

Konfigurasikan akses command line kubectl dengan menjalankan perintah berikut.

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

Membuat repositori Artifact Registry

  1. Buat Artifact Registry untuk image container yang akan disimpan.

    gcloud artifacts repositories create ${CLUSTER_NAME} \
      --project=${CLUSTER_PROJECT_ID} \
      --repository-format=docker \
      --location=${COMPUTE_REGION}
  2. Berikan izin akun layanan di repositori Artifact Registry.

    gcloud artifacts repositories add-iam-policy-binding ${CLUSTER_NAME} \
      --project=${CLUSTER_PROJECT_ID} \
      --location=${COMPUTE_REGION} \
      --member="serviceAccount:${CLUSTER_NAME}-sa@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com" \
      --role='roles/artifactregistry.writer'

Menginstal dependensi software pada cluster

  1. Instal Anthos Service Mesh v1.12.

    1. Ikuti panduan penginstalan Anthos Service Mesh, termasuk langkah-langkah untuk membuat dan ingress gateway.
  2. Instal Config Connector.

    1. Download file tar Operator Config Connector yang diperlukan.

    2. Ekstrak file tar.

      tar zxvf release-bundle.tar.gz
    3. Instal operator Config Connector di cluster Anda.

      kubectl apply -f operator-system/configconnector-operator.yaml
    4. Mengonfigurasi operator Config Connector.

      1. Salin YAML berikut ke dalam file bernama configconnector.yaml:

        # configconnector.yaml
        apiVersion: core.cnrm.cloud.google.com/v1beta1
        kind: ConfigConnector
        metadata:
          # the name is restricted to ensure that there is only one
          # ConfigConnector resource installed in your cluster
          name: configconnector.core.cnrm.cloud.google.com
        spec:
          mode: cluster
          googleServiceAccount: "KF_SERVICE_ACCOUNT_NAME" # Replace with the full service account resolved from ${CLUSTER_NAME}-sa@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com
      2. Terapkan konfigurasi ke cluster Anda.

        kubectl apply -f configconnector.yaml
    5. Pastikan Config Connector sudah terinstal sepenuhnya sebelum melanjutkan.

      • Config Connector menjalankan semua komponennya dalam namespace yang bernama cnrm-system. Verifikasi bahwa Pod sudah siap dengan menjalankan perintah berikut:

        kubectl wait -n cnrm-system --for=condition=Ready pod --all
      • Jika Config Connector sudah terinstal dengan benar, Anda akan melihat output yang serupa dengan berikut ini:

        pod/cnrm-controller-manager-0 condition met
        pod/cnrm-deletiondefender-0 condition met
        pod/cnrm-resource-stats-recorder-86858dcdc5-6lqzb condition met
        pod/cnrm-webhook-manager-58c799b8fb-kcznq condition met
        pod/cnrm-webhook-manager-58c799b8fb-n2zpx condition met
    6. Siapkan Workload Identity.

      kubectl annotate serviceaccount \
      --namespace cnrm-system \
      --overwrite \
      cnrm-controller-manager \
      iam.gke.io/gcp-service-account=${CLUSTER_NAME}-sa@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com
  3. Instal Tekton:

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

Instal Kf

  1. Instal Kf CLI:

    Linux

    Perintah ini menginstal Kf CLI untuk semua pengguna di sistem. Ikuti petunjuk di tab Cloud Shell untuk menginstalnya sendiri.

    gsutil cp gs://kf-releases/v2.7.3/kf-linux /tmp/kf
    chmod a+x /tmp/kf
    sudo mv /tmp/kf /usr/local/bin/kf

    Mac

    Perintah ini menginstal kf untuk semua pengguna pada sistem.

    gsutil cp gs://kf-releases/v2.7.3/kf-darwin /tmp/kf
    chmod a+x /tmp/kf
    sudo mv /tmp/kf /usr/local/bin/kf

    Cloud Shell

    Perintah ini menginstal kf pada instance Cloud Shell jika Anda menggunakan bash, petunjuk mungkin perlu diubah untuk shell lainnya.

    mkdir -p ~/bin
    gsutil cp gs://kf-releases/v2.7.3/kf-linux ~/bin/kf
    chmod a+x ~/bin/kf
    echo "export PATH=$HOME/bin:$PATH" >> ~/.bashrc
    source ~/.bashrc

    Windows

    Perintah ini akan mendownload kf ke direktori saat ini. Tambahkan ke jalur jika Anda ingin memanggilnya dari mana saja selain direktori saat ini.

    gsutil cp gs://kf-releases/v2.7.3/kf-windows.exe kf.exe
  2. Instal operator:

    kubectl apply -f "https://storage.googleapis.com/kf-releases/v2.7.3/operator.yaml"
  3. Konfigurasikan operator untuk Kf:

    kubectl apply -f "https://storage.googleapis.com/kf-releases/v2.7.3/kfsystem.yaml"
  4. Siapkan rahasia dan default:

    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': {'spaceContainerRegistry': '${CONTAINER_REGISTRY}', 'secrets':{'workloadidentity':{'googleserviceaccount':'${CLUSTER_NAME}-sa', 'googleprojectid':'${CLUSTER_PROJECT_ID}'}}}}}]"
    

Memvalidasi penginstalan

  kf doctor --retries=20

Pembersihan

Langkah-langkah ini akan menghapus semua komponen yang dibuat di bagian Membuat dan menyiapkan cluster GKE baru.

  1. Hapus Akun Layanan Google:

    gcloud iam service-accounts delete ${CLUSTER_NAME}-sa@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com
  2. Menghapus binding kebijakan IAM:

    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"
  3. Menghapus repositori image container:

    gcloud artifacts repositories delete ${CLUSTER_NAME} \
      --location=${COMPUTE_REGION}
  4. Uninstal Kf:

    kubectl patch kfsystem kfsystem \
      --type='json' \
      -p="[{'op': 'replace', 'path': '/spec/kf', 'value': {'enabled': false, }}]"
  5. (Opsional) Hapus cluster GKE:

    gcloud container clusters delete ${CLUSTER_NAME} --zone ${CLUSTER_LOCATION}