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:
Defina o projeto predefinido:
gcloud config set project PROJECT_ID
Substitua
PROJECT_ID
pelo ID do seu projeto.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, comous-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:
VNET_RESOURCE_GROUP_NAME
com o nome do grupo de recursos que contém a sua rede virtual, conforme configurado no passo de pré-requisito Criar uma rede virtual do Azure.VNET_NAME
com o nome da sua rede virtual, conforme configurado no passo Crie uma rede virtual do Azure de pré-requisito.
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/20Intervalo 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:
AZURE_REGION
: a região do Azure suportada associada à sua Google Cloud regiãoFLEET_PROJECT_ID
com o ID do projeto anfitrião da frota onde o cluster vai ser registado.CLIENT_NAME
: o nome do seu AzureClient.POD_CIDR_BLOCK
: o intervalo de endereços de pods do seu clusterSERVICE_CIDR_BLOCK
: o intervalo de endereços de serviço do clusterSSH_PUBLIC_KEY
com o texto da sua chave pública de SSH, conforme criado no passo pré-requisito Crie um par de chaves SSH. Se guardou a chave pública numa variável de ambiente nesse passo, pode usar${SSH_PUBLIC_KEY}
.
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 clusterGOOGLE_CLOUD_LOCATION
: o nome da Google Cloud localização que gere o cluster
Google Cloud consola
Na Google Cloud consola, aceda à página Vista geral dos clusters do Google Kubernetes Engine.
Os seus clusters são apresentados por nome e localização.
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 comlatest
.
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
Inspecione os pods em execução com
kubectl get pods
:kubectl get pods
Deve ver um
hello-server
pod em execução no cluster.Inspeccione o
hello-server
serviço através dekubectl 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
.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
Elimine o serviço e a implementação da aplicação:
kubectl delete service hello-server kubectl delete deployment hello-server
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
Elimine o cluster executando o comando
gcloud container azure clusters delete
:gcloud container azure clusters delete azure-cluster-0