協助改善此頁面
想要為此使用者指南做出貢獻嗎? 捲動至此頁面底部,然後選取 [編輯此頁面於] GitHub。您的貢獻將有助於使我們的用戶指南更適合所有人。
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
為您的 Amazon EKS 叢集啟用 Windows 支援
部署 Windows 節點之前,請注意以下考量。
考量事項
-
您可以透過
HostProcess
Pod 在 Windows 節點上使用主機聯網。如需詳細資訊,請參閱 Kubernetes 文件中的建立 WindowsHostProcess
Pod。 -
Amazon EKS 叢集必須包含一或多個 Linux 或 Fargate 節點,才能執行只在 Linux 上執行的核心系統 Pods,例如:CoreDNS。
-
kubelet
和kube-proxy
事件日誌會重新導向至EKS
Windows 事件日誌,且其限制會設定為 200 MB。 -
您無法將 Pods 的安全群組 和在 Windows 節點上執行的 Pods 搭配使用。
-
您無法將自訂聯網與 Windows 節點搭配使用。
-
您無法將
IPv6
與 Windows 節點搭配使用。 -
Windows 節點為每個節點支援一個彈性網路介面。依預設,每個 Windows 節點可以執行的 Pods 數量,等於節點執行個體類型的每個彈性網路介面可用的 IP 地址數量減去一。如需詳細資訊,請參閱 Amazon EC2 使用者指南中每個執行個體類型的每個網路界面的 IP 地址。
-
在 Amazon EKS 叢集中,具有負載平衡器的單一服務最多可支援 1024 個後端 Pods。每個 Pod 都有自己的唯一 IP 地址。自 OS Build 17763.2746
起的 Windows Server 更新 後,過去的 64 個 Pods 限制已不存在。 -
Windows 容器不支援在 Fargate 上使用 Amazon EKS Pods。
-
無法從
vpc-resource-controller
Pod 擷取日誌。您先前在將控制器部署到資料平面時可以這麼做。 -
在將
IPv4
地址指派給新的 Pod 之前,有一段冷卻期間。這可以防止流量因kube-proxy
規則過時而流動到具有相同IPv4
地址的較舊 Pod。 -
在 GitHub 上可管理控制器的來源。若要對控制器做出貢獻或提出問題,請造訪 GitHub 上的專案
。 -
為Windows受管節點群組指定自訂 AMI ID 時,請新增
eks:kube-proxy-windows
至 AWS IAM 驗證器組態對應。如需詳細資訊,請參閱 指定 AMI ID 時的限制和條件。
必要條件
-
現有的叢集。叢集必須執行下表所列的其中一種 Kubernetes 版本和平台版本。所列版本之後推出的所有 Kubernetes 和平台版本亦受支援。若叢集或平台版本比下列其中一個版本還舊,則需要在叢集的資料平面上啟用舊版 Windows 支援。當叢集為以下 Kubernetes 和平台版本之一或更新的版本時,您可以在控制平面上移除舊版 Windows 支援和啟用 Windows 支援。
Kubernetes 版本 平台版本 1.30 eks.2 1.29 eks.1 1.28 eks.1 1.27 eks.1 1.26 eks.1 1.25 eks.1 1.24 eks.2 -
叢集必須至少有一個 (建議至少有兩個) Linux 節點或 Fargate Pod,才能執行 CoreDNS。若啟用舊版 Windows 支援,則必須使用 Linux 節點 (不能使用 Fargate Pod) 來執行 CoreDNS。
啟用 Windows 支援
若叢集不屬於先決條件中所列出的 Kubernetes 與平台版本其中的一個版本或更新的版本,則必須改為啟用舊版 Windows 支援。如需詳細資訊,請參閱 啟用舊版 Windows 支援。
若您從未在叢集上啟用 Windows 支援,請跳至下一個步驟。
若在早於先決條件中所列 Kubernetes 或平台版本的叢集上啟用 Windows 支援,則必須先從資料平面中移除 vpc-resource-controller 和 vpc-admission-webhook。其將遭取代,且未來不再需要。
為叢集啟用 Windows 支援
-
若叢集中沒有 Amazon Linux 節點,並且使用 Pods 的安全群組,請跳至下一個步驟。否則,請確認
AmazonEKSVPCResourceController
受管政策會連接至叢集角色。使用您的叢集角色名稱取代
。eksClusterRole
aws iam list-attached-role-policies --role-name
eksClusterRole
範例輸出如下。
{ "AttachedPolicies": [ { "PolicyName": "AmazonEKSClusterPolicy", "PolicyArn": "arn:aws:iam::aws:policy/AmazonEKSClusterPolicy" }, { "PolicyName": "AmazonEKSVPCResourceController", "PolicyArn": "arn:aws:iam::aws:policy/AmazonEKSVPCResourceController" } ] }
如果已連接政策 (如上一個輸出所示),請略過下一個步驟。
-
將亞馬遜 VPC ResourceController 託管策略附加到您的. Amazon EKS 叢集 IAM 角色 使用您的叢集角色名稱取代
。eksClusterRole
aws iam attach-role-policy \ --role-name
eksClusterRole
\ --policy-arn arn:aws:iam::aws:policy/AmazonEKSVPCResourceController -
使用下列內容建立名為
的檔案。vpc-resource-controller-configmap.yaml
apiVersion: v1 kind: ConfigMap metadata: name: amazon-vpc-cni namespace: kube-system data: enable-windows-ipam: "true"
-
將
ConfigMap
套用至您的叢集。kubectl apply -f
vpc-resource-controller-configmap.yaml
-
確認您的
aws-auth
ConfigMap
包含 Windows 節點執行個體角色的對應,以包含eks:kube-proxy-windows
RBAC 許可群組。您可以透過執行以下命令來驗證。kubectl get configmap aws-auth -n kube-system -o yaml
範例輸出如下。
apiVersion: v1 kind: ConfigMap metadata: name: aws-auth namespace: kube-system data: mapRoles: | - groups: - system:bootstrappers - system:nodes - eks:kube-proxy-windows # This group is required for Windows DNS resolution to work rolearn: arn:aws:iam::
111122223333
:role/eksNodeRole
username: system:node:{{EC2PrivateDNSName}} [...]您應該會在群組下看到
eks:kube-proxy-windows
列出。如果未指定群組,您需要更新ConfigMap
或建立群組以包含所需的群組。如需aws-auth
ConfigMap
的詳細資訊,請參閱 將 aws-authConfigMap 套用至您的叢集。
從資料平面中移除舊版 Windows 支援
若在早於先決條件中所列 Kubernetes 或平台版本的叢集上啟用 Windows 支援,則必須先從資料平面中移除 vpc-resource-controller
和 vpc-admission-webhook
。其將遭取代,且未來不再需要,因為現已在控制平面上啟用其所提供之功能。
-
可使用以下命令解除安裝
vpc-resource-controller
。不論最初使用哪個工具進行安裝,都請使用這個命令。使用叢集所在的 AWS 區域 取代
(只有在region-code
/manifests/
之後的該文字其執行個體)。kubectl delete -f https://s3.us-west-2.amazonaws.com/amazon-eks/manifests/
region-code
/vpc-resource-controller/latest/vpc-resource-controller.yaml -
按照安裝時所用工具的說明來解除安裝
vpc-admission-webhook
。 -
為在控制平面上的叢集啟用 Windows 支援。
停用 Windows 支援
停用叢集上的 Windows 支援
-
若叢集包含 Amazon Linux 節點,並且搭配使用 Pods 的安全群組,則請跳過這個步驟。
從叢集角色中移除
AmazonVPCResourceController
受管 IAM 政策。使用您的叢集角色名稱取代
,再以帳戶 ID 取代eksClusterRole
。111122223333
aws iam detach-role-policy \ --role-name
eksClusterRole
\ --policy-arn arn:aws:iam::aws:policy/AmazonEKSVPCResourceController -
在中停用 Windows IPAM。
amazon-vpc-cni
ConfigMapkubectl patch configmap/amazon-vpc-cni \ -n kube-system \ --type merge \ -p '{"data":{"enable-windows-ipam":"false"}}'
部署 Pod
在將 Pod 部署到叢集時,您需要指定在執行混合節點類型時所使用的作業系統。
對於 Linux Pods,請在清單檔案中使用以下節點選取器文字。
nodeSelector: kubernetes.io/os: linux kubernetes.io/arch: amd64
對於 Windows Pods,請在清單檔案中使用以下節點選取器文字。
nodeSelector: kubernetes.io/os: windows kubernetes.io/arch: amd64
您可以部署範例應用程式來查看正在使用的節點選擇器。
啟用舊版 Windows 支援
若叢集不屬於先決條件所列出的 Kubernetes 與平台版本其中的一個版本或更新的版本,則我們建議您改為在控制平面上啟用 Windows 支援。如需詳細資訊,請參閱 啟用 Windows 支援。
若叢集或平台版本早於先決條件所列的版本時,您可以參考以下步驟以協助您為 Amazon EKS 叢集的資料平面啟用舊版 Windows 支援。當叢集和平台版本為先決條件所列的版本或更新的版本時,我們建議您移除舊版 Windows 支援並為控制平面啟用 Windows 支援。
您可以使用 eksctl
、Windows 用戶端、macOS 或 Linux 用戶端來為叢集啟用舊版 Windows 支援。
續約 VPC 許可 Webhook 憑證
VPC 許可 Webhook 使用的憑證會在發行後一年到期。若要避免停機時間,請務必在其過期之前續約憑證。您可以使用以下命令檢查目前憑證的過期日期。
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
範例輸出如下。
May 28 14:23:00 2022 GMT
您可以使用 eksctl
或 Windows,或者是 Linux/macOS 電腦來續約憑證。請依照您原本用於裝 VPC 許可 Webhook 的工具指示進行操作。例如,如果您最初使用 eksctl
安裝 VPC 許可 Webhook,那麼您應該使用 eksctl
標籤上的指示續約憑證。
在 Windows 節點上支援更多數量的 Pod
在 Amazon EKS 中,每個 Pod 都會從您的 VPC 配置一個 IPv4
地址。因此,即使有足夠的資源可以在節點上執行更多 Pods,您能部署到節點的 Pods 數量也會受到可用 IP 地址的限制。由於 Windows 節點僅支援一個彈性網路介面,因此依預設,Windows 節點上可用 IP 地址的數量上限為:
Number of private IPv4
addresses for each interface on the node - 1
一個 IP 地址用作網路介面的主要 IP 地址,因此無法將其配置給 Pods。
您可以啟用 IP 字首委派,在 Windows 節點上啟用更多數量的 Pod。此功能可讓您將 /28
IPv4
字首指派給主要網路介面,而不是指派次要 IPv4
位址。而指派 IP 字首會將節點上可用 IPv4
地址的數量上限增加到:
(Number of private IPv4
addresses assigned to the interface attached to the node - 1) * 16
由於可用 IP 地址的數量大幅增加,可用的 IP 地址不應限制您擴展節點上 Pods 數量的能力。如需更多詳細資訊,請參閱 增加 Amazon EC2 節點的可用 IP 地址數量。