在 EKS 集群上部署 Windows 节点 - Amazon EKS

在 EKS 集群上部署 Windows 节点

在部署 Windows 节点之前,请了解以下注意事项。

  • 您可以使用 HostProcess 容器组(pod)在 Windows 节点上使用主机网络。有关更多信息,请参阅 Kubernetes 文档中的创建 Windows HostProcessPod

  • Amazon EKS 集群必须包含一个或多个 Linux 或 Fargate 节点,才能运行仅在 Linux 上运行的核心系统 Pods,如 CoreDNS。

  • kubeletkube-proxy 事件日志将重定向到 EKS Windows 事件日志,并设置为 200MB 限制。

  • 您不能将 Assign security groups to individual 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.31

    eks.4

    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 支持

  1. 如果您的集群中没有 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" } ] }

    如果像前面的输出中那样已经附加了策略,请跳过下一步。

  2. AmazonEKSVPCResourceController 托管策略附加到您的 Amazon EKS 集群 IAM 角色。请将 eksClusterRole 替换为集群角色的名称。

    aws iam attach-role-policy \ --role-name eksClusterRole \ --policy-arn arn:aws:iam::aws:policy/AmazonEKSVPCResourceController
  3. 创建名为 vpc-resource-controller-configmap.yaml 的文件,具有以下内容。

    apiVersion: v1 kind: ConfigMap metadata: name: amazon-vpc-cni namespace: kube-system data: enable-windows-ipam: "true"
  4. ConfigMap 应用于集群。

    kubectl apply -f vpc-resource-controller-configmap.yaml
  5. 验证 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 地址