Implemente uma aplicação no GKE no Azure

Esta página descreve como criar um cluster e um conjunto de nós e, em seguida, implementar uma aplicação de exemplo através do GKE no Azure.

Apoio técnico do Terraform

Se estiver familiarizado com 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, tem de concluir os pré-requisitos. Em particular, tem de fornecer os seguintes recursos:

  • Uma rede virtual do Azure onde o cluster vai ser executado.
  • Uma sub-rede para as réplicas do plano de controlo do Kubernetes.
  • Atribuições de funções do Azure que concedem ao GKE no Azure acesso ao seu ambiente do Azure através de um principal de serviço.
  • Um recurso AzureClient que o GKE no Azure usa para autenticar nos serviços Azure e gerir recursos na sua conta do Azure.
  • Um par de chaves SSH para aceder a máquinas virtuais do Azure no cluster.

É da sua responsabilidade criar e gerir estes recursos, que podem ser partilhados entre todos os seus clusters. Todos os outros recursos subjacentes do Azure para o seu cluster são geridos pelo GKE no Azure.

Defina as predefinições para a CLI gcloud

Use a CLI gcloud para configurar as predefinições do seu projeto e região predefinidos. Google Cloud

O seu projeto tem um ID do projeto como identificador exclusivo. Quando cria um projeto, pode usar o ID do projeto gerado automaticamente ou criar o seu próprio.

A sua Google Cloud região é uma localização a partir da qual os seus clusters são geridos. Por exemplo, us-west1. Consulte o artigo Regiões de gestão para ver mais detalhes.

Quando configura estas predefinições, não tem de as incluir quando executa a CLI Google Cloud. Também pode especificar definições ou substituir as definições predefinidas ao transmitir as flags --project e --location para a Google Cloud CLI.

Quando cria recursos do GKE no Azure depois de configurar o projeto e a localização predefinidos, os recursos são criados automaticamente nesse projeto e localização.

Para definir predefinições, siga estes passos:

  1. Defina o projeto predefinido:

    gcloud config set project PROJECT_ID
    

    Substitua PROJECT_ID pelo ID do seu projeto.

  2. Defina a localização de gestão predefinida:

    gcloud config set container_azure/location GOOGLE_CLOUD_LOCATION
    

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

Selecione IDs de recursos do Azure para o seu cluster

Selecione um ID do grupo de recursos

Guarde o grupo de recursos do cluster numa 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 aprovisionar os recursos do cluster, que configurou no passo de pré-requisito Crie um grupo de recursos do Azure.

Selecione um ID de rede virtual

Guarde o ID da VNet do cluster numa variável de ambiente executando o seguinte comando:

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

Substitua o seguinte:

Selecione um ID da sub-rede

Guarde o ID da sub-rede do cluster numa variável de ambiente executando o seguinte 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)

Substituição:

  • VNET_RESOURCE_GROUP_NAME com um nome de grupo de recursos existente que contenha a sua rede virtual. Este pode ser o nome do grupo de recursos que configurou em Crie uma rede virtual do Azure.
  • VNET_NAME com o nome da sua rede virtual. Pode ser o nome da sua rede virtual que configurou em Criar uma rede virtual do Azure.
  • SUBNET_NAME com o nome da sua sub-rede. Por exemplo, default.

Selecione intervalos CIDR para o seu cluster

O Kubernetes requer que sejam fornecidos dois intervalos CIDR para o cluster. Estes intervalos CIDR devem ser escolhidos de forma a não se sobreporem aos intervalos CIDR usados pelas sub-redes de VPC. Devem ser suficientemente grandes para o tamanho máximo esperado do cluster.

  • Intervalo CIDR do endereço do pod: quando é criado um novo Pod, é-lhe atribuído um endereço IP deste intervalo. Intervalo de exemplo: 192.168.208.0/20

  • Intervalo CIDR do endereço de serviço: quando é criado um novo serviço, é-lhe atribuído um endereço IP a partir deste intervalo. Intervalo de exemplo: 192.168.224.0/20

Crie 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.32.4-gke.200 \
    --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"

Substituição:

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

Crie um node pool

Crie um node pool com a Google Cloud CLI:

