Tutorial: Bereitstellen einer Linux-App unter Azure Kubernetes Service in Azure Stack HCI und Windows Server
Gilt für: AKS in Azure Stack HCI und Windows Server
In diesem Tutorial erfahren Sie, wie Sie eine Anwendung mit mehreren Containern bereitstellen, die ein Web-Front-End und eine Redis-Datenbankinstanz in Ihrem AKS in Azure Stack HCI- und Windows Server-Cluster enthält. Sie erfahren auch, wie Sie Ihre Anwendung testen und skalieren.
In diesem Tutorial werden grundlegende Kenntnisse von Kubernetes-Konzepten vorausgesetzt. Weitere Informationen finden Sie unter Grundlegende Kubernetes-Konzepte für Azure Kubernetes Service in Azure Stack HCI.
Voraussetzungen
Vergewissern Sie sich, dass die folgenden Anforderungen erfüllt sind:
- Ein Cluster von Azure Kubernetes Service (AKS) in Azure Stack HCI und Windows Server mit mindestens einem Linux-Workerknoten, der aktiv ist und ausgeführt wird.
- Eine kubeconfig-Datei für den Zugriff auf den Cluster.
- Das Azure Kubernetes Service in Azure Stack HCI PowerShell-Modul ist installiert.
- Führen Sie die Befehle in diesem Dokument in einem PowerShell-Fenster mit Administratorrechten aus.
- Stellen Sie sicher, dass die betriebssystemspezifischen Workloads auf dem entsprechenden Containerhost verarbeitet werden. Wenn Sie einen Kubernetes-Cluster mit gemischten Linux- und Windows-Workerknoten haben, können Sie entweder Knotenselektoren oder Taints und Toleranzen verwenden. Weitere Informationen finden Sie unter Verwenden von Knotenselektoren und Taints und Toleranzen.
Hinweis
Bei der Bereitstellung eines Zielclusters, der ein Netzwerk mit einem anderen Zielcluster teilt, besteht die Möglichkeit eines IP-Adresskonflikts für den Lastenausgleich.
Dies kann passieren, wenn Sie zwei Arbeitsauslastungen, die unterschiedliche Anschlüsse in Zielclustern verwenden, die dasselbe AksHciClusterNetwork
Objekt nutzen. Aufgrund der Art und Weise, wie die IP-Adressen und Anschlusszuordnungen innerhalb von HA Proxy zugewiesen werden, kann dies zu einer doppelten IP-Adresszuweisung führen. In diesem Fall treten bei einem oder beiden Arbeitsauslastungen zufällige Probleme mit der Netzwerkkonnektivität auf, bis Sie Ihre Arbeitsauslastung erneut bereitstellen. Wenn Sie Ihre Workloads erneut bereitstellen, können Sie denselben Port verwenden, was dazu führt, dass jeder Workload eine separate Dienst-IP-Adresse empfängt. Alternativ können Sie Ihre Workloads auf Zielclustern, die unterschiedliche AksHciClusterNetwork
-Objekte verwenden, erneut bereitstellen.
Bereitstellen der App
Eine Kubernetes-Manifestdatei definiert einen gewünschten Zustand (Desired State) für den Cluster – also beispielsweise, welche Containerimages ausgeführt werden sollen. In dieser Schnellstartanleitung wird ein Manifest verwendet, um alle Objekte zu erstellen, die zum Ausführen der Azure Vote-Anwendung benötigt werden. Dieses Manifest umfasst zwei Kubernetes-Bereitstellungen: eine für die Azure Vote-Python-Beispielanwendungen und eine für eine Redis-Instanz. Außerdem werden zwei Kubernetes-Dienste erstellt: ein interner Dienst für die Redis-Instanz und ein externer Dienst, über den aus dem Internet auf die Azure Vote-Anwendung zugegriffen wird.
Erstellen Sie eine Datei namens azure-vote.yaml
, und fügen Sie die folgende YAML-Definition ein.
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: mcr.microsoft.com/azuredocs/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
Stellen Sie die Anwendung über den Befehl kubectl apply
bereit, und geben Sie den Namen Ihres YAML-Manifests an:
kubectl apply -f azure-vote.yaml
In der folgenden Beispielausgabe sind die erfolgreich erstellten Bereitstellungen und Dienste aufgeführt:
deployment "azure-vote-back" created
service "azure-vote-back" created
deployment "azure-vote-front" created
service "azure-vote-front" created
Testen der App
Wenn die Anwendung ausgeführt wird, macht ein Kubernetes-Dienst das Anwendungs-Front-End im Internet verfügbar. Dieser Vorgang kann einige Minuten dauern.
Verwenden Sie zum Überwachen des Fortschritts den Befehl kubectl get service
mit dem Argument --watch
.
kubectl get service azure-vote-front --watch
Die externe IP-Adresse (EXTERNAL-IP) für den Dienst azure-vote-front wird zunächst als ausstehend angezeigt.
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
azure-vote-front LoadBalancer 10.0.37.27 <pending> 80:30572/TCP 22m
Sobald die externe IP-Adresse (EXTERNAL-IP) von pending (ausstehend) in eine tatsächliche öffentliche IP-Adresse geändert wurde, verwenden Sie CTRL-C
, um die kubectl
-Überwachung zu beenden. Die folgende Beispielausgabe zeigt eine gültige öffentliche IP-Adresse, die dem Dienst zugewiesen ist:
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
Öffnen Sie die externe IP-Adresse Ihres Diensts in einem Webbrowser, um die Azure-Abstimmungs-App in Aktion zu sehen.
Skalieren von Anwendungspods
Wir haben ein einzelnes Replikat des Azure Vote-Front-Ends und der Redis-Instanz erstellt. Um die Anzahl und den Zustand von Pods in Ihrem Cluster anzuzeigen, verwenden Sie den Befehl kubectl get
:
kubectl get pods -n default
Die folgende Beispielausgabe zeigt einen Front-End-Pod und einen Back-End-Pod:
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
Um die Anzahl von Pods in der azure-vote-front-Bereitstellung zu ändern, verwenden Sie den Befehl kubectl scale
. Im folgenden Beispiel wird die Anzahl von Front-End-Pods auf 5 erhöht:
kubectl scale --replicas=5 deployment/azure-vote-front
Führen Sie kubectl get pods
erneut aus, um zu überprüfen, ob zusätzliche Pods erstellt wurden. Nach ca. einer Minute sind die zusätzlichen Pods in Ihrem Cluster verfügbar:
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