Windows-Unterstützung
Beachten Sie vor der Bereitstellung von Windows-Knoten die folgenden Überlegungen.
Überlegungen
-
Amazon-EC2-Instance-Typen C3, C4, D2, I2, M4 (ausgenommen m4.16xlarge)m M6a.x und R3-Instances werden für Windows-Workloads nicht unterstützt.
-
Der Hostnetzwerkmodus wird für Windows-Workloads nicht unterstützt.
-
Amazon-EKS-Cluster müssen einen oder mehrere Linux- oder Fargate-Knoten enthalten, um Kernsystem-Pods auszuführen, die nur unter Linux, z. B. CoreDNS, ausgeführt werden.
-
Die Ereignisprotokolle
kubelet
undkube-proxy
werden in dasEKS
-Windows-Ereignisprotokoll umgeleitet und auf 200 MB begrenzt. -
Sie können Sicherheitsgruppen für Pods nicht mit Pods verwenden, die auf Windows-Knoten ausgeführt werden.
-
Sie können benutzerdefinierte Netzwerke nicht mit Windows-Knoten benutzen.
-
Sie können IP-Präfixe nicht mit Windows-Knoten benutzen. Dies ist eine Voraussetzung für die Verwendung von IPv6, Sie können daher IPv6 auch nicht mit Windows-Knoten verwenden.
-
Windows-Knoten unterstützen eine Elastic-Network-Schnittstelle pro Knoten. Die Anzahl der Pods, die Sie pro Windows-Knoten ausführen können, entspricht der Anzahl der IP-Adressen, die pro Elastic Network-Schnittstelle für den Instance-Typ des Knotens verfügbar sind, minus eins. Weitere Informationen finden Sie unter IP-Adressen pro Netzuwerkschnittstelle pro Instance-Typ im Amazon EC2-Benutzerhandbuch für Windows-Instances.
-
In einem Amazon-EKS-Cluster kann ein einzelner Service mit einer Lastenverteilung bis zu 64 Backend-Pods unterstützen. Jeder Pod hat seine eigene eindeutige IP-Adresse. Dies ist eine Einschränkung des Windows-Betriebssystems auf den Amazon-EC2-Knoten.
-
Sie können keine von Windows verwalteten oder Fargate-Knoten bereitstellen. Sie können nur selbstverwaltete Windows-Knoten erstellen. Weitere Informationen finden Sie unter Selbstverwaltete Windows-Knoten starten.
-
Sie können keine Protokolle aus dem
vpc-resource-controller
-Pod abrufen. Dies war zuvor möglich, als Sie den Controller auf der Datenebene bereitgestellt haben. -
Es gibt eine Abkühlungsphase, bevor einem neuen Pod eine IPv4-Adresse zugewiesen wird. Dadurch wird verhindert, dass Datenverkehr aufgrund veralteter
kube-proxy
-Regeln an einen älteren Pod mit derselben IPv4-Adresse fließt. -
Die Quelle für den Controller wird auf GitHub verwaltet. Um zum Controller beizutragen oder Probleme gegen den Controller einzureichen, besuchen Sie das Projekt
auf GitHub.
Voraussetzungen
-
Einen vorhandenen -Cluster. Auf dem Cluster muss eine der in der folgenden Tabelle aufgeführten Kubernetes-Versionen und Plattform-Versionen ausgeführt werden. Alle Kubernetes- und Plattformversionen, die über die aufgeführten hinausgehen, werden ebenfalls unterstützt. Wenn Ihre Cluster- oder Plattformversion früher als eine der folgenden Versionen ist, müssen Sie Legacy-System-Windows-Support auf der Datenebene Ihres Clusters aktivieren. Sobald sich Ihr Cluster in einer der folgenden Kubernetes- und Plattformversionen oder höher befindet, können Sie Legacy-System-Windows-Support entfernen und Windows-Support auf Ihrer Steuerebene aktivieren.
Kubernetes Version Plattformversion 1.21 eks.3 1.20 eks.3 1.19 eks.7 1.18 eks.9 1,17 eks.10 Ihr Cluster muss mindestens einen (wir empfehlen mindestens zwei) Linux-Knoten oder Fargate-Pod haben, um CoreDNS auszuführen. Wenn Sie den Legacy-System-Windows-Support aktivieren, müssen Sie einen Linux-Knoten verwenden (Sie können keinen Fargate-Pod verwenden), um CoreDNS auszuführen.
-
Eine vorhandene Amazon-EKS-Cluster-IAM-Rolle.
Aktivieren der Windows-Unterstützung
Wenn Ihr Cluster nicht eine der, oder spätere, Kubernetes- und Plattformversionen hat, die in den Voraussetzungen aufgelistet sind, verwenden Sie stattdessen den Legacy-System-Windows-Support. Weitere Informationen finden Sie unter Aktivieren des Legacy-System-Windows-Supports.
Wenn Sie den Windows-Support für Ihren Cluster noch nie aktiviert haben, fahren Sie mit dem nächsten Schritt fort.
Wenn Sie den Windows-Support für einen Cluster aktiviert haben, der älter als eine der Kubernetes- oder Plattformversionen ist, die in den Voraussetzungen aufgelistet sind, dann müssen Sie zuerst den vpc-resource-controller und vpc-admission-webhook von Ihrer Datenebene entfernen. Sie sind veraltet und werden nicht mehr benötigt.
So aktivieren Sie den Windows-Support für Ihren Cluster
-
Wenn Sie keine Amazon-Linux-Knoten in Ihrem Cluster haben und Sicherheitsgruppen für Pods verwenden, fahren Sie mit dem nächsten Schritt fort. Ansonsten bestätigen Sie, dass die verwaltete Richtlinie
AmazonEKSVPCResourceController
Ihrer Cluster-Rolle angefügt ist. Ersetzen SieeksClusterRole
mit dem Namen Ihrer Clusterrolle.aws iam list-attached-role-policies --role-name
eksClusterRole
Ausgabe
{ "AttachedPolicies": [ { "PolicyName": "AmazonEKSClusterPolicy", "PolicyArn": "arn:aws:iam::aws:policy/AmazonEKSClusterPolicy" }, { "PolicyName": "AmazonEKSVPCResourceController", "PolicyArn": "arn:aws:iam::aws:policy/AmazonEKSVPCResourceController" } ] }
Wenn die Richtlinie wie in der vorherigen Ausgabe angehängt ist, überspringen Sie den nächsten Schritt.
-
Fügen Sie die AmazonEKSVPCResourceController
-verwaltete Richtlinie an Ihre Amazon-EKS-Cluster-IAM-Rolle. Ersetzen Sie eksClusterRole
mit dem Namen Ihrer Clusterrolle.aws iam attach-role-policy \ --role-name
eksClusterRole
\ --policy-arn arn:aws:iam::aws:policy/AmazonEKSVPCResourceController -
Erstellen Sie eine Datei mit dem Namen
vpc-resource-controller-configmap.yaml
mit dem folgendem Inhalt.apiVersion: v1 kind: ConfigMap metadata: name: amazon-vpc-cni namespace: kube-system data: enable-windows-ipam: "true"
-
Anwendung der ConfigMap auf Ihren Cluster.
kubectl apply -f
vpc-resource-controller-configmap.yaml
Entfernen des Legacy-System-Windows-Supports von Ihrer Datenebene
Wenn Sie den Windows-Support für einen Cluster aktiviert haben, der älter als eine der Kubernetes- oder Plattformversionen ist, die in den Voraussetzungen aufgelistet sind, dann müssen Sie zuerst vpc-resource-controller
und vpc-admission-webhook
von Ihrer Datenebene entfernen. Sie sind veraltet und werden nicht mehr benötigt, da die von ihnen bereitgestellte Funktionalität jetzt auf der Steuerebene aktiviert ist.
-
Deinstallieren Sie das
vpc-resource-controller
mit dem folgenden Befehl. Verwenden Sie diesen Befehl unabhängig davon, mit welchem Tool Sie ihn ursprünglich installiert haben. Ersetzen Sieus-west-2
(nur die Instance des betreffenden Textes nach/manifests/
) durch die Region, in der sich Ihr Cluster befindet.kubectl delete -f https://amazon-eks.s3.us-west-2.amazonaws.com/manifests/
us-west-2
/vpc-resource-controller/latest/vpc-resource-controller.yaml -
Deinstallieren Sie das
vpc-admission-webhook
anhand der Anweisungen für das Tool, mit dem Sie es installiert haben. -
Aktivieren des Windows-Supports für Ihren Cluster auf der Steuerebene.
Deaktivieren des Windows-Supports
So deaktivieren Sie den Windows-Support für Ihren Cluster
-
Wenn Ihr Cluster Amazon-Linux-Knoten enthält und Sie Sicherheitsgruppen für Pods mit ihnen verwenden, überspringen Sie dann diesen Schritt.
Entfernen Sie die
AmazonVPCResourceController
-verwaltete IAM-Richtlinie von Ihrer Cluster-Rolle. Ersetzen SieeksClusterRole
durch den Namen Ihrer Clusterrolle und111122223333
durch Ihre Konto-ID.aws iam detach-role-policy \ --role-name
eksClusterRole
\ --policy-arn arn:aws:iam::aws:policy/AmazonEKSVPCResourceController -
Deaktivieren Sie Windows IPAM im
amazon-vpc-cni
-ConfigMap.kubectl patch configmap/amazon-vpc-cni \-n kube-system \--type merge \-p '{"data":{"enable-windows-ipam":"false"}}'
Bereitstellen von Pods
Wenn Sie Pods in Ihrem Cluster bereitstellen, müssen Sie das Betriebssystem angeben, das sie verwenden, wenn Sie eine Mischung aus Knotentypen ausführen.
Verwenden Sie für Linux-Pods den folgenden Knotenauswahltext in Ihren Manifesten.
nodeSelector: kubernetes.io/os: linux kubernetes.io/arch: amd64
Verwenden Sie für Windows-Pods den folgenden Knotenauswahltext in Ihren Manifesten.
nodeSelector: kubernetes.io/os: windows kubernetes.io/arch: amd64
Sie können eine Beispielanwendung bereitstellen, um die verwendeten Knotenselektoren zu sehen.
Aktivieren des Legacy-System-Windows-Supports
Wenn Ihr Cluster eine der, oder spätere, Kubernetes- und Plattformversionen hat, die in den Voraussetzungen aufgelistet sind, wird empfohlen, den Windows-Support stattdessen auf der Steuerebene zu aktivieren. Weitere Informationen finden Sie unter Aktivieren der Windows-Unterstützung.
Die folgenden Schritte helfen Ihnen, den Legacy-System-Windows-Support für die Datenebene Ihres Amazon-EKS-Clusters zu aktivieren, wenn Ihre Cluster- oder Plattformversion älter als die Versionen ist, die in den Voraussetzungen aufgelistet sind. Sobald Ihre Cluster- und Plattformversion gleich einer, oder höher als eine, Version ist, die in den Voraussetzungen aufgelistet ist, empfehlen wir Ihnen, dass Sie den Legacy-System-Windows-Support entfernen und ihn für die Steuerebene aktivieren.
Sie können eksctl
, einen Windows-Client oder einen macOS- oder Linux-Client verwenden, um den Legacy-System-Windows-Support für Ihren Cluster zu aktivieren.
Erneuerung des VPC-Zulassungs-Webhook-Zertifikats
Das vom VPC-Zulassungswebhook verwendete Zertifikat läuft ein Jahr nach der Ausstellung ab. Um Ausfallzeiten zu vermeiden, ist es wichtig, dass Sie das Zertifikat vor Ablauf erneuern. Sie können das Ablaufdatum Ihres aktuellen Zertifikats mit dem folgenden Befehl überprüfen.
kubectl get secret \ -n kube-system \ vpc-admission-webhook-certs -o json | \ jq -r '.data."cert.pem"' | \ base64 -decode | \ openssl x509 \ -noout \ -enddate | \ cut -d= -f2
Ausgabe
May 28 14:23:00 2022 GMT
Sie können das Zertifikat mit eksctl
oder einem Windows- oder Linux/macOS-Computer erneuern. Befolgen Sie die Anweisungen für das Tool, mit dem Sie den VPC-Zulassungswebhook ursprünglich installiert haben. Wenn Sie beispielsweise den VPC-Zulassungswebhook ursprünglich mit eksctl
installiert haben, sollten Sie das Zertifikat gemäß den Anweisungen auf der Registerkarte eksctl
erneuern.