Implantar um aplicativo no GKE no Azure

Nesta página, descrevemos como criar um cluster e um pool de nós e, em seguida, implantar um aplicativo de exemplo usando o GKE no Azure.

Suporte ao Terraform

Se você já conhece o Terraform, pode usar os scripts do Terraform disponíveis no GitHub para automatizar os pré-requisitos e criar um cluster.

Antes de começar

Antes de criar um cluster, conclua os pré-requisitos. Especificamente, é necessário fornecer os seguintes recursos:

  • Uma rede virtual do Azure em que o cluster será executado.
  • Uma sub-rede para as réplicas do plano de controle do Kubernetes.
  • Atribuições de papéis do Azure que concederão ao GKE no Azure acesso ao ambiente do Azure usando uma principal de serviço.
  • Um recurso AzureClient que o GKE no Azure usa para se autenticar nos serviços do Azure e gerenciar recursos na sua conta do Azure.
  • Um par de chaves SSH para acessar máquinas virtuais do Azure no cluster.

É sua responsabilidade criar e gerenciar esses recursos, que podem ser compartilhados entre todos os clusters. Todos os outros recursos do Azure para o cluster são gerenciados pelo GKE no Azure.

Definir as configurações padrão para a CLI gcloud

Use a CLI gcloud para definir as configurações padrão do projeto padrão e da região do Google Cloud.

O projeto tem um ID como identificador exclusivo. Ao criar um projeto, é possível usar o ID do projeto gerado automaticamente ou criar um próprio.

Sua região do Google Cloud é um local onde os clusters serão gerenciados. Por exemplo, us-west1 Consulte as regiões de gerenciamento para mais detalhes.

Ao definir essas configurações padrão, não é necessário incluí-las ao executar a Google Cloud CLI. Também é possível especificar configurações ou modificar as configurações padrão transmitindo as sinalizações --project e --location para a Google Cloud CLI.

Quando você cria o GKE nos recursos do Azure depois de configurar o projeto e o local padrão, os recursos são criados automaticamente nesse projeto e local.

Para definir os padrões, siga estas etapas:

  1. Defina o projeto padrão.

    gcloud config set project PROJECT_ID
    

    Substitua PROJECT_ID pela ID do seu projeto.

  2. Defina o local de gerenciamento padrão:

    gcloud config set container_azure/location GOOGLE_CLOUD_LOCATION
    

    Substitua GOOGLE_CLOUD_LOCATION pela sua localização, por exemplo, us-west1.

Selecionar IDs de recursos do Azure para o cluster

Selecionar um ID de grupo de recursos

Salve o grupo de recursos do cluster em uma variável de ambiente executando o seguinte comando:

CLUSTER_RESOURCE_GROUP_ID=$(az group show --query id --output tsv \
    --resource-group=CLUSTER_RESOURCE_GROUP_NAME)

Substitua CLUSTER_RESOURCE_GROUP_NAME pelo nome do grupo de recursos para provisionar os recursos do cluster, que você configurou na etapa de pré-requisito de Criar um grupo de recursos do Azure.

Selecionar um ID de rede virtual

Salve o ID do VNet do cluster em uma variável de ambiente executando o comando:

VNET_ID=$(az network vnet show --query id --output tsv \
    --resource-group=VNET_RESOURCE_GROUP_NAME \
    --name=VNET_NAME)

Substitua:

Selecionar um ID de sub-rede

Salve o ID da sub-rede do cluster em uma variável de ambiente executando o comando:

SUBNET_ID=$(az network vnet subnet show --query id --output tsv \
    --resource-group VNET_RESOURCE_GROUP_NAME \
    --vnet-name VNET_NAME \
    --name SUBNET_NAME)

Substitua:

  • VNET_RESOURCE_GROUP_NAME por um nome de grupo de recursos existente que contenha sua rede virtual; Pode ser o nome do grupo de recursos configurado em Criar uma rede virtual do Azure.
  • VNET_NAME pelo nome da rede virtual; Pode ser o nome da sua rede virtual configurada em Criar uma rede virtual do Azure.
  • SUBNET_NAME pelo nome da sub-rede, por exemplo, default.

Selecionar intervalos CIDR para o cluster

O Kubernetes exige que dois intervalos de CIDR sejam fornecidos para o cluster. Esses intervalos de CIDR precisam ser escolhidos para que não se sobreponham aos intervalos de CIDR usados pelas sub-redes VPC. Eles precisam ser grandes o suficiente para o tamanho máximo esperado do cluster.

  • Intervalo de CIDR do endereço do pod: quando um novo Pod é criado, ele recebe um endereço IP desse intervalo. Exemplo de intervalo: 192.168.208.0/20

  • Intervalo de CIDR do endereço do serviço: quando um novo Serviço é criado, um endereço IP desse intervalo é alocado para ele. Exemplo de intervalo: 192.168.224.0/20

Criar um cluster

Use o seguinte comando para criar um cluster no GKE no Azure.

gcloud container azure clusters create azure-cluster-0 \
    --cluster-version 1.28.7-gke.1700 \
    --azure-region AZURE_REGION \
    --fleet-project FLEET_PROJECT_ID \
    --client CLIENT_NAME \
    --resource-group-id $CLUSTER_RESOURCE_GROUP_ID \
    --vnet-id $VNET_ID \
    --subnet-id $SUBNET_ID \
    --pod-address-cidr-blocks POD_CIDR_BLOCK \
    --service-address-cidr-blocks SERVICE_CIDR_BLOCK \
    --ssh-public-key "SSH_PUBLIC_KEY" \
    --tags "google:gkemulticloud:cluster=azure-cluster-0"

