Amazon 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 の Windows インスタンス用ユーザーガイドの各インスタンスタイプのネットワークインターフェイスあたりの 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 を指定する場合の制限と条件」を参照してください。
前提条件
-
既存のクラスター。クラスターは、次の表に示す Kubernetes バージョンとプラットフォームバージョンのいずれかを実行している必要があります。一覧にあるバージョンより後の Kubernetes とプラットフォームのバージョンもサポートされます。クラスターまたはプラットフォームのバージョンが次のいずれかのバージョンより前の場合は、クラスターのデータプレーン上で レガシー Windows サポートを有効にする 必要があります。クラスターが次の Kubernetes とプラットフォームのバージョンのいずれか以降になったら、コントロールプレーン上で レガシー Windows サポートを削除 して Windows サポートの有効化 を実行できます。
Kubernetes バージョン プラットフォームのバージョニング 1.27 eks.1 1.26 eks.1 1.25 eks.1 1.24 eks.2 1.23 eks.1 -
CoreDNS を実行するには、クラスターに少なくとも 1 つ (推奨値は少なくとも 2 つ) の Linux ノードまたは Fargate Pod が必要です。レガシー Windows サポートを有効にする場合は、 CoreDNS の実行に Linux ノードを使用する必要があります (Fargate Pod は使用できません)。
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" } ] }
前の出力のようにポリシーがアタッチされている場合は、次のステップをスキップします。
-
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
データプレーンからのレガシー Windows サポートの削除
前提条件 の一覧にある Kubernetes またはプラットフォームのバージョンより前のクラスターで Windows サポートを有効にした場合は、まずータプレーンから vpc-resource-controller
とvpc-admission-webhook
を削除する必要があります。これらで提供されていた機能はコントロールプレーンで有効になったため、これらは廃止され、もう必要ありません。
-
次のコマンドを使用して
vpc-resource-controller
をアンインストールします。このコマンドは、元々インストールしたツールに関係なく使用します。
(region-code
/manifests/
の後のそのテキストのインスタンスのみ) を、クラスターが含まれている AWS リージョン に置き換えます。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 ポリシーを削除します。
をクラスタロールの名前とeksClusterRole
のアカウントIDに置き換えます。111122223333
aws iam detach-role-policy \ --role-name
eksClusterRole
\ --policy-arn arn:aws:iam::aws:policy/AmazonEKSVPCResourceController -
amazon-vpc-cni
ConfigMap で Windows IPAM を無効にします。kubectl patch configmap/amazon-vpc-cni \ -n kube-system \ --type merge \ -p '{"data":{"enable-windows-ipam":"false"}}'
ポッドのデプロイ
クラスターにポッドをデプロイするときに、さまざまなノードタイプを混在させて実行する場合に使用するオペレーティングシステムを指定する必要があります。
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 のクライアントを使用できます。
VPC アドミッションウェブフック証明書の更新
VPC アドミッションウェブフックで使用される証明書は、発行後 1 年で期限切れになります。ダウンタイムを回避するには、有効期限が切れる前に証明書を更新することが重要です。現在の証明書の有効期限は、次のコマンドを使用して確認できます。
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 アドミッションウェブフックのインストールに使用した当初のツールの指示に従ってください。たとえば、最初に eksctl
で VPC アドミッションウェブフックをインストールした場合、eksctl
の指示に従って証明書を更新する必要があります。
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 EC2 ノードで使用可能な IP アドレスの量を増やす」を参照してください。