Antes de começar
Visão geral
Seu cluster do GKE precisa atender aos seguintes requisitos:
Opcional, mas é recomendado que o cluster seja dedicado ao Kf. Recomendamos que você instale apenas o Kf e as dependências dele para garantir que a matriz de compatibilidade seja mantida.
No mínimo, quatro nós. Se for preciso adicionar nós, veja Como redimensionar um cluster.
O tipo de máquina mínimo que tem pelo menos quatro vCPUs, como
e2-standard-4
. Se o tipo de máquina do cluster não tiver pelo menos quatro vCPUs, altere o tipo de máquina conforme descrito em Como migrar cargas de trabalho para diferentes tipos de máquina.Como opção recomendada, inscreva o cluster em um canal de lançamento. Siga as instruções em Como registrar um cluster existente em um canal de lançamento se você tiver uma versão estática do GKE.
Identidade da carga de trabalho ativada.
O Artifact Registry está ativado.
Tekton instalado. Consulte a Matriz de dependências para a versão.
Uma conta de serviço do Google com a seguinte política de IAM (instruções de criação vinculadas abaixo):
roles/iam.serviceAccountAdmin
serviceAccount:${CLUSTER_PROJECT}.svc.id.goog[kf/controller]
(para membroserviceAccount:${CLUSTER_PROJECT}.svc.id.goog[kf/controller]
)
Ativar o suporte para o Compute Engine
- 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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
- Ative a API Compute Engine.
Ativar suporte para o Artifact Registry
- Ative a API Artifact Registry.
Ativar e configurar o GKE
Antes de começar, veja se você realizou as seguintes tarefas:
- Ativar a API Google Kubernetes Engine. Ativar a API Google Kubernetes Engine
- Se você quiser usar a Google Cloud CLI para essa tarefa,
instale e, em seguida,
inicialize a
CLI gcloud. Se você instalou a CLI gcloud anteriormente, instale a versão
mais recente executando
gcloud components update
.
Criar e preparar um novo cluster do GKE
Configurar as variáveis de ambiente
Linux
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} export NODE_COUNT=4 export MACHINE_TYPE=e2-standard-4 export NETWORK=default export KF_VERSION=v2.3.2 export TEKTON_VERSION=v0.19.0
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 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 KF_VERSION -Value v2.3.0 Set-Variable -Name TEKTON_VERSION -Value v0.19.0
Configuração da conta de serviço
Crie uma conta de serviço do GCP (GSA) que será associada a uma conta de serviço do Kubernetes por meio da Identidade da carga de trabalho. Isso evita a necessidade de criar e injetar uma chave de conta de serviço.
Crie a conta de serviço que o Kf usará.
gcloud iam service-accounts create ${CLUSTER_NAME}-sa \ --project=${CLUSTER_PROJECT_ID} \ --description="GSA for Kf ${CLUSTER_NAME}" \ --display-name="${CLUSTER_NAME}"
Permita que a conta de serviço modifique sua própria política. O controlador Kf usará esse parâmetro para adicionar novos (nomes) espaços à política, permitindo a reutilização da Identidade da carga de trabalho.
gcloud iam service-accounts add-iam-policy-binding ${CLUSTER_NAME}-sa@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com \ --project=${CLUSTER_PROJECT_ID} \ --role="roles/iam.serviceAccountAdmin" \ --member="serviceAccount:${CLUSTER_NAME}-sa@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com"
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}.iam.gserviceaccount.com" \ --role="roles/monitoring.metricWriter"
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}.iam.gserviceaccount.com" \ --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} \ --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"
Definir regras de firewall
O Kf requer a abertura de algumas portas de firewall. O nó mestre precisa ser capaz de 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 \ "${CLUSTER_NAME}-sa@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com" \ --project=${CLUSTER_PROJECT_ID} \ --role="roles/iam.workloadIdentityUser" \ --member="serviceAccount:${CLUSTER_PROJECT_ID}.svc.id.goog[kf/controller]"
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
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}
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}.iam.gserviceaccount.com" \ --role='roles/artifactregistry.writer'
Instalar dependências de software no cluster
Instale o Service Mesh.
Instale o Tekton:
kubectl apply -f "https://github.com/tektoncd/pipeline/releases/download/${TEKTON_VERSION}/release.yaml"
Instalar o Kf
Consulte Criar e preparar um cluster do GKE para Kf para criar um cluster preparado para executar o Kf.
Selecione e anote a versão do Kf desejada. Consulte a página Downloads do Kf para ver as versões disponíveis
Instale a CLI:
Linux
Isso instalará
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/${KF_VERSION}/kf-linux /tmp/kf
chmod a+x /tmp/kf
sudo mv /tmp/kf /usr/local/bin/kf
Mac
Isso instalará
kf
para todos os usuários no sistema.gcloud storage cp gs://kf-releases/${KF_VERSION}/kf-darwin /tmp/kf
chmod a+x /tmp/kf
sudo mv /tmp/kf /usr/local/bin/kf
Cloud Shell
Isso instalará
kf
na sua instância do Cloud Shell se você usarbash
. Talvez as instruções precisem ser modificadas para outros shells.mkdir -p ~/bin
gcloud storage cp gs://kf-releases/${KF_VERSION}/kf-linux ~/bin/kf
chmod a+x ~/bin/kf
echo "export PATH=$HOME/bin:$PATH" >> ~/.bashrc
source ~/.bashrc
Windows
O download do arquivo
kf
no diretório atual será feito. Adicione-o ao caminho se você quiser chamar de outro local que não seja diretório atual.gcloud storage cp gs://kf-releases/${KF_VERSION}/kf-windows.exe kf.exe
Instale os componentes do servidor:
Linux e Mac
Isso fará o download do kf.yaml no diretório atual.
gcloud storage cp gs://kf-releases/${KF_VERSION}/kf.yaml /tmp/kf.yaml
kubectl apply -f /tmp/kf.yaml
Windows
Isso fará o download do kf.yaml no diretório atual.
gcloud storage cp gs://kf-releases/${KF_VERSION}/kf.yaml kf.yaml
kubectl apply -f kf.yaml
Configurar secrets:
export WI_ANNOTATION=iam.gke.io/gcp-service-account=${CLUSTER_NAME}-sa@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com kubectl annotate serviceaccount controller ${WI_ANNOTATION} \ --namespace kf \ --overwrite echo "{\"apiVersion\":\"v1\",\"kind\":\"ConfigMap\",\"metadata\":{\"name\":\"config-secrets\", \"namespace\":\"kf\"},\"data\":{\"wi.googleServiceAccount\":\"${CLUSTER_NAME}-sa@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com\"}}" | kubectl apply -f -
Defina os padrões Kf, esses valores podem ser alterados posteriormente. O exemplo abaixo usa modelos de domínio com um provedor de DNS curinga para fornecer a cada espaço seu próprio nome de domínio:
export CONTAINER_REGISTRY=${COMPUTE_REGION}-docker.pkg.dev/${CLUSTER_PROJECT_ID}/${CLUSTER_NAME} export DOMAIN='$(SPACE_NAME).$(CLUSTER_INGRESS_IP).nip.io' kubectl patch configmaps config-defaults \ -n=kf \ -p="{\"data\":{\"spaceContainerRegistry\":\"${CONTAINER_REGISTRY}\",\"spaceClusterDomains\":\"- domain: ${DOMAIN}\"}}"
Valide a instalação:
kf doctor --retries 10
Limpar
Essas etapas precisam remover todos os componentes criados na seção Criar e preparar um novo cluster do GKE.
Exclua a conta de serviço do Google:
gcloud iam service-accounts delete ${CLUSTER_NAME}-sa@${CLUSTER_PROJECT_ID}.iam.gserviceaccount.com
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}.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"
Excluir repositório de imagens de contêiner:
gcloud artifacts repositories delete ${CLUSTER_NAME} \ --location=${COMPUTE_REGION}
Exclua o cluster do GKE:
gcloud container clusters delete ${CLUSTER_NAME} --zone ${CLUSTER_LOCATION}