Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
O Serviço Kubernetes do Azure (AKS) é um serviço Kubernetes gerenciado que permite implantar e gerenciar clusters rapidamente. Neste início rápido, vai aprender a:
- Implemente um cluster AKS com definições predefinidas usando a CLI do Azure.
- Implemente uma aplicação de exemplo de multicontentores com um grupo de microserviços e interfaces front-end web simulando um cenário de retalho.
Note
Este artigo inclui passos para implementar um cluster apenas para fins de avaliação. Antes de implantar um cluster pronto para produção, recomendamos que você se familiarize com nossa arquitetura de referência de linha de base para considerar como ela se alinha aos seus requisitos de negócios.
Se quiser apenas implementar um cluster de serviços Azure Kubernetes, selecione Implementar para Azure para abrir o seu navegador no portal Azure e selecione Executar todos os passos.
Antes de começar
Este guia de introdução pressupõe um entendimento básico dos conceitos de Kubernetes. Para obter mais informações, consulte Conceitos principais do Kubernetes para o Serviço Kubernetes do Azure (AKS).
- Se não tiver uma conta do Azure, crie uma conta gratuita antes de começar.
Use o ambiente Bash no Azure Cloud Shell. Para obter mais informações, consulte Introdução ao Azure Cloud Shell.
Se preferir executar comandos de referência da CLI localmente, instale a CLI do Azure. Se estiver a utilizar o Windows ou macOS, considere executar a CLI do Azure num contentor Docker. Para obter mais informações, consulte Como executar a CLI do Azure em um contêiner do Docker.
Se estiver a utilizar uma instalação local, inicie sessão no CLI do Azure ao utilizar o comando az login. Para concluir o processo de autenticação, siga os passos apresentados no seu terminal. Para outras opções de entrada, consulte Autenticar no Azure usando a CLI do Azure.
Quando solicitado, instale a extensão da CLI do Azure na primeira utilização. Para obter mais informações sobre extensões, consulte Usar e gerenciar extensões com a CLI do Azure.
Execute o comando az version para localizar a versão e as bibliotecas dependentes instaladas. Para atualizar para a versão mais recente, execute o comando az upgrade.
- Verifique se a identidade que você está usando para criar seu cluster tem as permissões mínimas apropriadas. Para obter mais informações sobre acesso e identidade para AKS, consulte Opções de acesso e identidade para o Serviço Kubernetes do Azure (AKS).
- Se você tiver várias assinaturas do Azure, selecione a ID de assinatura apropriada na qual os recursos devem ser cobrados usando o comando az account set . Para obter mais informações, consulte Como gerenciar assinaturas do Azure – CLI do Azure.
- Dependendo da sua assinatura do Azure, talvez seja necessário solicitar um aumento de cota de vCPU. Para obter mais informações, consulte Aumentar cotas de vCPU da família VM.
Registrar provedores de recursos
Talvez seja necessário registrar provedores de recursos em sua assinatura do Azure. Por exemplo, Microsoft.ContainerService é obrigatório.
Execute o seguinte comando para verificar o status do registro.
az provider show --namespace Microsoft.ContainerService --query registrationState
Se necessário, registre o provedor de recursos.
az provider register --namespace Microsoft.ContainerService
Definir variáveis de ambiente
Defina as seguintes variáveis de ambiente para uso durante este início rápido.
export RANDOM_STRING=$(printf '%05d%05d' "$RANDOM" "$RANDOM")
export RESOURCE_GROUP="myAKSResourceGroup$RANDOM_STRING"
export CLUSTER_NAME="myAKSCluster$RANDOM_STRING"
export USER_NP='userpool1'
export LOCATION="westus"
A RANDOM_STRING variável armazena uma sequência aleatória de 10 dígitos. Os valores das variáveis RESOURCE_GROUP e CLUSTER_NAME são concatenados com o valor RANDOM_STRING para criar nomes únicos. Armazena USER_NP um nome para um pool de nós em modo utilizador. A LOCATION variável tem o valor westus2. Pode usar estes valores variáveis ou criar os seus próprios. Use o echo comando para exibir valores de variáveis como echo $RANDOM_STRING.
Criar um grupo de recursos
Um grupo de recursos do Azure é um grupo lógico no qual os recursos do Azure são implantados e gerenciados. Ao criar um grupo de recursos, você será solicitado a especificar um local. Esse local é o local de armazenamento dos metadados do grupo de recursos e onde os recursos são executados no Azure se você não especificar outra região durante a criação do recurso.
Crie um grupo de recursos usando o comando az group create .
az group create --name $RESOURCE_GROUP --location $LOCATION
O resultado é semelhante ao exemplo a seguir.
{
"id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/myAKSResourceGroup<randomStringValue>",
"location": "westus",
"managedBy": null,
"name": "myAKSResourceGroup<randomStringValue>",
"properties": {
"provisioningState": "Succeeded"
},
"tags": null,
"type": "Microsoft.Resources/resourceGroups"
}
Criar um cluster do AKS
Crie um cluster AKS usando o comando az aks create . O exemplo a seguir cria um cluster com um nó e ativa uma identidade gerida atribuída pelo sistema.
az aks create \
--resource-group $RESOURCE_GROUP \
--name $CLUSTER_NAME \
--node-count 1 \
--generate-ssh-keys
Quando você cria um novo cluster, o AKS cria automaticamente um segundo grupo de recursos para armazenar os recursos do AKS. Para obter mais informações, consulte Por que dois grupos de recursos são criados com o AKS?
O cluster neste exemplo especifica um número de nós de um para poupar tempo e recursos. Num ambiente de produção, a recomendação é um número de nós de três ou mais nós. O az aks create padrão é três nós se não especificares um número de nós.
Adicionar um pool de nós em modo utilizador
As aplicações devem executar em grupos de nós em modo utilizador em vez do grupo de nós padrão do sistema. Os grupos de nós de utilizador proporcionam melhor isolamento e flexibilidade para cargas de trabalho de aplicações. Adicione um pool de nós de utilizadores ao seu cluster usando o comando az aks nodepool add.
az aks nodepool add \
--resource-group $RESOURCE_GROUP \
--cluster-name $CLUSTER_NAME \
--name $USER_NP \
--node-count 1 \
--mode User
Tal como no cluster, especificámos um nó, mas o padrão são três nós caso não se especifique um número de nós.
Depois de o pool de nós de utilizador ter sido criado, pode verificar se o seu cluster possui um pool de nós do sistema e um pool de nós de utilizador usando o comando az aks nodepool list.
az aks nodepool list \
--resource-group $RESOURCE_GROUP \
--cluster-name $CLUSTER_NAME \
--query "[].{Count:count, Mode:mode, NodePool:name, ResourceGroup:resourceGroup}"
[
{
"Count": 1,
"Mode": "System",
"NodePool": "nodepool1",
"ResourceGroup": "myAKSResourceGroup1234554321"
},
{
"Count": 1,
"Mode": "User",
"NodePool": "userpool1",
"ResourceGroup": "myAKSResourceGroup1234554321"
}
]
Ligar ao cluster
Para gerenciar um cluster Kubernetes, use o cliente de linha de comando Kubernetes, kubectl.
kubectl já está instalado se você usar o Azure Cloud Shell. Para instalar kubectl localmente, use o comando az aks install-cli .
Configure
kubectlpara se conectar ao cluster Kubernetes usando o comando az aks get-credentials. Este comando baixa credenciais e configura a CLI do Kubernetes para usá-las.az aks get-credentials --resource-group $RESOURCE_GROUP --name $CLUSTER_NAMEVerifique a conexão com seu cluster usando o comando kubectl get . Este comando retorna uma lista dos nós do cluster.
kubectl get nodesNAME STATUS ROLES AGE VERSION aks-nodepool1-123456789-vmss000000 Ready <none> 15m v1.34.4 aks-userpool1-123456789-vmss000000 Ready <none> 5m36s v1.34.4Existem dois nós:
nodepool1o pool de nós do sistema criado com o cluster euserpool1o pool de nós do utilizador adicionado ao cluster.
Implementar a aplicação
Para implantar o aplicativo, use um arquivo de manifesto para criar todos os objetos necessários para executar o aplicativo AKS Store. Um arquivo de manifesto do Kubernetes define o estado desejado de um cluster, como quais imagens de contêiner devem ser executadas. O manifesto inclui as seguintes implantações e serviços do Kubernetes:
- Loja online: aplicação web para os clientes verem produtos e encomendar.
- Serviço do produto: Mostra as informações do produto.
- Serviço de pedidos: Faz pedidos.
-
RabbitMQ: Fila de mensagens para uma fila de pedidos.
Note
Não recomendamos a execução de contêineres com monitoração de estado, como RabbitMQ, sem armazenamento persistente para produção. Usamos isso aqui para simplificar, mas recomendamos o uso de serviços gerenciados, como o Azure Cosmos DB ou o Azure Service Bus.
Crie um arquivo chamado aks-store-quickstart.yaml e copie no manifesto a seguir. Substitua os dois marcadores
<defaultPassword>pela sua própria palavra-passe. Esta palavra-passe é usada para o utilizador padrão daRabbitMQinstância.apiVersion: apps/v1 kind: StatefulSet metadata: name: rabbitmq spec: serviceName: rabbitmq replicas: 1 selector: matchLabels: app: rabbitmq template: metadata: labels: app: rabbitmq spec: nodeSelector: kubernetes.io/os: linux kubernetes.azure.com/mode: user containers: - name: rabbitmq image: mcr.microsoft.com/mirror/docker/library/rabbitmq:3.10-management-alpine ports: - containerPort: 5672 name: rabbitmq-amqp - containerPort: 15672 name: rabbitmq-http env: - name: RABBITMQ_DEFAULT_USER value: "username" - name: RABBITMQ_DEFAULT_PASS value: "<defaultPassword>" resources: requests: cpu: 10m memory: 128Mi limits: cpu: 250m memory: 256Mi volumeMounts: - name: rabbitmq-enabled-plugins mountPath: /etc/rabbitmq/enabled_plugins subPath: enabled_plugins volumes: - name: rabbitmq-enabled-plugins configMap: name: rabbitmq-enabled-plugins items: - key: rabbitmq_enabled_plugins path: enabled_plugins --- apiVersion: v1 data: rabbitmq_enabled_plugins: | [rabbitmq_management,rabbitmq_prometheus,rabbitmq_amqp1_0]. kind: ConfigMap metadata: name: rabbitmq-enabled-plugins --- apiVersion: v1 kind: Service metadata: name: rabbitmq spec: selector: app: rabbitmq ports: - name: rabbitmq-amqp port: 5672 targetPort: 5672 - name: rabbitmq-http port: 15672 targetPort: 15672 type: ClusterIP --- apiVersion: apps/v1 kind: Deployment metadata: name: order-service spec: replicas: 1 selector: matchLabels: app: order-service template: metadata: labels: app: order-service spec: nodeSelector: kubernetes.io/os: linux kubernetes.azure.com/mode: user containers: - name: order-service image: ghcr.io/azure-samples/aks-store-demo/order-service:latest ports: - containerPort: 3000 env: - name: ORDER_QUEUE_HOSTNAME value: "rabbitmq" - name: ORDER_QUEUE_PORT value: "5672" - name: ORDER_QUEUE_USERNAME value: "username" - name: ORDER_QUEUE_PASSWORD value: "<defaultPassword>" - name: ORDER_QUEUE_NAME value: "orders" - name: FASTIFY_ADDRESS value: "0.0.0.0" resources: requests: cpu: 1m memory: 50Mi limits: cpu: 75m memory: 128Mi startupProbe: httpGet: path: /health port: 3000 failureThreshold: 5 initialDelaySeconds: 20 periodSeconds: 10 readinessProbe: httpGet: path: /health port: 3000 failureThreshold: 3 initialDelaySeconds: 3 periodSeconds: 5 livenessProbe: httpGet: path: /health port: 3000 failureThreshold: 5 initialDelaySeconds: 3 periodSeconds: 3 initContainers: - name: wait-for-rabbitmq image: busybox command: ['sh', '-c', 'until nc -zv rabbitmq 5672; do echo waiting for rabbitmq; sleep 2; done;'] resources: requests: cpu: 1m memory: 50Mi limits: cpu: 75m memory: 128Mi --- apiVersion: v1 kind: Service metadata: name: order-service spec: type: ClusterIP ports: - name: http port: 3000 targetPort: 3000 selector: app: order-service --- apiVersion: apps/v1 kind: Deployment metadata: name: product-service spec: replicas: 1 selector: matchLabels: app: product-service template: metadata: labels: app: product-service spec: nodeSelector: kubernetes.io/os: linux kubernetes.azure.com/mode: user containers: - name: product-service image: ghcr.io/azure-samples/aks-store-demo/product-service:latest ports: - containerPort: 3002 env: - name: AI_SERVICE_URL value: "http://ai-service:5001/" resources: requests: cpu: 1m memory: 1Mi limits: cpu: 2m memory: 20Mi readinessProbe: httpGet: path: /health port: 3002 failureThreshold: 3 initialDelaySeconds: 3 periodSeconds: 5 livenessProbe: httpGet: path: /health port: 3002 failureThreshold: 5 initialDelaySeconds: 3 periodSeconds: 3 --- apiVersion: v1 kind: Service metadata: name: product-service spec: type: ClusterIP ports: - name: http port: 3002 targetPort: 3002 selector: app: product-service --- apiVersion: apps/v1 kind: Deployment metadata: name: store-front spec: replicas: 1 selector: matchLabels: app: store-front template: metadata: labels: app: store-front spec: nodeSelector: kubernetes.io/os: linux kubernetes.azure.com/mode: user containers: - name: store-front image: ghcr.io/azure-samples/aks-store-demo/store-front:latest ports: - containerPort: 8080 name: store-front env: - name: VUE_APP_ORDER_SERVICE_URL value: "http://order-service:3000/" - name: VUE_APP_PRODUCT_SERVICE_URL value: "http://product-service:3002/" resources: requests: cpu: 1m memory: 200Mi limits: cpu: 1000m memory: 512Mi startupProbe: httpGet: path: /health port: 8080 failureThreshold: 3 initialDelaySeconds: 5 periodSeconds: 5 readinessProbe: httpGet: path: /health port: 8080 failureThreshold: 3 initialDelaySeconds: 3 periodSeconds: 3 livenessProbe: httpGet: path: /health port: 8080 failureThreshold: 5 initialDelaySeconds: 3 periodSeconds: 3 --- apiVersion: v1 kind: Service metadata: name: store-front spec: ports: - port: 80 targetPort: 8080 selector: app: store-front type: LoadBalancerPara obter um detalhamento dos arquivos de manifesto YAML, consulte Desdobramentos e manifestos YAML.
Se você criar e salvar o arquivo YAML localmente, poderá carregar o arquivo de manifesto para seu diretório padrão no Cloud Shell selecionando o botão Upload/Download de arquivos e selecionando o arquivo do seu sistema de arquivos local.
Implante o aplicativo usando o comando kubectl apply e especifique o nome do seu manifesto YAML.
kubectl apply -f aks-store-quickstart.yamlExecute o seguinte comando para verificar se a aplicação está implementada num pool de nós de utilizador.
kubectl get pods -o wideO resultado mostrará que os pods rabbitmq, order-service, product-service e store-front estão a executar num nó do pool de nós do utilizador.
Testar a aplicação
Você pode validar se o aplicativo está em execução visitando o endereço IP público ou a URL do aplicativo.
Execute os seguintes comandos para mostrar a URL da aplicação:
runtime="5 minutes"
endtime=$(date -ud "$runtime" +%s)
while [[ $(date -u +%s) -le $endtime ]]
do
STATUS=$(kubectl get pods -l app=store-front -o 'jsonpath={..status.conditions[?(@.type=="Ready")].status}')
echo $STATUS
if [ "$STATUS" == 'True' ]
then
export IP_ADDRESS=$(kubectl get service store-front --output 'jsonpath={..status.loadBalancer.ingress[0].ip}')
echo "service IP address: $IP_ADDRESS"
break
else
sleep 10
fi
done
A saída mostra o endereço IP público da aplicação no <applicationIPAddress> marcador de posição. Usa esse endereço IP para visualizar a aplicação nos próximos passos.
service IP Address: <applicationIPAddress>
Execute o seguinte comando para enviar um pedido à URL da aplicação. Substitua <applicationIPAddress> pelo endereço IP do serviço.
curl <applicationIPAddress>
O comando devolve uma saída HTML que mostra que a aplicação responde ao pedido.
<!doctype html>
<html lang="">
<head>
<meta charset="UTF-8" />
<link rel="icon" href="/favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Contoso Pet Store</title>
<script type="module" crossorigin src="/assets/index-CLiaTzSi.js"></script>
<link rel="stylesheet" crossorigin href="/assets/index-Cv6jORyk.css">
</head>
<body>
<div id="app"></div>
</body>
</html>
Para visualizar o site da aplicação, abra um navegador e introduza o endereço IP do serviço. A página se parece com o exemplo a seguir.
Eliminar o cluster
Se não planeias fazer o tutorial do AKS, limpa recursos desnecessários para evitar cobranças no Azure. Você pode remover o grupo de recursos, o serviço de contêiner e todos os recursos relacionados usando o comando az group delete .
az group delete --name $RESOURCE_GROUP --no-wait --yes
O cluster AKS foi criado com uma identidade gerenciada atribuída ao sistema, que é a opção de identidade padrão usada neste início rápido. A plataforma gerencia essa identidade para que você não precise removê-la manualmente.
Próximos passos
Neste guia de início rápido, implementou um cluster Kubernetes e depois uma aplicação com múltiplos contentores simples. Este aplicativo de exemplo é apenas para fins de demonstração e não representa todas as práticas recomendadas para aplicativos Kubernetes. Para obter orientação sobre como criar soluções completas com o AKS para produção, consulte Orientação da solução AKS.
Para saber mais sobre o AKS e fazer um exemplo completo de código para implantação, continue para o tutorial do cluster Kubernetes.