Menginstal Kf

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

Sebelum memulai

Ringkasan

Persyaratan cluster GKE.

Persyaratan Kf. Matriks dependensi mencantumkan versi tertentu.

Mengaktifkan dukungan untuk Compute Engine

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure 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.

    Go to project selector

  5. Make sure that billing is enabled for your Google Cloud project.

  6. Aktifkan Compute Engine API.

    Mengaktifkan API

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

    Penyiapan akun layanan

    Buat akun layanan GCP (GSA) yang akan dikaitkan dengan Akun Layanan Kubernetes melalui Workload Identity. Hal ini mencegah kebutuhan untuk membuat dan menyuntikkan 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 khusus 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. Izinkan akun layanan untuk mengubah kebijakannya sendiri. Pengontrol Kf akan menggunakan ini untuk menambahkan ruang nama (name) baru ke kebijakan, sehingga memungkinkan penggunaan ulang 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. Berikan 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"

    Buat cluster 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"

    Menetapkan aturan firewall

    Kf memerlukan beberapa port firewall agar terbuka. Node master harus dapat berkomunikasi dengan pod di port 80, 443, 8080, 8443, dan 6443.

    Aktifkan Workload Identity

    Setelah 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

    Konfigurasi 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 menyimpan image container.

      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 di cluster

    1. Instal Service Mesh.

      1. Buka panduan penginstalan Cloud Service Mesh.

      2. Pastikan dropdown versi disetel ke Cloud Service Mesh versi 1.9.

      3. Ikuti panduan untuk menginstal ASM.

    2. Instal Config Connector.

      1. Download file tar Config Connector Operator 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. Konfigurasi 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 terinstal sepenuhnya sebelum melanjutkan.

        • Config Connector menjalankan semua komponennya dalam namespace 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 diinstal dengan benar, Anda akan melihat output yang mirip 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.23.0/release.yaml"

    Menginstal Kf

    1. Instal Kf CLI:

      Linux

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

      gcloud storage cp gs://kf-releases/v2.4.1/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 di sistem.

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

      Cloud Shell

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

      mkdir -p ~/bin
      gcloud storage cp gs://kf-releases/v2.4.1/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.

      gcloud storage cp gs://kf-releases/v2.4.1/kf-windows.exe kf.exe
    2. Instal operator:

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

      kubectl apply -f "https://storage.googleapis.com/kf-releases/v2.4.1/kfsystem.yaml"
    4. Menyiapkan secret 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 Buat dan siapkan cluster GKE baru.

    1. Hapus Akun Layanan Google:

      gcloud iam service-accounts delete ${CLUSTER_NAME}-sa@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com
    2. Hapus 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/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"
    3. Hapus repositori image container:

      gcloud artifacts repositories delete ${CLUSTER_NAME} \
        --location=${COMPUTE_REGION}
    4. Hapus cluster GKE:

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