帮助改进此页面
想为本用户指南做出贡献? 滚动到页面底部,然后选择在 GitHub 上编辑此页面。您的贡献有助于我们的用户指南为每个人提供更充分的参考。
在 EKS 集群上部署 Windows 节点
在部署 Windows 节点之前,请了解以下注意事项。
注意事项
-
您可以使用
HostProcess
容器组(pod)在 Windows 节点上使用主机网络。有关更多信息,请参阅 Kubernetes 文档中的创建 WindowsHostProcess
Pod。 -
Amazon EKS 集群必须包含一个或多个 Linux 或 Fargate 节点,才能运行仅在 Linux 上运行的核心系统 Pods,如 CoreDNS。
-
kubelet
和kube-proxy
事件日志将重定向到EKS
Windows 事件日志,并设置为 200MB 限制。 -
您不能将 将安全组分配到单个 pods 用于在 Windows 节点上运行的 Pods。
-
您不能将自定义联网用于 Windows 节点。
-
您不可以将
IPv6
与 Windows 节点一起使用。 -
Windows 节点支持每个节点一个弹性网络接口。默认情况下,每个 Windows 节点可以运行的 Pods 数等于每个弹性网络接口可用于节点实例类型的 IP 地址数减 1。有关更多信息,请参阅《Amazon EC2 用户指南》中的每种实例类型的每个网络接口的 IP 地址数。
-
在 Amazon EKS 集群中,采用负载均衡器的单个服务最多可支持 1024 个后端 Pods。每个 Pod 都有自己的唯一 IP 地址。对于从 操作系统构建 17763.2746
开始的 Windows 服务器更新 ,之前的 64 个 Pods 限制已经没有了。 -
Fargate 上的 Amazon EKS Pods 不支持 Windows 容器。
-
无法从
vpc-resource-controller
Pod 检索日志。以前在将此控制器部署到数据面板时则可以检索。 -
在将
IPv4
地址分配给新容器组(pod)之前,会有一段“冷却”时间。这样可以防止流量因过时的kube-proxy
规则而流向具有相同IPv4
地址的旧容器组(pod)。 -
该控制器的源代码在 GitHub 上进行管理。要为该控制器贡献代码或提交针对该控制器的问题,请访问 GitHub 上的相应项目
。 -
为 Windows 托管节点组指定自定义 AMI ID 时,请将
eks:kube-proxy-windows
添加到您的 AWS IAM 身份验证器配置映射中。有关更多信息,请参阅 指定 AMI ID 时的限制和条件。 -
如果保留可用的 IPv4 地址对您的子网至关重要,请参阅 EKS Best Practices Guide - Windows Networking IP Address Management
以获取指导。
先决条件
-
现有集群。该集群必须运行下表中列出的 Kubernetes 版本和平台版本之一。所有比所列版本更高的 Kubernetes 和平台版本也受支持。
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。
-
已有一个 Amazon EKS 集群 IAM 角色。
启用 Windows 支持
为集群启用 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" } ] }
如果像前面的输出中那样已经附加了策略,请跳过下一步。
-
将 AmazonEKSVPCResourceController 托管策略附加到您的 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 容器组(pod)
将 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 节点上支持更高的 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 EKS 节点分配更多 IP 地址。