gcloud container azure node-pools create pool-0 \
    --cluster azure-cluster-0 \
    --node-version 1.32.4-gke.200 \
    --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 sua chave pública de SSH, conforme criado no passo de pré-requisito Crie um par de chaves SSH. Se guardou a chave pública numa variável de ambiente, pode usar ${SSH_PUBLIC_KEY}.

Veja o estado do cluster

Depois de criar um cluster e um conjunto de nós, pode ver o estado de um cluster com a CLI Google Cloud ou a Google Cloud consola. Para ver o estado do cluster, escolha se está a usar a CLI Google Cloud ou a Google Cloud consola e siga estes passos:

gcloud

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

gcloud container azure clusters describe CLUSTER_NAME \
    --location GOOGLE_CLOUD_LOCATION

Substitua o seguinte:

  • CLUSTER_NAME: o nome do cluster
  • GOOGLE_CLOUD_LOCATION: o nome da Google Cloud localização que gere o cluster

Google Cloud consola

  1. Na Google Cloud consola, aceda à página Vista geral dos clusters do Google Kubernetes Engine.

    Aceda aos clusters do GKE

  2. Os seus clusters são apresentados por nome e localização.

  3. Clique no nome do cluster. É apresentado um painel com informações sobre o cluster, incluindo o respetivo estado e funcionalidades ativadas.

Obtenha credenciais de autenticação para o cluster

Depois de criar o cluster, tem de obter credenciais de autenticação para interagir com o cluster:

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

Este comando configura o kubectl para aceder ao cluster que criou através do gateway de ligação. Precisa de, pelo menos, uma pool de nós para usar o gateway Connect, uma vez que depende do agente Connect, que é executado como uma implementação no cluster.

Implemente uma aplicação no cluster

Agora que criou um cluster, pode implementar uma aplicação em contentor no mesmo. Para este início rápido, pode implementar a nossa aplicação Web de exemplo, hello-app.

Usa objetos do Kubernetes para criar e gerir os recursos do cluster. Usa o objeto Deployment para implementar aplicações sem estado, como servidores Web. Os objetos Service definem regras e balanceadores de carga para aceder à sua aplicação a partir da Internet.

Crie a implementação

Para executar o hello-app no seu cluster, tem de implementar a aplicação 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 implementação com o nome hello-server. O pod da implementação executa a imagem do contentor hello-app.

Neste comando:

  • --image especifica uma imagem de contentor a implementar. Neste 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. O elemento :1.0 indica a versão específica da imagem a obter. Se não especificar uma versão, é usada a imagem etiquetada com latest.

Exponha a implementação

Depois de implementar a aplicação, tem de a expor à Internet para que os utilizadores possam aceder à mesma. Pode expor a sua aplicação criando um serviço, um recurso do Kubernetes que expõe a sua aplicação ao tráfego externo.

Para expor a sua aplicação, execute o seguinte comando kubectl expose:

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

A transmissão da flag --type LoadBalancer cria um equilibrador de carga do Azure para o seu contentor. A flag --port inicializa a porta pública 80 para a Internet e a flag --target-port encaminha o tráfego para a porta 8080 da aplicação.

Os balanceadores de carga são faturados de acordo com os preços do balanceador de carga do Azure.

Inspecione e veja a aplicação

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

    kubectl get pods
    

    Deve ver um hello-server pod em execução no cluster.

  2. Inspeccione o hello-server serviço através de kubectl get service:

    kubectl get service hello-server
    

    A partir do resultado deste comando, copie o endereço IP externo do serviço da coluna EXTERNAL-IP.

  3. Veja a aplicação a partir do navegador de Internet através do IP externo com a porta exposta:

    http://EXTERNAL-IP
    

Acabou de implementar uma aplicação Web contentorizada no GKE no Azure.

Limpar

  1. Elimine o serviço e a implementação da aplicação:

    kubectl delete service hello-server
    kubectl delete deployment hello-server
    
  2. Elimine o node pool executando o comando gcloud container azure node-pools delete:

    gcloud container azure node-pools delete pool-0 --cluster azure-cluster-0
    
  3. Elimine o cluster executando o comando gcloud container azure clusters delete:

    gcloud container azure clusters delete azure-cluster-0
    

O que se segue?