Distribuire un'app Linux
Si applica a: Servizio Azure Kubernetes in Azure Stack HCI 22H2, servizio Azure Kubernetes in Windows Server
Questa guida descrive come distribuire un'app multi-contenitore che include un front-end Web e un'istanza di database Redis nel cluster Kubernetes nel servizio Azure Kubernetes abilitato da Azure Arc. Si apprenderà anche come testare e ridimensionare l'app.
Questa guida pratica presuppone una conoscenza di base dei concetti di Kubernetes. Per altre informazioni, vedere Concetti di base di Kubernetes.
Operazioni preliminari
Verificare di disporre dei prerequisiti seguenti:
- Un cluster del servizio Azure Kubernetes con almeno un nodo di lavoro Linux in esecuzione.
- Un file kubeconfig per accedere al cluster.
- Viene installato il modulo Azure KubernetesHci di PowerShell. Per altre informazioni, vedere Install-AksHci.
Quando si eseguono le procedure:
- Eseguire i comandi in una finestra di PowerShell aperta con privilegi amministrativi.
- Assicurarsi che i carichi di lavoro specifici del sistema operativo si adattino all'host contenitore appropriato. Se il cluster Kubernetes ha una combinazione di nodi di lavoro Linux e Windows, è possibile usare selettori di nodo o taints e tolleranze. Per altre informazioni, vedere Uso di selettori di nodo e taints e tolleranze.
Nota
La distribuzione di un cluster di destinazione che condivide una rete con un altro cluster di destinazione può causare conflitti di indirizzi IP del servizio di bilanciamento del carico.
I conflitti di indirizzi IP possono verificarsi se si distribuiscono due carichi di lavoro che usano porte diverse nei cluster di destinazione che condividono lo stesso AksHciClusterNetwork
oggetto. A causa del modo in cui gli indirizzi IP e i mapping delle porte vengono allocati all'interno del proxy a disponibilità elevata, può causare l'assegnazione di indirizzi IP duplicati. In questo caso, uno o entrambi i carichi di lavoro possono riscontrare problemi di connettività di rete casuali fino a quando non si distribuiscono nuovamente i carichi di lavoro. Quando si distribuiscono nuovamente i carichi di lavoro, è possibile usare la stessa porta, che assegna un indirizzo IP del servizio a ogni carico di lavoro oppure è possibile ridribuire i carichi di lavoro nei cluster di destinazione che usano oggetti diversi AksHciClusterNetwork
.
Distribuire l'app
Un file manifesto Kubernetes definisce uno stato desiderato per il cluster, ad esempio le immagini del contenitore da eseguire. Questa esercitazione usa un manifesto per creare tutti gli oggetti necessari per eseguire l'app Di voto di Azure. Questo manifesto include due distribuzioni kubernetes: una per le app Python di azure Vote di esempio e l'altra per un'istanza di Redis. Vengono creati anche due servizi Kubernetes: un servizio interno per l'istanza di Redis e un servizio esterno per accedere all'app Azure Vote da Internet.
Creare un file denominato azure-vote.yaml e copiare/incollare la definizione YAML seguente:
apiVersion: apps/v1
kind: Deployment
metadata:
name: azure-vote-back
spec:
replicas: 1
selector:
matchLabels:
app: azure-vote-back
template:
metadata:
labels:
app: azure-vote-back
spec:
nodeSelector:
"beta.kubernetes.io/os": linux
containers:
- name: azure-vote-back
image: redis
resources:
requests:
cpu: 100m
memory: 128Mi
limits:
cpu: 250m
memory: 256Mi
ports:
- containerPort: 6379
name: redis
---
apiVersion: v1
kind: Service
metadata:
name: azure-vote-back
spec:
ports:
- port: 6379
selector:
app: azure-vote-back
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: azure-vote-front
spec:
replicas: 1
selector:
matchLabels:
app: azure-vote-front
template:
metadata:
labels:
app: azure-vote-front
spec:
nodeSelector:
"beta.kubernetes.io/os": linux
containers:
- name: azure-vote-front
image: <path to image>/azure-vote-front:v1
resources:
requests:
cpu: 100m
memory: 128Mi
limits:
cpu: 250m
memory: 256Mi
ports:
- containerPort: 80
env:
- name: REDIS
value: "azure-vote-back"
---
apiVersion: v1
kind: Service
metadata:
name: azure-vote-front
spec:
type: LoadBalancer
ports:
- port: 80
selector:
app: azure-vote-front
Distribuire l'app usando il kubectl apply
comando e specificare il nome del manifesto YAML:
kubectl apply -f azure-vote.yaml
L'output di esempio seguente mostra le distribuzioni e i servizi creati correttamente:
deployment "azure-vote-back" created
service "azure-vote-back" created
deployment "azure-vote-front" created
service "azure-vote-front" created
Testare l'app
Quando l'app viene eseguita, un servizio Kubernetes espone il front-end dell'app a Internet. Questo processo può richiedere alcuni minuti.
Per monitorare lo stato di avanzamento, usare il kubectl get service
comando con l'argomento --watch
:
kubectl get service azure-vote-front --watch
Inizialmente, external-IP per il servizio azure-vote-front viene visualizzato come in sospeso:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
azure-vote-front LoadBalancer 10.0.37.27 <pending> 80:30572/TCP 22m
Quando l'indirizzo EXTERNAL-IP passa dall'indirizzo IP in sospeso a un indirizzo IP pubblico effettivo, usare CTRL-C per arrestare il processo di kubectl
controllo. L'output di esempio seguente mostra un indirizzo IP pubblico valido assegnato al servizio:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
azure-vote-front LoadBalancer 10.0.37.27 52.179.23.131 80:30572/TCP 24m
Per visualizzare l'app Azure Vote in azione, aprire un browser Web all'indirizzo IP esterno del servizio.
Ridimensionare i pod dell'applicazione
È stata creata una singola replica dell'istanza front-end di Azure Voting App e Redis. Per visualizzare il numero e lo stato dei pod nel cluster, usare il kubectl get
comando :
kubectl get pods -n default
L'output di esempio seguente illustra un pod front-end e un pod back-end:
NAME READY STATUS RESTARTS AGE
azure-vote-back-6bdcb87f89-g2pqg 1/1 Running 0 25m
azure-vote-front-84c8bf64fc-cdq86 1/1 Running 0 25m
Per modificare il numero di pod nella distribuzione azure-vote-front , usare il kubectl scale
comando . L'esempio seguente aumenta il numero di pod front-end a 5:
kubectl scale --replicas=5 deployment/azure-vote-front
Eseguire kubectl get pods
di nuovo per verificare che siano stati creati pod aggiuntivi. Dopo circa un minuto i pod aggiuntivi sono disponibili nel cluster:
kubectl get pods -n default
Name READY STATUS RESTARTS AGE
azure-vote-back-6bdcb87f89-g2pqg 1/1 Running 0 31m
azure-vote-front-84c8bf64fc-cdq86 1/1 Running 0 31m
azure-vote-front-84c8bf64fc-56h64 1/1 Running 0 80s
azure-vote-front-84c8bf64fc-djkp8 1/1 Running 0 80s
azure-vote-front-84c8bf64fc-jmmvs 1/1 Running 0 80s
azure-vote-front-84c8bf64fc-znc6z 1/1 Running 0 80s
Passaggi successivi
Usare Monitoraggio di Azure per monitorare il cluster e l'applicazione