Substitua:

Para mais informações e parâmetros opcionais, consulte a página de referência gcloud container azure clusters create.

Crie um pool de nós.

Crie um pool de nós com a Google Cloud CLI:

gcloud container azure node-pools create pool-0 \
    --cluster azure-cluster-0 \
    --node-version 1.28.7-gke.1700 \
    --vm-size Standard_B2s \
    --max-pods-per-node 110 \
    --min-nodes 1 \
    --max-nodes 5 \
    --ssh-public-key "SSH_PUBLIC_KEY" \
    --subnet-id $SUBNET_ID \
    --tags "google:gkemulticloud:cluster=azure-cluster-0"

Substitua SSH_PUBLIC_KEY pelo texto da chave pública SSH, conforme criado na etapa de pré-requisito Criar um par de chaves SSH. Se você salvou a chave pública em uma variável de ambiente, será possível usar ${SSH_PUBLIC_KEY}.

Ver o status do cluster

Depois de criar um cluster e um pool de nós, é possível ver o status de um cluster com a Google Cloud CLI ou o console do Google Cloud. Para ver o status do cluster, escolha se você está usando a Google Cloud CLI ou o console do Google Cloud e siga estas etapas:

gcloud

Use o comando gcloud container azure clusters describe para ver detalhes sobre o cluster:

gcloud container azure clusters describe CLUSTER_NAME \
    --location GOOGLE_CLOUD_LOCATION

Substitua:

  • CLUSTER_NAME: o nome do cluster.
  • GOOGLE_CLOUD_LOCATION: o nome do local do Google Cloud que gerencia o cluster

Console do Google Cloud

  1. No console do Google Cloud, acesse a página Visão geral dos clusters do Google Kubernetes Engine.

    Acesse os clusters do GKE

  2. Os clusters são listados por nome e local.

  3. Clique no nome do cluster. Será exibido um painel com informações sobre o cluster, incluindo o status e os recursos ativados.

receba as credenciais de autenticação para o cluster

Depois de criar o cluster, você precisará das credenciais de autenticação para interagir com o cluster:

gcloud container azure clusters get-credentials azure-cluster-0

Esse comando configura kubectl para acessar o cluster que você criou pelo Gateway do Connect. Você precisa de pelo menos um pool de nós para usar o gateway do Connect porque ele depende do agente do Connect, que é executado como uma implantação no cluster.

Implantar um aplicativo no cluster

Agora que criou um cluster, é possível implantar um aplicativo conteinerizado nele. Para este guia de início rápido, implante nosso aplicativo da Web de exemplo, hello-app.

Você usa objetos do Kubernetes para criar e gerenciar os recursos do cluster. Use o objeto de implantação para implantar aplicativos sem estado, como servidores da Web. Os objetos de Serviço definem as regras e os balanceadores de carga para acessar o aplicativo pela Internet.

Criar a implantação

Para executar hello-app no cluster, você precisa implantar o aplicativo executando o seguinte comando:

kubectl create deployment hello-server --image=us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0

Este comando do Kubernetes, kubectl create deployment, cria uma implantação chamada hello-server. O pod da implantação executa a imagem de contêiner hello-app.

Nesse comando:

  • --image especifica uma imagem de contêiner a ser implantada. Nesse caso, o comando extrai a imagem de exemplo de um repositório do Artifact Registry, us-docker.pkg.dev/google-samples/containers/gke/hello-app. :1.0 indica a versão da imagem específica a ser extraída. Se você não especificar uma versão, a imagem marcada com latest será usada.

Expor a implantação

Após a implantação do aplicativo, você precisará expô-lo na Internet para que os usuários possam acessá-lo. Você pode expor seu aplicativo criando um serviço, um recurso do Kubernetes que expõe seu aplicativo ao tráfego externo.

Para expor seu aplicativo, execute o seguinte comando kubectl expose:

kubectl expose deployment hello-server --type LoadBalancer --port 80 --target-port 8080

Transmitir a sinalização --type LoadBalancer cria um balanceador de carga do Azure para o contêiner. A sinalização --port inicializa a porta pública 80 na Internet e a sinalização --target-port encaminha o tráfego para a porta 8080 do aplicativo.

Os balanceadores de carga são cobrados de acordo com os preços dos balanceadores de carga do Azure.

Inspecionar e ver o aplicativo

  1. Inspecione os pods em execução usando kubectl get pods:

    kubectl get pods
    

    Você verá um pod hello-server em execução no cluster.

  2. Use kubectl get service para inspecionar o serviço hello-server:

    kubectl get service hello-server
    

    Na saída desse comando, copie o endereço IP externo do serviço da coluna EXTERNAL-IP.

  3. Use o IP externo com a porta exposta a seguir para ver o aplicativo pelo navegador da Web:

    http://EXTERNAL-IP
    

Você acabou de implantar um aplicativo da Web conteinerizado no GKE no Azure.

Limpar

  1. Exclua o Serviço e a implantação do aplicativo:

    kubectl delete service hello-server
    kubectl delete deployment hello-server
    
  2. Execute gcloud container azure node-pools delete para excluir o pool de nós:

    gcloud container azure node-pools delete pool-0 --cluster azure-cluster-0
    
  3. Execute gcloud container azure clusters delete para excluir o cluster:

    gcloud container azure clusters delete azure-cluster-0
    

A seguir