EKS クラスターに Windows ノードをデプロイする - Amazon EKS

このページの改善にご協力ください

本ユーザーガイドの改善にご協力いただけませんか? このページの下部までスクロールし、[GitHub でこのページの編集] を選択します。皆さまにご協力いただくことで、あらゆる人々に使いやすいユーザーガイドになります。

EKS クラスターに Windows ノードをデプロイする

Windows ノードをデプロイする前に、以下の考慮事項を確認してください。

考慮事項
  • HostProcess ポッドを使用して Windows ノードでホスト ネットワークを使用できます。詳細については、Kubernetes ドキュメントの「Create a Windows HostProcessPod」を参照してください。

  • CoreDNS など、Linux でのみ動作するコアシステム Pods を実行するには、Amazon EKS クラスターに 1 つ以上の Linux ノードまたは Fargate ノードが含まれている必要があります。

  • kubelet および kube-proxy イベントログは EKS Windows Event Log にリダイレクトされ、200 MB の制限に設定されます。

  • 個々の pods にセキュリティグループを割り当てる を、Windows ノードで実行する Pods で使用することはできません。

  • Windows ノードで カスタムネットワーキング を使用することはできません。

  • IPv6 を Windows ノードで使用することはできません。

  • Windows ノードは、ノードごとに 1 つの Elastic Network Interface をサポートします。デフォルトでは、Windows ノードごとに実行できる Pods の数は、ノードのインスタンスタイプの Elastic Network Interface ごとに使用できる IP アドレスの数から、1 を引いた数に等しくなります。詳細については、Amazon EC2 ユーザーガイドの「各インスタンスタイプのネットワークインターフェイスごとの IP アドレス」を参照してください。

  • Amazon EKS クラスターでは、ロードバランサーを持つ単一のサービスが、最大 1024 個までのバックエンド Pods をサポートできます。各 Pod には固有の IP アドレスがあります。OS ビルド 17763.2746 で始まる Windows Server 更新プログラム以降、以前の 64 個の Pods という上限はなくなりました。

  • Windows コンテナは、Fargate の Amazon EKS Pods でサポートされていません。

  • vpc-resource-controller ポッドからはログを取得できません。コントローラーをデータプレーンにデプロイしていたときには取得できていました。

  • IPv4 アドレスが新しいポッドに割り当てられるまでにはクールダウン期間があります。これは、古い kube-proxy ルールが原因で、同じ IPv4 アドレスを持つ古いポッドにトラフィックが流れるのを防ぎます。

  • コントローラーのソースは GitHub で管理されます。コントローラーに関する投稿や、問題の登録を行うには、GitHub の プロジェクト にアクセスしてください。

  • Windows マネージド型ノードグループのカスタム AMI ID を指定するとき、AWS IAM Authenticator 設定マップに eks:kube-proxy-windows を追加します。詳細については、「AMI ID を指定する場合の制限と条件」を参照してください。

  • サブネットで使用可能な IPv4 アドレスを保持することが重要な場合は、「EKS Best Practices Guide - Windows Networking IP Address Management」のガイダンスを参照してください。

前提条件
  • 既存のクラスター。クラスターは、次の表に示す Kubernetes バージョンとプラットフォームバージョンのいずれかを実行している必要があります。一覧にあるバージョンより後の Kubernetes とプラットフォームのバージョンもサポートされます。

    Kubernetes バージョン プラットフォームバージョン
    1.31 eks.1
    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
  • CoreDNS を実行するには、クラスターに少なくとも 1 つ (推奨値は少なくとも 2 つ) の Linux ノードまたは Fargate Pod が必要です。レガシー Windows サポートを有効にする場合は、 CoreDNS の実行に Linux ノードを使用する必要があります (Fargate Pod は使用できません)。

  • 既存の Amazon EKS クラスター の IAM ロール

Windows サポートを有効にする

クラスターに対して 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. Amazon EKS クラスター の IAM ロールAmazonEKSVPCResourceController マネージドポリシーを添付します。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-auth   ConfigMap をクラスターに適用する」を参照してください。

Windows ポッドをデプロイする

クラスターにポッドをデプロイするときに、さまざまなノードタイプを混在させて実行する場合に使用するオペレーティングシステムを指定する必要があります。

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 ノードでサポートされる Elastic Network Interface は 1 つだけなので、デフォルトでは Windows ノードで使用できる IP アドレスの最大数は次のようになります。

Number of private IPv4 addresses for each interface on the node - 1

1 つの IP アドレスがネットワークインターフェースのプライマリ IP アドレスとして使用されるため、Pods に割り当てることはできません。

IP プレフィックスの委任を有効にすると、Windows ノードで Pod 密度をより高めることができます。この機能により、セカンダリ IPv4 アドレスを割り当てる代わりに、プライマリネットワークインターフェイスに /28IPv4 プレフィックスを割り当てることができます。IP プレフィックスを割り当てると、ノードで使用できる IPv4 アドレスの最大数が次のように増加します。

(Number of private IPv4 addresses assigned to the interface attached to the node - 1) * 16

使用可能な IP アドレス数が大幅に増加したため、使用可能な IP アドレスによってノード上の Pods の数をスケーリングできることが制限されることはありません。詳細については、「プレフィックスを使用して Amazon EKS ノードに割り当てる IP アドレスを増やす」を参照してください。