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.
Introduzione all'host contenitore Linux di Azure con Azure PowerShell per distribuire un host contenitore Linux di Azure per un cluster del servizio Azure Kubernetes. Dopo aver installato i prerequisiti, creare un gruppo di risorse, creare un cluster del servizio Azure Kubernetes, connettersi al cluster ed eseguire un'applicazione multi-contenitore di esempio nel cluster.
Importante
A partire dal 30 novembre 2025, il servizio Azure Kubernetes non supporta più o fornisce aggiornamenti della sicurezza per Azure Linux 2.0. L'immagine del nodo Linux 2.0 di Azure è bloccata alla versione 202512.06.0. A partire dal 31 marzo 2026, le immagini dei nodi verranno rimosse e non sarà possibile ridimensionare i pool di nodi. Eseguire la migrazione a una versione di Linux di Azure supportata aggiornando i pool di nodi a una versione di Kubernetes supportata o eseguendo la migrazione ad osSku AzureLinux3. Per ulteriori informazioni, vedere Ritiro del supporto: pool di nodi Azure Linux 2.0 su AKS.
Prerequisiti
- Se non si ha un account Azure, creare un account gratuito prima di iniziare.
- Usare l'ambiente di PowerShell in Azure Cloud Shell. Per altre informazioni, vedere Avvio rapido in Azure Cloud Shell.
- Se si esegue PowerShell in locale, installare il modulo
Az PowerShelle connettersi all'account Azure usando il cmdletConnect-AzAccount. Per altre informazioni sull'installazione del modulo Az PowerShell, vedere Installare Azure PowerShell. - L'identità usata per creare il cluster dispone delle autorizzazioni minime appropriate. Per maggiori informazioni sull'accesso e l'identità per il servizio Azure Kubernetes, vedere Opzioni di accesso e identità per il servizio Azure Kubernetes (AKS).
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, è necessario 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.
Nell'esempio seguente viene creato un gruppo di risorse denominato testAzureLinuxResourceGroup nell'area eastus.
Creare un gruppo di risorse usando il cmdlet
New-AzResourceGroup.New-AzResourceGroup -Name testAzureLinuxResourceGroup -Location eastusL'output di esempio seguente è simile alla corretta creazione del gruppo di risorse:
ResourceGroupName : testAzureLinuxResourceGroup Location : eastus ProvisioningState : Succeeded Tags : ResourceId : /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testAzureLinuxResourceGroupNote
L'esempio precedente usa eastus, ma i cluster Host contenitore Linux di Azure sono disponibili in tutte le aree.
Creare un cluster Host contenitore Linux di Azure
L'esempio seguente crea un cluster denominato testAzureLinuxCluster con un nodo.
Creare un cluster del servizio Azure Kubernetes usando il cmdlet
New-AzAksClustercon il flag-NodeOsSKUimpostato su AzureLinux.New-AzAksCluster -ResourceGroupName testAzureLinuxResourceGroup -Name testAzureLinuxCluster -NodeOsSKU AzureLinuxIl comando viene completato dopo pochi minuti e vengono restituite informazioni in formato JSON sul cluster.
Stabilire la connessione 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.
Eseguire l'installazione
kubectlin locale usando ilInstall-AzAksCliToolcmdlet.Install-AzAksCliToolConfigurare
kubectlper connettersi al cluster Kubernetes usando cmdletImport-AzAksCredential. Questo comando scarica le credenziali e configura l'interfaccia della riga di comando di Kubernetes per usarli.Import-AzAksCredential -ResourceGroupName testAzureLinuxResourceGroup -Name testAzureLinuxClusterVerificare la connessione al cluster usando il comando
kubectl get. Questo comando restituisce un elenco dei pod del cluster.kubectl get pods --all-namespaces
Distribuire l'applicazione
Per distribuire l'applicazione, usare un file manifesto per creare tutti gli oggetti necessari per eseguire l'applicazione di Archiviazione del servizio Azure Kubernetes. 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:
- Front-store: applicazione Web per i clienti per visualizzare i prodotti ed effettuare ordini.
- Servizio prodotto: mostra le informazioni sul prodotto.
- Servizio ordini: effettua ordini.
- Rabbit MQ: coda di messaggi per una coda di ordini.
Note
Non è consigliabile eseguire contenitori con stato, ad esempio Rabbit MQ, senza l'archiviazione permanente per la produzione. Questi vengono usati 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.yamle copiarlo nel manifesto seguente: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: LoadBalancerSe si crea e si salva il file YAML in locale, è possibile caricare il file manifesto nella directory predefinita in CloudShell facendo clic sul pulsante Carica/Scarica file e selezionando il file dal file system locale.
Distribuire l'applicazione usando il comando kubectl apply e 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
Test dell'applicazione
Durante l'esecuzione dell'applicazione, un servizio Kubernetes espone il front-end dell'applicazione a Internet. Il processo potrebbe richiedere alcuni minuti.
Controllare lo stato dei pod distribuiti usando il comando kubectl get pods. Fare in modo che tutti i pod siano
Runningprima di procedere.kubectl get podsVerificare la presenza di un indirizzo IP pubblico per l'applicazione front-store. Monitorare lo stato usando il comando kubectl get service con 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 continuare con le esercitazioni seguenti, rimuovere le risorse create per evitare di incorrere in addebiti per Azure.
Rimuovi il gruppo di risorse e tutte le risorse correlate usando il cmdlet
RemoveAzResourceGroup.Remove-AzResourceGroup -Name testAzureLinuxResourceGroup
Passaggi successivi
In questo avvio rapido è stato distribuito un cluster del servizio Azure Container Host del servizio Azure Container. Per altre informazioni sull'host contenitore Linux di Azure ed eseguire un esempio completo di distribuzione e gestione del cluster, continuare con l'esercitazione sull'host contenitore Linux di Azure.