Instale o Kf fora de Google Cloud

Este documento descreve como instalar o Kf e as respetivas dependências num cluster Google Distributed Cloud ou Google Distributed Cloud no local.

Se já conhece o processo de instalação do Kf num cluster do GKE em Google Cloud, as principais diferenças para o procedimento no local são:

  • Não tem de instalar o Config Connector para uma instalação no local.
  • O procedimento no local usa credenciais do Docker em vez da Workload Identity.

Antes de começar

Requisitos do Google Distributed Cloud

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.

  • Cloud Service Mesh.

  • Tekton para utilização pelo Kf. Este não é um serviço orientado para o utilizador.

  • Uma conta de serviço Google dedicada.

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

Configure a conta de serviço

Crie a Google Cloud conta de serviço (GSA) e a chave da conta de serviço usadas para as compilações lerem/escreverem a partir do Container Registry. Este passo é diferente se estiver a usar um registo de contentores diferente, uma vez que pode ter uma forma diferente de obter as credenciais para aceder ao registo.

  1. Crie a conta de serviço usada pelo 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. Atribua à conta de serviço a storage.adminfunção necessária para ler/escrever a partir do 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. Crie a chave da conta de serviço:

    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}

Instale dependências de software no cluster

  1. Instale o Cloud Service Mesh.

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

    2. Se estiver no Google Distributed Cloud, defina o loadBalancerIP para um IP atribuído ao cluster, conforme descrito no artigo Configure endereços IP externos para o Google Distributed Cloud.

  2. Instale o Tekton:

    kubectl apply -f "https://storage.googleapis.com/tekton-releases/pipeline/previous/v0.26.0/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.6.1/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.6.1/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.6.1/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 chamá-lo a partir de qualquer outro local que não seja o diretório atual.

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

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

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

Crie um segredo do Kubernetes para credenciais do Docker

Crie um segredo do Kubernetes no espaço de nomes do Kf para as credenciais do Docker que criou acima em Configuração da conta de serviço. Em seguida, aplique uma patch ao segredo do Kubernetes na implementação subresource-apiserver para carregamentos de origens.

  1. Ative e atualize o operador Kf para usar o Container Registry como o registo de contentores.

    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. Verifique se o espaço de nomes kf foi criado pelo operador do Kf. Este processo pode demorar alguns minutos.

    kubectl get namespace kf
  3. Crie um segredo do Kubernetes para utilização com registos do 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. Atualize o operador Kf para especificar o segredo que contém as credenciais do Docker.

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

Valide a instalação

kf doctor --retries=20