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.
Neste guia de início rápido, você aprende a:
- Crie um Azure linux com o cluster AKS do OS Guard (versão prévia) usando o CLI do Azure.
- Conecte-se ao cluster usando kubectl.
- Execute um aplicativo de vários contêineres de exemplo no cluster.
Note
Azure Linux com o SO Guard (versão prévia) está sendo substituído por Azure ACL (Container Linux).
Azure Container Linux é o sistema operacional (SO) Linux de longo prazo, imutável e otimizado para contêineres do AKS (Serviço de Kubernetes do Azure). Ele fornece um sistema operacional de host seguro, mínimo e operacionalmente consistente projetado para executar cargas de trabalho em contêineres em escala.
Para obter mais informações, consulte a visão geral Azure ACL (Container Linux).
Pré-requisitos
-
Se você ainda não tiver uma conta do Azure, crie uma conta gratuita antes de começar.
Use o ambiente bash em Azure Cloud Shell. Para saber mais, confira Início rápido do Azure Cloud Shell – Bash.
Se você preferir executar comandos de referência da CLI localmente, instale o 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 no CLI do Azure usando o comando
az login. Para concluir o processo de autenticação, siga as etapas exibidas em seu 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 versionpara localizar a versão e as bibliotecas dependentes que estão instaladas. Para atualizar para a versão mais recente, executeaz upgrade.
- Se você estiver usando uma instalação local, entre no CLI do Azure usando o comando
Azure Linux com considerações e limitações sobre o OS Guard
Antes de começar, examine as seguintes considerações e limitações para o Azure Linux com o OS Guard (versão prévia):
- O Kubernetes versão 1.32.0 ou superior é necessário para o Linux do Azure com o SO Guard.
- Todas as imagens do Azure Linux com OS Guard têm Federal Information Process Standard (FIPS) e Trusted Launch habilitados.
- Os modelos da CLI do Azure e do ARM são os únicos métodos de implantação com suporte para o Azure Linux com o OS Guard no AKS na versão prévia. Não há suporte para o PowerShell e o Terraform.
- Imagens do Arm64 não são compatíveis com Azure Linux com OS Guard no AKS na versão de pré-lançamento.
-
NodeImageeNonesão os únicos canais de atualização do sistema operacional (SO) com suporte para o Azure Linux com OS Guard no AKS.UnmanagedeSecurityPatchsão incompatíveis com o Azure Linux com o OS Guard devido ao diretório /usr imutável. - O suporte para Streaming de Artefatos não está disponível.
- Não há suporte para o Pod Sandboxing.
- Não há suporte para CVMs (Máquinas Virtuais Confidenciais).
- Não há suporte para VMs (máquinas virtuais) de geração 1.
Instalar a extensão aks-preview CLI do Azure
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-preview usando o comando az extension add.
az extension add --name aks-preview
Atualize a aks-preview extensão para a versão mais recente usando o az extension update comando.
az extension update --name aks-preview
Registrar o sinalizador de recurso AzureLinuxOSGuardPreview
Registre o sinalizador de recurso
AzureLinuxOSGuardPreviewusando o comandoaz feature register.az feature register --namespace "Microsoft.ContainerService" --name "AzureLinuxOSGuardPreview"Demora alguns minutos para o status mostrar Registrado.
Verifique o status do registro usando o comando
az feature show.az feature show --namespace "Microsoft.ContainerService" --name "AzureLinuxOSGuardPreview"Quando 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 variáveis de ambiente a seguir para criar nomes de recursos exclusivos para cada implantação. Substitua <your-resource-group-name>, <your-region> e <your-cluster-name> por valores próprios. Opcionalmente, você pode usar o openssl rand -hex 3 comando para gerar uma cadeia de caracteres aleatória para acrescentar ao seu grupo de recursos e nomes de cluster (por exemplo, export RESOURCE_GROUP="myResourceGroup$RANDOM_ID").
# Create random string
export RANDOM_ID="$(openssl rand -hex 3)"
# Set environment variables
export RESOURCE_GROUP="<your-resource-group-name>"
export REGION="<your-region>"
export CLUSTER_NAME="<your-cluster-name>"
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 no Azure, você precisará especificar um local. Esse local é o local de armazenamento dos metadados do grupo de recursos e onde seus recursos são executados em Azure se você não especificar outra região ao criar um recurso.
Crie um grupo de recursos usando o comando az group create.
az group create --name $RESOURCE_GROUP --location $REGION
Exemplo de saída:
{
"id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/$RESOURCE_GROUPxxxxxx",
"location": "$REGION",
"managedBy": null,
"name": "$RESOURCE_GROUPxxxxxx",
"properties": {
"provisioningState": "Succeeded"
},
"tags": null,
"type": "Microsoft.Resources/resourceGroups"
}
Criar um Linux do Azure com o cluster do OS Guard
Crie um cluster do AKS usando o az aks create comando com o --os-sku parâmetro para provisionar o cluster do AKS com uma imagem do Azure Linux com o SISTEMA Operacional Guard.
az aks create --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --os-sku AzureLinuxOSGuard --node-osdisk-type Managed --enable-fips-image --enable-secure-boot --enable-vtpm
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 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 $RESOURCE_GROUP --name $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
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 executar. 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 para uma fila de pedidos.
Note
Não é recomendável executar contêineres com estado, como o Rabbit MQ, sem armazenamento persistente para produção. Elas são usadas aqui para simplificar, mas recomendamos o uso de serviços gerenciados, como Azure Cosmos DB ou Barramento de Serviço do Azure.
Crie um arquivo chamado
aks-store-quickstart.yamle copie-o para o 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: LoadBalancerSe 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 applye 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 não precisar mais deles, você pode limpar recursos desnecessários para evitar cobranças do Azure.
Exclua o grupo de recursos Azure e todos os recursos relacionados usando o comando az group delete.
az group delete --name $RESOURCE_GROUP --yes --no-wait
Conteúdo relacionado
Neste início rápido, você implantou um Linux do Azure com o cluster do OS Guard. Para saber mais sobre Azure Linux com o OS Guard, confira os seguintes recursos: