このページの改善にご協力ください
本ユーザーガイドの改善にご協力いただけませんか? このページの下部までスクロールし、[GitHub でこのページの編集] を選択します。皆さまにご協力いただくことで、あらゆる人々に使いやすいユーザーガイドになります。
EKS クラスターに Windows ノードをデプロイする
Windows ノードをデプロイする前に、以下の考慮事項を確認してください。
考慮事項
-
HostProcess
ポッドを使用して Windows ノードでホスト ネットワークを使用できます。詳細については、Kubernetes ドキュメントの「Create a WindowsHostProcess
Pod」を参照してください。 -
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 は使用できません)。
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" } ] }
前の出力のようにポリシーがアタッチされている場合は、次のステップをスキップします。
-
Amazon EKS クラスター の IAM ロール に AmazonEKSVPCResourceController マネージドポリシーを添付します。
をクラスターロール名に置き換えます。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-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
アドレスを割り当てる代わりに、プライマリネットワークインターフェイスに /28
IPv4
プレフィックスを割り当てることができます。IP プレフィックスを割り当てると、ノードで使用できる IPv4
アドレスの最大数が次のように増加します。
(Number of private IPv4
addresses assigned to the interface attached to the node - 1) * 16
使用可能な IP アドレス数が大幅に増加したため、使用可能な IP アドレスによってノード上の Pods の数をスケーリングできることが制限されることはありません。詳細については、「プレフィックスを使用して Amazon EKS ノードに割り当てる IP アドレスを増やす」を参照してください。