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.
Neste guia de início rápido, utiliza a CLI do Azure para criar um cluster do Azure Kubernetes Service (AKS) que utiliza o Azure Container Linux (ACL) como sistema operativo (SO) dos nós. Depois de implementar o cluster, liga-se ao mesmo utilizando kubectl e verifica se os nós ACL estão a funcionar como esperado.
Considerações e limitações
Antes de começar, reveja as seguintes considerações e limitações para o ACL:
- O ACL está geralmente disponível a partir do AKS v1.34.
- ACL requer Trusted Launch com Secure Boot e vTPM. Variantes de Lançamento Não Confiável não estão disponíveis.
- A ACL no Arm64 requer SKUs baseados em Cobalto (v6) para permitir a compatibilidade com o Trusted Launch.
-
NodeImageeNonesão os únicos canais de atualização do sistema operativo suportados.UnmanagedeSecurityPatchsão incompatíveis com ACL devido ao diretório imutável/usr. - O Streaming de Artefactos não é suportado.
- O Pod Sandboxing não é suportado.
- Não há suporte para Máquinas Virtuais Confidenciais (CVMs).
- As VMs da Geração 1 não são suportadas.
Pré-requisitos
Note
Pode usar Azure Cloud Shell ou uma instalação local do CLI do Azure para executar os comandos neste quickstart.
- Se estiveres a correr o CLI do Azure localmente, instala o CLI do Azure. Se estiver a usar Windows ou macOS, considere executar o CLI do Azure num contentor Docker. Para mais informações, veja Como executar o CLI do Azure num contentor Docker.
- Se estiveres a usar uma instalação local, inicia sessão no CLI do Azure usando o comando
az login. Para concluir o processo de autenticação, siga os passos exibidos no seu terminal. Para outras opções de iniciação de sessão, veja Iniciar sessão com a CLI do Azure. - Se lhe for pedido, instale a extensão da CLI do Azure na primeira utilização. Para obter mais informações sobre as extensões, veja Utilizar extensões com o CLI do Azure.
- Use o comando
az versionpara encontrar a versão CLI do Azure e as bibliotecas dependentes instaladas. O Azure Container Linux requer CLI do Azure versão 2.86.0 ou superior. Para atualizar para a versão mais recente, use oaz upgradecomando. - Se necessário, registe o fornecedor de recursos Microsoft.ContainerService na sua subscrição do Azure.
Registe o fornecedor de recursos Microsoft.ContainerService
Talvez seja necessário registrar provedores de recursos em sua assinatura do Azure. Verifique o status do registro usando o az provider show comando.
az provider show --namespace Microsoft.ContainerService --query registrationState
Se necessário, registar o fornecedor de recursos usando o az provider register comando.
az provider register --namespace Microsoft.ContainerService
Criar um grupo de recursos
Um grupo de recursos do Azure é um grupo lógico, no qual os recursos do Azure são implementados e geridos. Ao criar um grupo de recursos, você precisa especificar um local. Esta localização é:
- O local de armazenamento dos metadados do grupo de recursos.
- Onde seus recursos serão executados no Azure se você não especificar outra região ao criar um recurso.
Crie um grupo de recursos usando o comando az group create. O exemplo seguinte define variáveis de ambiente para o nome do grupo de recursos, região e nome do cluster AKS, criando depois um grupo de recursos na localização especificada. Podes substituir os valores das variáveis de ambiente pelos teus próprios nomes e regiões preferidas.
export MY_RESOURCE_GROUP_NAME="myACLResourceGroup"
export REGION="westus"
export MY_AKS_CLUSTER_NAME="myACLCluster"
az group create --name $MY_RESOURCE_GROUP_NAME --location $REGION
Exemplo de saída:
{
"id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myACLResourceGroup",
"location": "westus",
"managedBy": null,
"name": "myACLResourceGroup",
"properties": {
"provisioningState": "Succeeded"
},
"tags": null,
"type": "Microsoft.Resources/resourceGroups"
}
Criar um cluster ACL
Crie um cluster AKS usando o az aks create comando com o --os-sku AzureContainerLinux parâmetro para provisionar o cluster AKS com uma imagem ACL.
az aks create \
--resource-group $MY_RESOURCE_GROUP_NAME \
--name $MY_AKS_CLUSTER_NAME \
--os-sku AzureContainerLinux \
--node-count 3 \
--generate-ssh-keys
Após alguns minutos, o comando conclui e retorna informações formatadas em JSON sobre o cluster.
Ligar ao cluster
Para gerenciar um cluster Kubernetes, use o cliente de linha de comando Kubernetes, kubectl.
kubectl já está instalado se usares Azure Cloud Shell. Para instalar kubectl localmente, use o az aks install-cli comando.
Configure
kubectlpara se conectar ao cluster do Kubernetes usando oaz aks get-credentialscomando. Este comando baixa 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 ao seu cluster utilizando o comando
kubectl get. Este comando devolve uma lista dos nodes do cluster.kubectl get nodes
Implementar a aplicação
Para implementar a aplicação, utiliza-se um ficheiro manifesto para criar todos os objetos necessários para executar a aplicação 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:
- Vitrine: aplicativo Web para que os clientes visualizem produtos e façam pedidos.
- Serviço do produto: Mostra as informações do produto.
- Serviço de pedidos: Faz pedidos.
- Rabbit MQ: Fila de mensagens para processamento de pedidos.
Note
Não recomendamos a execução de contentores com estado, como o RabbitMQ, sem armazenamento persistente para produção. Eles são usados aqui para simplificar, mas recomendamos o uso de serviços gerenciados, como o Azure Cosmos DB ou o Azure Service Bus.
Crie um arquivo nomeado
aks-store-quickstart.yamle copie no seguinte manifesto: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 --- 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 resources: requests: cpu: 1m memory: 1Mi limits: cpu: 1m memory: 7Mi --- 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 --- apiVersion: v1 kind: Service metadata: name: store-front spec: ports: - port: 80 targetPort: 8080 selector: app: store-front type: LoadBalancerImplante o aplicativo usando o
kubectl applycomando e especifique o nome do seu manifesto YAML.kubectl apply -f aks-store-quickstart.yaml
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.
Obtenha a URL do aplicativo usando os seguintes comandos:
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: $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
echo "http://$IP_ADDRESS"
Eliminar o cluster
Se não planeias seguir os tutoriais, limpa recursos desnecessários para evitar cobranças do Azure.
Remova o grupo de recursos, o serviço de contêiner e todos os recursos relacionados usando o az group delete comando.
az group delete --name $MY_RESOURCE_GROUP_NAME --yes --no-wait
Conteúdo relacionado
Para saber mais sobre ACL para AKS, veja O que é Azure Container Linux (ACL) para Azure Kubernetes Service (AKS)?