Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Iniziare a usare Azure Container Linux (ACL) per il servizio Azure Kubernetes distribuendo un cluster del servizio Azure Kubernetes usando il interfaccia della riga di comando di Azure.
In questa guida introduttiva si apprenderà come:
- Creare un cluster del servizio Azure Kubernetes usando ACL per il servizio Azure Kubernetes.
- Distribuire il cluster usando interfaccia della riga di comando di Azure.
- Lanciare un'applicazione multi-contenitore di esempio con un gruppo di microservizi e interfacce web che simulano uno scenario di vendita al dettaglio.
Annotazioni
Questo articolo include i passaggi per distribuire un cluster con impostazioni predefinite solo a scopo di valutazione. Prima di distribuire un cluster pronto per la produzione, è consigliabile acquisire familiarità con l'architettura di riferimento di base per valutare il modo in cui si allinea ai requisiti aziendali.
Importante
Se si utilizza Azure Container Linux (ACL) in AKS, assicurarsi di consultare le seguenti considerazioni e limitazioni:
- ACL è generalmente disponibile a partire da AKS v1.34.
- ACL richiede Trusted Launch con Secure Boot e il vTPM. Le varianti Non-Trusted Launch non sono disponibili.
- ACL su Arm64 richiede SKU basati su Cobalt (v6) per abilitare la compatibilità con Trusted Launch.
-
NodeImageeNonesono gli unici canali di aggiornamento del sistema operativo supportati.UnmanagedeSecurityPatchsono incompatibili con ACL a causa della directory/usrnon modificabile. - Artifact Streaming non è supportato.
- Il sandboxing dei pod non è supportato.
- Le macchine virtuali riservate non sono supportate.
- Le macchine virtuali di seconda generazione non sono supportate.
Prerequisiti
Questa guida introduttiva presuppone una comprensione di base dei concetti relativi a Kubernetes. Per altre informazioni, vedere Concetti di base relativi a Kubernetes per il servizio Azure Kubernetes.
Se non si ha un account Azure, creare un account gratuito prima di iniziare.
È possibile utilizzare l'ambiente Bash in Azure Cloud Shell. Per altre informazioni, vedere Introduzione a Azure Cloud Shell.
Se preferisci eseguire localmente i comandi di riferimento della CLI, installa interfaccia della riga di comando di Azure. Se si esegue in Windows o macOS, è consigliabile eseguire interfaccia della riga di comando di Azure in un contenitore Docker. Per altre informazioni, vedere Come eseguire il interfaccia della riga di comando di Azure in un contenitore Docker.
- Se si usa un'installazione locale, accedere al interfaccia della riga di comando di Azure usando il comando
az login. Per completare il processo di autenticazione, seguire la procedura visualizzata nel terminale. Per altre opzioni di accesso, vedere Eseguire l'autenticazione ad Azure con l'interfaccia della riga di comando di Azure. - Quando ti viene richiesto, installa l'estensione interfaccia della riga di comando di Azure al primo utilizzo. Per altre informazioni sulle estensioni, vedere Usare e gestire le estensioni con interfaccia della riga di comando di Azure.
- È necessario interfaccia della riga di comando di Azure versione 2.86.0 o successiva. Eseguire
az versionper trovare la versione e le librerie dipendenti installate. Per eseguire l'aggiornamento alla versione più recente, eseguireaz upgrade.
- Se si usa un'installazione locale, accedere al interfaccia della riga di comando di Azure usando il comando
Assicurarsi che l'identità usata per creare il cluster disponga delle autorizzazioni minime adeguate. Per altre informazioni sull'accesso e l'identità per il servizio Azure Kubernetes, vedere Opzioni di accesso e identità per il servizio Azure Kubernetes.
Se sono presenti più sottoscrizioni Azure, selezionare l'ID sottoscrizione appropriato in cui le risorse devono essere fatturate usando il comando
az account set. Per altre informazioni, vedere Come gestire le sottoscrizioni di Azure - Interfaccia della riga di comando di Azure.A seconda della sottoscrizione di Azure, potrebbe essere necessario richiedere un aumento della quota di vCPU. Per altre informazioni, vedere Aumentare le quote vCPU della famiglia di macchine virtuali.
Registrare i provider di risorse necessari
Potrebbe essere necessario registrare i provider di risorse necessari, ad esempio Microsoft.ContainerService nella sottoscrizione Azure.
Controllare lo stato della registrazione
Controllare lo stato della registrazione usando il az provider show comando .
az provider show --namespace Microsoft.ContainerService --query registrationState
Registrare il provider di risorse
Se necessario, registrare il provider di risorse Microsoft.ContainerService usando il comando az provider register.
az provider register --namespace Microsoft.ContainerService
Definire le variabili di ambiente
Definire le seguenti variabili di ambiente per l'utilizzo in questa introduzione rapida. Se si preferisce, è possibile sostituire i valori con i propri nomi personalizzati.
export RESOURCE_GROUP="myAKSResourceGroup"
export REGION="westus"
export CLUSTER_NAME="myAKSCluster"
Creare un gruppo di risorse
Un gruppo di risorse di Azure è un gruppo logico in cui le risorse di Azure vengono distribuite e gestite. Quando si crea un gruppo di risorse, viene richiesto di specificare una posizione. Questa posizione è la posizione di archiviazione dei metadati del gruppo di risorse e dove le risorse vengono eseguite in Azure se non si specifica un'altra regione durante la creazione della risorsa.
Creare un gruppo di risorse usando il comando az group create.
az group create \
--name $RESOURCE_GROUP \
--location $REGION
Output di esempio:
{
"id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/myAKSResourceGroup",
"location": "westus",
"managedBy": null,
"name": "myAKSResourceGroup",
"properties": {
"provisioningState": "Succeeded"
},
"tags": null,
"type": "Microsoft.Resources/resourceGroups"
}
Crea un cluster AKS
Creare un cluster AKS usando il comando az aks create. Il parametro --os-sku AzureContainerLinux configura il pool di nodi di sistema per usare ACL come sistema operativo dei nodi. L'esempio seguente crea un cluster con un nodo e abilita un'identità gestita assegnata dal sistema:
az aks create \
--resource-group $RESOURCE_GROUP \
--name $CLUSTER_NAME \
--os-sku AzureContainerLinux \
--node-count 1 \
--generate-ssh-keys
Annotazioni
Quando si crea un nuovo cluster, il servizio Azure Kubernetes crea automaticamente un secondo gruppo di risorse per archiviare le risorse del servizio Azure Kubernetes. Per ulteriori informazioni, vedere Perché vengono creati due gruppi di risorse con AKS?
Connettersi al cluster
Per gestire un cluster Kubernetes, usare il client da riga di comando kubernetes kubectl.
kubectl è già installato se si usa Azure Cloud Shell. Per installare kubectl in locale, usare il comando az aks install-cli.
Configurare
kubectlper connettersi al cluster Kubernetes usando il comandoaz aks get-credentials. Questo comando scarica le credenziali e configura l'interfaccia della riga di comando di Kubernetes per usarle.az aks get-credentials \ --resource-group $RESOURCE_GROUP \ --name $CLUSTER_NAMEVerificare la connessione al cluster usando il comando
kubectl get. Questo comando restituisce un elenco dei nodi del cluster.kubectl get nodes
Distribuire l'applicazione
Per distribuire l'applicazione, utilizzare un file manifesto per creare tutti gli oggetti necessari per eseguire l'applicazione AKS Store. Un file manifesto Kubernetes definisce lo stato desiderato di un cluster, ad esempio le immagini del contenitore da eseguire. Il manifesto include le distribuzioni e i servizi Kubernetes seguenti:
- Store front: applicazione web che permette ai clienti di visualizzare i prodotti ed effettuare ordini.
- Servizio prodotto: mostra le informazioni sul prodotto.
- Servizio ordini: effettua ordini.
-
RabbitMQ: coda di messaggi per una coda di ordini.
Annotazioni
Non è consigliabile eseguire contenitori con stato, ad esempio RabbitMQ, senza spazio di archiviazione permanente per la produzione. Viene usato qui per semplicità, ma è consigliabile usare servizi gestiti, ad esempio Azure Cosmos DB o il bus di servizio di Azure.
Creare un file denominato aks-store-quickstart.yaml e copiarlo nel manifesto seguente:
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: LoadBalancerPer un dettaglio dei file manifesto YAML, vedere Distribuzioni e manifesti YAML.
Se si crea e si salva il file YAML in locale, è possibile caricare il file manifesto nella directory predefinita in Cloud Shell selezionando il pulsante Carica/Scarica file e selezionando il file dal file system locale.
Distribuire l'applicazione usando il comando
kubectl applye specificare il nome del manifesto YAML.kubectl apply -f aks-store-quickstart.yamlL'output di esempio seguente mostra le distribuzioni e i servizi:
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
Testare l'applicazione
Quando l'applicazione viene eseguita, un servizio Kubernetes espone il front-end dell'applicazione a Internet. Questo processo può richiedere alcuni minuti.
Controllare lo stato dei pod distribuiti usando il comando
kubectl get pods. Fare in modo che tutti i pod sianoRunningprima di procedere.kubectl get podsVerificare la presenza di un indirizzo IP pubblico per l'applicazione
store-front. Monitorare lo stato di avanzamento usando il comandokubectl get servicecon l'argomento--watch.kubectl get service store-front --watchL'output EXTERNAL-IP per il servizio
store-frontinizialmente viene visualizzato come in sospeso:NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE store-front LoadBalancer 10.0.100.10 <pending> 80:30025/TCP 4h4mQuando l'indirizzo EXTERNAL-IP passa da in sospeso a un effettivo indirizzo IP pubblico, usare
CTRL-Cper arrestare il processo di controllokubectl.L'output di esempio seguente mostra un indirizzo IP pubblico valido assegnato al servizio:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE store-front LoadBalancer 10.0.100.10 20.62.159.19 80:30025/TCP 4h5mAprire un browser web all'indirizzo IP esterno del servizio per visualizzare l'applicazione di Azure Store in azione.
Eliminare il cluster
Se non si prevede di eseguire il tutorial AKS, pulire le risorse non necessarie per evitare addebiti per la fatturazione di Azure.
Rimuovere il gruppo di risorse, il servizio contenitore e tutte le risorse correlate usando il comando az group delete.
az group delete --name $RESOURCE_GROUP
Il cluster AKS è stato creato con un'identità gestita assegnata dal sistema, che rappresenta l'opzione predefinita per l'identità utilizzata in questa guida rapida. Questa identità è gestita dalla piattaforma, pertanto non è necessario rimuoverla manualmente.
Contenuti correlati
In questa guida introduttiva è stato distribuito un cluster AKS con ACL per AKS tramite interfaccia della riga di comando di Azure. Per altre informazioni sull'ACL per il servizio Azure Kubernetes, vedere Azure Container Linux (ACL) per Servizio Azure Kubernetes (AKS).