Início Rápido: Implantar um cluster do Host de Contêiner do Linux do Azure para AKS usando a CLI do Azure
Comece a usar o Host de Contêiner do Linux do Azure por meio da CLI do Azure a fim de implantar um cluster do Host de Contêiner do Linux do Azure para AKS. Depois de instalar os pré-requisitos, você criará um grupo de recursos, criará um cluster do AKS, estabelecerá uma conexão com esse cluster e executará um aplicativo de vários contêineres de exemplo nele.
Pré-requisitos
-
Caso você não tenha uma assinatura do Azure, crie uma conta gratuita do Azure antes de começar.
Use o ambiente Bash no Azure Cloud Shell. Para saber mais, confira Início rápido do Azure Cloud Shell – Bash.
Se preferir executar os comandos de referência da CLI localmente, instale a CLI do Azure. Para execuções 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 estiver usando uma instalação local, entre com a CLI do Azure usando o comando az login. Para concluir o processo de autenticação, siga as etapas exibidas no terminal. Para ver outras opções de entrada, confira Conectar-se com 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 extensões com a CLI do Azure.
Execute az version para localizar a versão e as bibliotecas dependentes que estão instaladas. Para fazer a atualização para a versão mais recente, execute az upgrade.
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, é necessário especificar um local. Essa localização é:
- A localização de armazenamento dos metadados do grupo de recursos.
- Esse será o local em que seus recursos serão executados no Azure caso você não especifique outra região durante a criação de recursos.
Para criar um grupo de recursos chamado testAzureLinuxResourceGroup na região eastus, siga esta etapa:
Crie um grupo de recursos usando o comando az group create
.
az group create --name testAzureLinuxResourceGroup --location eastus
A seguinte saída indica que o grupo de recursos foi criado com êxito:
{
"id": "/subscriptions/<guid>/resourceGroups/testAzureLinuxResourceGroup",
"location": "eastus",
"managedBy": null,
"name": "testAzureLinuxResourceGroup",
"properties": {
"provisioningState": "Succeeded"
},
"tags": null
}
Observação
O exemplo acima usa eastus, mas os clusters do Host de Contêiner do Linux do Azure estão disponíveis em todas as regiões.
Criar um cluster do Host de Contêiner do Linux do Azure
Crie um cluster do AKS usando o comando az aks create
com o parâmetro --os-sku
para provisioná-lo com uma imagem do Linux do Azure. O seguinte exemplo cria um cluster do Linux do Azure chamado testAzureLinuxCluster com um nó:
az aks create --name testAzureLinuxCluster --resource-group testAzureLinuxResourceGroup --os-sku AzureLinux
Após alguns minutos, o comando será concluído e retornará informações no formato JSON sobre o cluster.
Conectar-se ao cluster
Para gerenciar um cluster do Kubernetes, use o cliente de linha de comando do Kubernetes, kubectl.
- Configure o
kubectl
para se conectar ao cluster do Kubernetes usando o comandoaz aks get-credentials
.
az aks get-credentials --resource-group testAzureLinuxResourceGroup --name testAzureLinuxCluster
- Verifique a conexão com o cluster usando o comando kubectl get. O comando retorna uma lista de pods.
kubectl get pods --all-namespaces
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, por exemplo, as imagens de contêiner a serem executadas. O manifesto inclui as seguintes implantações e serviços do Kubernetes:
- Frente de loja: Aplicativo Web para clientes visualizarem produtos e fazerem pedidos.
- Serviço do produto: Mostra informações do produto.
- Serviço de pedido: Realiza pedidos.
- Rabbit MQ: Fila de mensagens de uma fila de pedidos.
Observação
Não é recomendável executar contêineres com estado, como o Rabbit MQ, sem armazenamento persistente para produção. Esses são usados aqui para simplificar, mas recomendamos o uso de serviços gerenciados, como o Azure Cosmos DB ou o Barramento de Serviço do Azure.
Crie um arquivo chamado
aks-store-quickstart.yaml
e copie-o para o manifesto a seguir:apiVersion: apps/v1 kind: Deployment metadata: name: rabbitmq spec: 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 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 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: LoadBalancer
Se você criar e salvar o arquivo YAML localmente, poderá carregar o arquivo de manifesto no diretório padrão no CloudShell selecionando o botão Carregar/Baixar arquivos e selecionando o arquivo no sistema de arquivos local.
Implante o aplicativo usando o comando
kubectl apply
e especifique o nome do manifesto YAML.kubectl apply -f aks-store-quickstart.yaml
Testar o aplicativo
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
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
curl $IP_ADDRESS
Resultados:
<!doctype html>
<html lang="">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="icon" href="/favicon.ico">
<title>store-front</title>
<script defer="defer" src="/js/chunk-vendors.df69ae47.js"></script>
<script defer="defer" src="/js/app.7e8cfbb2.js"></script>
<link href="/css/app.a5dc49f6.css" rel="stylesheet">
</head>
<body>
<div id="app"></div>
</body>
</html>
echo "You can now visit your web server at $IP_ADDRESS"
Excluir o cluster
Se você não pretende continuar com os tutoriais a seguir, evite encargos do Azure limpando todos os recursos desnecessários. Para remover o grupo de recursos e todos os recursos associados, use o comando az group delete
.
az group delete --name testAzureLinuxCluster --yes --no-wait
Próximas etapas
Neste início rápido, você implantou um cluster do Host de Contêiner do Linux do Azure. Para saber mais sobre o Host de Contêiner do Linux do Azure e conferir um exemplo completo de implantação e gerenciamento de cluster, prossiga para o tutorial do Host de Contêiner do Linux do Azure.