Instalar o Kf no Google Cloud

Neste documento, você vai aprender a configurar um cluster do GKE e instalar o Kf e as dependências dele.

Antes de começar

Requisitos de clusters do GKE

Requisitos do Kf

Analise e entenda as permissões de acesso dos componentes no Kf na página de dependências e arquitetura do Kf.

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

Ativar o suporte ao Compute Engine

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

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

  3. Ative a API Compute Engine.

    Ativar a API

  4. Ativar suporte ao Artifact Registry

    1. Ative a API Artifact Registry.

      Ative a API Artifact Registry

    Ativar e configurar o GKE

    Antes de começar, verifique se você realizou as tarefas a seguir:

    • Ativar a API Google Kubernetes Engine.
    • Ativar a API Google Kubernetes Engine
    • Se você quiser usar a CLI do Google Cloud para essa tarefa, instale e inicialize a gcloud CLI. Se você instalou a gcloud CLI anteriormente, instale a versão mais recente executando o comando gcloud components update. Talvez as versões anteriores da gcloud CLI não sejam compatíveis com a execução dos comandos neste documento.

    Configurar 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
    

    Configurar conta de serviço

    Crie uma conta de serviço do Google Cloud que será associada a uma conta do Kubernetes usando a Identidade da Carga de Trabalho. Assim não é preciso criar e injetar 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. Crie um papel de IAM personalizado.

      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. Permita que a conta de serviço modifique a própria política. O controlador Kf usará esse parâmetro para adicionar novos (name)spaces espaços à política, permitindo a reutilização da Identidade da carga de trabalho.

      gcloud projects add-iam-policy-binding ${CLUSTER_PROJECT_ID} \
        --member="serviceAccount:${CLUSTER_NAME}-sa@${CLUSTER_PROJECT_ID}." \
        --role="projects/${CLUSTER_PROJECT_ID}/roles/serviceAccountUpdater"
    4. Dê o papel de métricas de monitoramento para acesso de gravação ao Cloud Monitoring.

      gcloud projects add-iam-policy-binding ${CLUSTER_PROJECT_ID} \
        --member="serviceAccount:${CLUSTER_NAME}-sa@${CLUSTER_PROJECT_ID}." \
        --role="roles/monitoring.metricWriter"
    5. Dê o papel de geração de registros para acesso de gravação no Cloud Logging.

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

    Criar 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}." \
      --service-account="${CLUSTER_NAME}-sa@${CLUSTER_PROJECT_ID}."

    Definir regras de firewall

    O Kf requer a abertura de algumas portas de firewall. O nó mestre precisa se comunicar com pods nas portas 80, 443, 8080, 8443 e 6443.

    Ativar a identidade da carga de trabalho

    Agora que você tem uma conta de serviço e um cluster do GKE, associe o namespace 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}.[kf/controller]" \
      "${CLUSTER_NAME}-sa@${CLUSTER_PROJECT_ID}."
    
    gcloud iam service-accounts add-iam-policy-binding \
      --project=${CLUSTER_PROJECT_ID} \
      --role roles/iam.workloadIdentityUser \
      --member "serviceAccount:${CLUSTER_PROJECT_ID}.[cnrm-system/cnrm-controller-manager]" \
      "${CLUSTER_NAME}-sa@${CLUSTER_PROJECT_ID}."

    Cluster do GKE de destino

    Use o comando a seguir para configurar o acesso à linha de comando kubectl.

    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 as imagens de contêiner.

      gcloud artifacts repositories create ${CLUSTER_NAME} \
        --project=${CLUSTER_PROJECT_ID} \
        --repository-format=docker \
        --location=${COMPUTE_REGION}
    2. Conceda permissã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}." \
        --role='roles/artifactregistry.writer'

    Instalar dependências de software em um cluster

    1. Instale o Cloud Service Mesh v1.12.

      1. Siga o Guia de instalação do Cloud Service Mesh, incluindo as etapas para criar um gateway de entrada.
    2. Instale o Config Connector.

      1. Baixe o arquivo .tar necessário do operador do Config Connector:

      2. Extraia o arquivo .tar.

        tar zxvf release-bundle.tar.gz
      3. Instale o operador do Config Connector no cluster.

        kubectl apply -f operator-system/configconnector-operator.yaml
      4. Configure o operador do Config Connector.

        1. Copie o seguinte YAML para um arquivo chamado 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}.
        2. Aplique a configuração ao seu cluster.

          kubectl apply -f configconnector.yaml
      5. Verifique se o Config Connector está totalmente instalado antes de continuar.

        • Todos os componentes do Config Connector são executados em um namespace chamado cnrm-system. Execute este comando para verificar se os pods estão prontos:

          kubectl wait -n cnrm-system --for=condition=Ready pod --all
        • Se o Config Connector estiver instalado corretamente, o resultado será semelhante a este:

          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. Configure a Identidade da Carga de Trabalho.

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

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

    Instalar o Kf

    1. Instale a CLI do Kf:

      Linux

      Este comando instala a CLI do Kf para todos os usuários no sistema. Siga as instruções na guia do Cloud Shell para instalá-lo só para você.

      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

      Este comando instala o kf para todos os usuários no sistema.

      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

      O comando vai instalar o kf na instância do Cloud Shell se você usar bash. Talvez seja necessário mudar as instruções para outros shells.

      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

      Este comando baixa o kf para o diretório atual. Adicione o arquivo ao caminho se você quiser chamar de outro local que não seja o diretório atual.

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

      kubectl apply -f "https://storage.googleapis.com/kf-releases/v2.9.0/operator.yaml"
    3. Configure o operador para o Kf:

      kubectl apply -f "https://storage.googleapis.com/kf-releases/v2.9.0/kfsystem.yaml"
    4. Configure Secrets e padrõ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': {'spaceContainerRegistry': '${CONTAINER_REGISTRY}', 'secrets':{'workloadidentity':{'googleserviceaccount':'${CLUSTER_NAME}-sa', 'googleprojectid':'${CLUSTER_PROJECT_ID}'}}}}}]"
      

    Validar a instalação

      kf doctor --retries=20

    Limpar

    Estas etapas removem todos os componentes criados na seção Criar e preparar um cluster do GKE.

    1. Exclua a conta de serviço do Google:

      gcloud iam service-accounts delete ${CLUSTER_NAME}-sa@${CLUSTER_PROJECT_ID}.
    2. Exclua as vinculações da política do IAM:

      gcloud projects remove-iam-policy-binding ${CLUSTER_PROJECT_ID} \
          --member="serviceAccount:${CLUSTER_NAME}-sa@${CLUSTER_PROJECT_ID}." \
          --role="roles/iam.serviceAccountAdmin"
      gcloud projects remove-iam-policy-binding ${CLUSTER_PROJECT_ID} \
          --member="serviceAccount:${CLUSTER_NAME}-sa@${CLUSTER_PROJECT_ID}." \
          --role="roles/monitoring.metricWriter"
    3. Exclua o repositório de imagens de contêineres:

      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. (Opcional) Exclua o cluster do GKE:

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