Instale o Kf em Google Cloud (pré-visualização)

Este documento descreve como configurar um cluster do GKE e, em seguida, instalar o Kf e as respetivas dependências através de novas funcionalidades em versão de pré-visualização.

  • O Kf vai usar a nova pilha envolvida v2 para oferecer vantagens dos buildpacks nativos da nuvem para aplicações antigas.
  • Remove o Config Connector como uma dependência.
  • Remove a serviceAccountUpdaterfunção do IAM personalizada.

Antes de começar

Requisitos do cluster do GKE

Requisitos de Kf

Reveja e compreenda as autorizações de acesso dos componentes no Kf na página de arquitetura e dependências do Kf.

A matriz de dependências apresenta as versões específicas.

Ative o suporte para o 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.

    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. Ative a API Compute Engine.

    Ative a API

  7. Ative o suporte para o Artifact Registry

    1. Ative a API Artifact Registry.

      Ative a API Artifact Registry

    Ative e configure o GKE

    Antes de começar, certifique-se de que realizou as seguintes tarefas:

    • Ative a API Google Kubernetes Engine.
    • Ative a API Google Kubernetes Engine
    • Se quiser usar a CLI gcloud para esta tarefa, instale-a e, em seguida, inicialize-a. Se instalou anteriormente a CLI gcloud, execute o comando gcloud components update para obter a versão mais recente. As versões anteriores da CLI gcloud podem não suportar a execução dos comandos neste documento.

    Configure variáveis de ambiente

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

    Configure a conta de serviço

    Crie uma Google Cloud conta de serviço que vai ser associada a uma conta de serviço do Kubernetes através do Workload Identity. Isto evita a necessidade de criar e inserir uma chave de conta de serviço.

    1. Crie a conta de serviço que o Kf vai usar.

      gcloud iam service-accounts create ${CLUSTER_NAME}-sa \
      --project=${CLUSTER_PROJECT_ID} \
      --description="GSA for Kf ${CLUSTER_NAME}" \
      --display-name="${CLUSTER_NAME}"
    2. Conceda a função de métricas de monitorização à conta de serviço para acesso de escrita ao 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"
    3. Conceda a função de registo à conta de serviço para acesso de escrita ao 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"

    Crie um cluster do 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"

    Defina regras de firewall

    O Kf requer que algumas portas da firewall estejam abertas. O nó principal tem de conseguir comunicar com pods nas portas 80, 443, 8080, 8443 e 6443.

    Ative o Workload Identity

    Agora que tem uma conta de serviço e um cluster do GKE, associe o espaço de nomes de identidade do cluster ao 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 do GKE de destino

    Configure o acesso à linha de comandos kubectl executando o seguinte comando.

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

    Crie um repositório do Artifact Registry

    1. Crie um Artifact Registry para armazenar imagens de contentores.

      gcloud artifacts repositories create ${CLUSTER_NAME} \
        --project=${CLUSTER_PROJECT_ID} \
        --repository-format=docker \
        --location=${COMPUTE_REGION}
    2. Conceda autorização à conta de serviço no repositório do 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'

    Instale dependências de software num cluster

    1. Instale o Cloud Service Mesh.

      1. Siga o guia de instalação do Cloud Service Mesh.

      2. Depois de instalar o Cloud Service Mesh, tem de criar um gateway de entrada através do guia de instalação do gateway.

    2. Instale o Tekton:

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

    Instale o Kf

    1. Instale a CLI Kf:

      Linux

      Este comando instala a CLI do Kf para todos os utilizadores no sistema. Siga as instruções no separador do Cloud Shell para o instalar apenas para si.

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

      Mac

      Este comando instala o kf para todos os utilizadores no sistema.

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

      Cloud Shell

      Este comando instala o kf na sua instância do Cloud Shell se usar o bash. Caso contrário, pode ter de modificar as instruções para outras shells.

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

      Windows

      Este comando transfere kf para o diretório atual. Adicione-o ao caminho se quiser chamar a partir de qualquer outro local que não o diretório atual.

      gcloud storage cp gs://kf-releases/v2.10.0/kf-windows.exe kf.exe
    2. Instale o operador:

      kubectl apply -f "https://storage.googleapis.com/kf-releases/v2.10.0/operator.yaml"
    3. Instale o Kf AppDevExperience Build (compilação do ADX).

      export CONTAINER_REGISTRY=${COMPUTE_REGION}-docker.pkg.dev/${CLUSTER_PROJECT_ID}/${CLUSTER_NAME}
      cat << EOF | kubectl apply --filename -
      apiVersion: builds.appdevexperience.dev/v1alpha1
      kind: BuildSystem
      metadata:
          name: buildsystem
      spec:
        secrets:
          workloadidentity:
            googleprojectid: ${CLUSTER_PROJECT_ID}
            googleserviceaccount: ${CLUSTER_NAME}-sa
        containerRegistry: ${CONTAINER_REGISTRY}
        enabled: true
      EOF
    4. Configure o ADX Build para o Workload Identity.

      gcloud iam service-accounts add-iam-policy-binding \
        --project=${CLUSTER_PROJECT_ID} \
        --role roles/iam.workloadIdentityUser \
        --member "serviceAccount:${CLUSTER_PROJECT_ID}.svc.id.goog[adx-builds-system/controller]" \
        "${GSA_NAME}@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com"
    5. Configure o operador para Kf:

      kubectl apply -f "https://storage.googleapis.com/kf-releases/v2.10.0/kfsystem.yaml"
    6. Configure segredos e predefinições:

      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}'}}}}}]"
      

    Valide a instalação

    kf doctor --retries=20

    Limpar

    Estes passos devem remover todos os componentes criados na secção Crie e prepare um novo cluster do GKE.

    1. Elimine a conta de serviço Google:

      gcloud iam service-accounts delete ${CLUSTER_NAME}-sa@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com
    2. Elimine vinculações de políticas de 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. Elimine o repositório de imagens de contentores:

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

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

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