Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
O AKS (Serviço de Kubernetes do Azure) é um serviço de Kubernetes gerenciado que permite implantar e gerenciar clusters rapidamente. Neste guia de início rápido, você aprende a:
- Crie um cluster do AKS usando o Flatcar Container Linux para AKS (versão prévia).
- Implantar um cluster do AKS usando a CLI do Azure.
- Executar um exemplo de aplicativo de múltiplos contêineres com um grupo de microsserviços e interfaces web para simular um cenário de varejo.
Observação
Este artigo inclui etapas para implantar um cluster com configurações padrão somente 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 ele se alinha aos seus requisitos de negócios.
Antes de começar
Este guia de início rápido pressupõe uma compreensão básica dos conceitos do Kubernetes. Para obter mais informações, confira Principais conceitos do Kubernetes para o AKS (Serviço de Kubernetes do Azure).
- Se você ainda não tiver uma conta do Azure, crie uma conta gratuita antes de começar.
Utilize o ambiente Bash no Azure Cloud Shell. Para obter mais informações, confira Introdução ao Azure Cloud Shell.
Se você preferir executar comandos de referência da CLI localmente, instale a CLI do Azure. Se você estiver executando no Windows ou no macOS, considere executar a CLI do Azure em um contêiner do Docker. Para obter mais informações, confira Como executar a CLI do Azure em um contêiner do Docker.
Se você estiver usando uma instalação local, entre na CLI do Azure usando o comando az login . Para concluir o processo de autenticação, siga as etapas exibidas em seu terminal. Para obter outras opções de entrada, consulte Autenticar no Azure usando a CLI do Azure.
Quando solicitado, instale a extensão da CLI do Azure no primeiro uso. Para obter mais informações sobre extensões, confira Usar e gerenciar extensões com a CLI do Azure.
Execute o comando az version para localizar a versão e as bibliotecas dependentes que estão instaladas. Para atualizar para a versão mais recente, execute az upgrade.
- Certifique-se de que a identidade que você está usando para criar seu cluster tenha as permissões mínimas apropriadas. Para obter mais informações sobre acesso e identidade do AKS, confira Opções de acesso e identidade para o AKS (Serviço de Kubernetes do Azure).
- Se tiver várias assinaturas do Azure, selecione a ID da assinatura adequada para cobrança dos recursos usando o comando
az account set. Para obter mais informações, veja Como gerenciar assinaturas do Azure – CLI do Azure. - Dependendo de sua assinatura do Azure, talvez seja necessário solicitar um aumento de cota de vCPU. Para obter mais informações, confira Aumentar as cotas de vCPU da família de VMs.
Registrar provedores de recursos
Talvez seja necessário registrar provedores de recursos em sua assinatura do Azure. Por exemplo, Microsoft.ContainerService é necessário.
Verifique o status do registro usando o az provider show comando.
az provider show --namespace Microsoft.ContainerService --query registrationState
Se necessário, registre o provedor de recursos usando o comando de registro do provedor az .
az provider register --namespace Microsoft.ContainerService
Instalar aks-preview extensão
Importante
As funcionalidades em versão preliminar do AKS estão disponíveis de forma optativa e por autoatendimento. As versões prévias são fornecidas “no estado em que se encontram” e “conforme disponíveis” e são excluídas dos contratos de nível de serviço e da garantia limitada. As versões prévias do AKS são parcialmente cobertas pelo suporte ao cliente em uma base de melhor esforço. Dessa forma, esses recursos não são destinados ao uso em produção. Para obter mais informações, consulte os seguintes artigos:
Instale a extensão
aks-previewda CLI do Azure usando o comandoaz extension add.az extension add --name aks-previewAtualize para a última versão da extensão usando o comando
az extension update. O Contêiner Flatcar Linux requer um mínimo de 18.0.0b42.az extension update --name aks-preview
Registrar o sinalizador de recurso AKSFlatcarPreview
Registre o sinalizador de recurso
AKSFlatcarPreviewusando o comandoaz feature register.az feature register --namespace "Microsoft.ContainerService" --name "AKSFlatcarPreview"Verifique o status do registro usando o comando
az feature show. Demora alguns minutos para o status mostrar Registrado.az feature show --namespace Microsoft.ContainerService --name AKSFlatcarPreviewQuando o status reflete Registrado, atualize o registro do provedor de recursos Microsoft.ContainerService usando o comando
az provider register.az provider register --namespace Microsoft.ContainerService
Definir variáveis de ambiente
- Defina as seguintes variáveis de ambiente para uso ao longo deste início rápido:
export RANDOM_ID="$(openssl rand -hex 3)"
export MY_RESOURCE_GROUP_NAME="myAKSResourceGroup$RANDOM_ID"
export REGION="westus"
export MY_AKS_CLUSTER_NAME="myAKSCluster$RANDOM_ID"
O RANDOM_ID valor da variável é um valor alfanumérico de seis caracteres acrescentado ao grupo de recursos e ao nome do cluster para que os nomes sejam exclusivos. Use o echo comando para exibir valores variáveis como echo $RANDOM_ID.
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ê é solicitado a especificar um local. Essa é a localização na qual os metadados do grupo de recursos são armazenados e na qual os recursos são executados no Azure, caso você não especifique outra região durante a criação de recursos.
- Crie um grupo de recursos usando o comando
az group create.
az group create \
--name $MY_RESOURCE_GROUP_NAME \
--location $REGION
Exemplo de saída:
{
"id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/myAKSResourceGroup<randomIDValue>",
"location": "westus",
"managedBy": null,
"name": "myAKSResourceGroup<randomIDValue>",
"properties": {
"provisioningState": "Succeeded"
},
"tags": null,
"type": "Microsoft.Resources/resourceGroups"
}
Criar um cluster AKS
- Crie um cluster do AKS usando o comando
az aks create. O exemplo a seguir cria um cluster com um nó e habilita uma identidade gerenciada atribuída pelo sistema:
az aks create \
--resource-group $MY_RESOURCE_GROUP_NAME \
--name $MY_AKS_CLUSTER_NAME \
--os-sku flatcar \
--node-count 1 \
--generate-ssh-keys
Observação
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, confira Por que dois grupos de recursos são criados com o AKS?
Conectar-se ao cluster
Para gerenciar um cluster do Kubernetes, use o cliente de linha de comando do Kubernetes, kubectl.
kubectl já está instalado se você usa o Azure Cloud Shell. Para instalar kubectl localmente, use o comando az aks install-cli.
Configure o
kubectlpara se conectar ao cluster do Kubernetes usando o comandoaz aks get-credentials. Este comando baixa as credenciais e configura a CLI do Kubernetes para usá-las.az aks get-credentials \ --resource-group $MY_RESOURCE_GROUP_NAME \ --name $MY_AKS_CLUSTER_NAMEVerifique a conexão com o cluster usando o comando
kubectl get. Esse comando retorna uma lista dos nós de cluster.kubectl get nodes
Implantar o aplicativo
A fim de implantar o aplicativo, use um arquivo de manifesto para criar todos os objetos necessários para executar o Aplicativo da Loja do AKS. Um arquivo de manifesto do Kubernetes define o estado desejado de um cluster, como quais imagens de contêiner executar. O manifesto inclui as seguintes implantações e serviços do Kubernetes:
- Store front: aplicativo Web para os clientes exibirem produtos e realizarem pedidos.
- Serviço de produto: mostra informações do produto.
- Serviço de pedido: faz pedidos.
-
RabbitMQ: Fila de mensagens para uma fila de pedidos.
Observação
Não recomendamos a execução de contêineres com estado, como RabbitMQ, sem armazenamento persistente para produção. Usamos isso aqui para simplificar, mas recomendamos o uso de serviços geridos, como o Azure Cosmos DB ou o Azure Service Bus.
Crie um arquivo chamado aks-store-quickstart.yaml e copie no manifesto a seguir.
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 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: "password" 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 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: "password" - 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 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 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, confira Implantações e manifestos YAML.
Se você criar e salvar o arquivo YAML localmente, poderá carregar o arquivo de manifesto no diretório padrão no Cloud Shell selecionando o botão Carregar/Baixar arquivos e selecionando o arquivo em seu sistema de arquivos local.
Implante o aplicativo usando o comando
kubectl applye especifique o nome do manifesto YAML.kubectl apply -f aks-store-quickstart.yamlA saída de exemplo a seguir mostra as implantações e os serviços:
deployment.apps/rabbitmq created service/rabbitmq created deployment.apps/order-service created service/order-service created deployment.apps/product-service created service/product-service created deployment.apps/store-front created service/store-front created
Testar o aplicativo
Quando o aplicativo é executado, um serviço de Kubernetes expõe o front-end do aplicativo à Internet. A conclusão desse processo pode levar alguns minutos.
Verifique o status dos pods implantados usando o comando
kubectl get pods. Garanta que todos os pods estejamRunning, antes de continuar.kubectl get podsVerifique se há um endereço IP público para o aplicativo
store-front. Monitore o andamento usando o comandokubectl get servicecom o argumento--watch.kubectl get service store-front --watchA saída EXTERNAL-IP do serviço
store-frontserá mostrada inicialmente como pendente:NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE store-front LoadBalancer 10.0.100.10 <pending> 80:30025/TCP 4h4mQuando o endereço EXTERNAL-IP for alterado de pendente para um endereço IP público real, use
CTRL-Cpara parar o processo de monitoramento dokubectl.A seguinte saída de exemplo mostra um endereço IP público válido atribuído ao serviço:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE store-front LoadBalancer 10.0.100.10 20.62.159.19 80:30025/TCP 4h5mAbra um navegador da Web no endereço IP externo do serviço para conferir o aplicativo do Microsoft Azure Store em ação.
Excluir o cluster
Se você não planeja passar pelo tutorial do AKS, limpe recursos desnecessários para evitar encargos de cobrança do Azure.
Remova 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 $MY_RESOURCE_GROUP_NAMEO cluster do AKS foi criado com uma identidade gerenciada atribuída pelo 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óximas etapas
Neste início rápido, você implantou um cluster do Kubernetes e, em seguida, implantou um aplicativo simples de vários contêineres nele. Esse aplicativo de exemplo é apenas para fins de demonstração e não representa todas as melhores práticas para aplicativos do Kubernetes. Para obter diretrizes sobre como criar soluções completas com o AKS para produção, consulte as diretrizes da solução do AKS.
Para saber mais sobre o AKS e fazer um exemplo completo de código para implantação, continue para o tutorial do cluster do Kubernetes.