Auf dieser Seite erfahren Sie, wie Sie eine zustandslose Windows Server-Anwendung bereitstellen. Außerdem erfahren Sie, wie Sie eine zustandsorientierte Windows-Anwendung bereitstellen.
Windows Server-Anwendung in einem Standardcluster bereitstellen
Die folgenden Aufgaben führen Sie durch den Bereitstellungsprozess Ihrer Windows Server-Anwendung:
- Erstellen Sie einen Cluster.
- Erstellen Sie eine Manifestdatei für das Deployment.
- Erstellen Sie das Deployment und geben Sie es frei.
- Stellen Sie fest, ob der Pod ausgeführt wird.
Cluster erstellen
Eine Anleitung dazu finden Sie unter Cluster mit Windows Server-Knotenpools erstellen.
Manifestdatei für das Deployment erstellen
Windows Server-Knoten sind mit dem folgenden Schlüssel/Wert-Paar markiert: node.kubernetes.io/os=windows:NoSchedule
.
Diese Markierung sorgt dafür, dass der GKE-Planer nicht versucht, Linux-Container auf Windows Server-Knoten auszuführen. Um Windows Server-Container auf Windows Server-Knoten zu planen, muss Ihre Manifestdatei diesen Knotenselektor enthalten:
nodeSelector:
kubernetes.io/os: windows
Ein im Cluster ausgeführter Zugangs-Webhook prüft neue Arbeitslasten auf das Vorhandensein dieses Windows-Knotenselektors. Sollte er vorliegen, wendet der Webhook die folgende Toleranz auf die Arbeitslast an, mit der sie auf den markierten Windows Server-Knoten ausgeführt werden kann:
tolerations:
- effect: NoSchedule
key: node.kubernetes.io/os
operator: Equal
value: windows
In einigen Fällen müssen Sie diese Toleranz explizit in Ihre Manifestdatei aufnehmen. Wenn Sie beispielsweise ein DaemonSet mit einem Container-Image für mehrere Architekturen bereitstellen, das auf allen Linux- und Windows Server-Knoten im Cluster ausgeführt werden soll, enthält die Manifestdatei keinen Windows-Knotenselektor. Sie müssen die Toleranz für die Windows-Markierung explizit einschließen.
Beispiel für eine Manifestdatei
Mit der folgenden Beispiel-Deployment-Datei (iis.yaml
) wird das IIS-Image von Microsoft in einem einzelnen Pod bereitgestellt:
apiVersion: apps/v1
kind: Deployment
metadata:
name: iis
labels:
app: iis
spec:
replicas: 1
selector:
matchLabels:
app: iis
template:
metadata:
labels:
app: iis
spec:
nodeSelector:
kubernetes.io/os: windows
containers:
- name: iis-server
image: mcr.microsoft.com/windows/servercore/iis
ports:
- containerPort: 80
Diese Datei ist für einen Cluster vorgesehen, in dem alle Arbeitslasten denselben Windows Server-Knoten-Image-Typ und dieselbe Version verwenden. Weitere Informationen zum Arbeiten mit Images mit gemischten Knoten finden Sie im Abschnitt Images mit gemischten Knoten verwenden.
Deployment erstellen und freigeben
Erstellen Sie aus der Deployment-Datei, die Sie im vorherigen Schritt erstellt haben, einen Kubernetes-Dienst mit einem externen Load-Balancer-Deployment und geben Sie diesen frei,
Führen Sie den folgenden Befehl aus, um das Deployment zu erstellen:
kubectl apply -f iis.yaml
Führen Sie den folgenden Befehl aus, um das Deployment freizugeben:
kubectl expose deployment iis \ --type=LoadBalancer \ --name=iis
Prüfen, ob der Pod ausgeführt wird
Prüfen Sie, ob der Pod richtig funktioniert, indem Sie ihn validieren.
Prüfen Sie den Status des Pods mit
kubectl
.kubectl get pods
Warten Sie, bis der Status des Pods in der zurückgegebenen Ausgabe als
Running
angegeben wird.NAME READY STATUS RESTARTS AGE iis-5c997657fb-w95dl 1/1 Running 0 28s
Rufen Sie den Status des Dienstes ab und warten Sie, bis das externe IP-Feld ausgefüllt ist.
kubectl get service iis
Es sollte folgende Ausgabe angezeigt werden:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE iis LoadBalancer 10.44.2.112 external-ip 80:32233/TCP 17s
Jetzt können Sie in Ihrem Browser http://external-ip aufrufen, um die IIS-Webseite aufzurufen.
Windows Server-Anwendung in einem privaten Cluster bereitstellen
In diesem Abschnitt erfahren Sie, wie Sie eine Windows Server-Containeranwendung in einem privaten Cluster bereitstellen.
Windows Server-Container-Images bestehen aus mehreren Ebenen, wobei die Basisebenen von Microsoft stammen. Die Basisebenen werden als fremde Ebene gespeichert und nicht wie Linux-Docker-Image-Ebenen in das Image eingebettet. Wenn ein Windows Server-Container-Image zum ersten Mal abgerufen wird, müssen die Basisebenen in der Regel von Microsoft-Servern heruntergeladen werden. Da private Clusterknoten nicht mit dem Internet verbunden sind, können die Windows Server-Basiscontainerebenen nicht direkt von Microsoft-Servern abgerufen werden.
Wenn Sie private Cluster verwenden möchten, können Sie den Docker-Daemon so konfigurieren, dass es zulässig ist, nicht verteilbare Ebenen in private Registries zu übertragen. Weitere Informationen finden Sie auf der GitHub-Seite für Docker unter den Hinweisen zu Registries mit "Luftspalt".
So stellen Sie Ihre Windows Server-Anwendung in einem privaten Cluster bereit:
- Erstellen Sie einen privaten Cluster mit Windows Server-Knoten.
- Erstellen Sie das Docker-Image der Windows Server-Anwendung.
- Stellen Sie die Anwendung in einem privaten Cluster bereit.
- Prüfen Sie, ob der Pod ausgeführt wird.
Privaten Cluster erstellen
Folgen Sie den Anleitungen unter Cluster mit Windows Server-Knoten erstellen und Private Cluster erstellen, um einen Windows-Knotenpool zu erstellen und diesen einem privaten Cluster hinzuzufügen.
Windows Server-Anwendungs-Image zur Verwendung mit privaten Clustern erstellen
Starten Sie zum Erstellen des Docker-Images eine Compute Engine-Instanz mit der Windows Server-Version, auf der Sie Ihre Anwendungscontainer ausführen möchten, z. B. Windows Server 2019 oder Windows Server Version 1909. Stellen Sie außerdem sicher, dass eine Internetverbindung besteht.
Wechseln Sie auf der Compute Engine-Instanz zur Docker-Daemon-Konfiguration:
PS C:\> cat C:\ProgramData\docker\config\daemon.json
Konfigurieren Sie die Docker-Datei
daemon.json
so, dass fremde Ebenen in Ihre private Registry übertragen werden können, indem Sie die folgenden Zeilen hinzufügen:{ "allow-nondistributable-artifacts": ["gcr.io"] }
gcr.io
bezieht sich auf Container Registry. Dort wird das Image gehostet.Starten Sie den Docker-Daemon neu:
PS C:\> Restart-Service docker
Erstellen und taggen Sie das Docker-Image für Ihre Anwendung:
PS C:\> cd C:\my-app
PS C:\my-app> docker build -t gcr.io/my-project/my-app:v2 .
Dieser Befehl weist Docker an, das Image mithilfe des Dockerfiles im aktuellen Verzeichnis zu erstellen und mit einem Namen wie
gcr.io/my-project/my-app:v2
zu taggen.Übertragen Sie das Docker-Image der Anwendung in die
gcr.io
-Registry inmy-project
. Die Konfigurationallow-nondistributable-artifacts
bewirkt, dass die Windows-Basisebenen in Ihre private Registry übertragen werden.PS C:\my-app> docker push gcr.io/my-project/my-app:v2
Manifestdatei für das Deployment erstellen
Es folgt eine Beispiel-Manifestdatei für ein Deployment mit dem Namen my-app.yaml
. Das Image in diesem Beispiel ist jenes, das Sie im vorherigen Schritt übertragen haben (gcr.io/my-
project/my-app:v2
).
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
labels:
app: my-app
spec:
replicas: 1
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
nodeSelector:
kubernetes.io/os: windows
containers:
- name: my-server
image: gcr.io/my-project/my-app:v2
So stellen Sie diese Anwendung in dem privaten Cluster bereit:
gcloud container clusters get-credentials var>private-cluster-name
kubectl apply -f my-app.yaml
Dabei ist private-cluster-name der Name des von Ihnen erstellten Clusters.
Prüfen, ob der Pod ausgeführt wird
Lassen Sie alle Pods auflisten, um zu prüfen, ob der Pod richtig ausgeführt wird.
kubectl get pods
Im erwarteten Ergebnis sollte der Pod mit dem Status Running
angezeigt werden.
NAME READY STATUS RESTARTS AGE
my-app-c95fc5596-c9zcb 1/1 Running 0 5m
Images mit gemischten Knoten verwenden
Ihre Cluster können Knotenpools mit mehreren Windows Server-Typen und Windows Server-Versionen enthalten. Sie können auch Windows Server- und Linux-Arbeitslasten kombinieren. In den folgenden Abschnitten erhalten Sie detaillierte Informationen dazu, wie Sie Ihre Arbeitslasten für die Verwendung dieser Clustertypen konfigurieren.
Arbeitslasten mit verschiedenen Windows Server-Knoten-Image-Typen verwenden
Sie können Knotenpools mit verschiedenen Windows Server-Image-Typen (LTSC oder SAC) zu Ihrem Cluster hinzufügen. In einem Cluster mit gemischten Windows Server-Typen müssen Sie darauf achten, dass die Windows Server-Container nicht auf einem inkompatiblen Windows Server-Knoten geplant werden.
Wenn Sie einen Windows Server LTSC-Knotenpool und einen Windows Server SAC-Knotenpool haben, fügen Sie beiden Arbeitslasten das Knotenlabel gke-os-distribution
hinzu.
Fügen Sie den folgenden nodeSelector in die Manifestdatei für Ihre Windows Server LTSC-Arbeitslasten ein:
nodeSelector:
kubernetes.io/os: windows
cloud.google.com/gke-os-distribution: windows_ltsc
Fügen Sie den folgenden nodeSelector in die Manifestdatei für Ihre Windows Server-SAC-Arbeitslasten ein:
nodeSelector:
kubernetes.io/os: windows
cloud.google.com/gke-os-distribution: windows_sac
Durch Hinzufügen dieses Labels wird dafür gesorgt, dass Ihre LTSC-Container-Images nicht auf inkompatiblen SAC-Knoten geplant werden und umgekehrt.
Arbeitslasten mit verschiedenen Windows Server-Versionen verwenden
Wenn Sie Windows Server-Knotenpools mit mehreren verschiedenen LTSC- oder SAC-Versionen ausführen müssen, empfehlen wir Ihnen, Ihre Container-Images als Images für mehrere Architekturen zu erstellen, die auf allen in Ihrem Cluster verwendeten Windows Server-Versionen ausgeführt werden können.
Das Knotenlabel gke-os-distribution
reicht nicht aus, um zu verhindern, dass Ihre Arbeitslasten möglicherweise auf inkompatiblen Knoten geplant werden.
Linux- und Windows Server-Arbeitslasten in einem Cluster verwenden
Fügen Sie Ihren Linux-Arbeitslasten den folgenden Knotenselektor hinzu, damit sie immer auf Linux-Knoten geplant werden:
nodeSelector:
kubernetes.io/os: linux
Dies bietet weiteren Schutz, um zu verhindern, dass Linux-Arbeitslasten auf Windows Server-Knoten geplant werden, falls die NoSchedule
-Markierung versehentlich von den Windows Server-Knoten entfernt wird.