kube-proxy アドオンの管理 - Amazon EKS

kube-proxy アドオンの管理

Kube-proxy は、各 Amazon EC2 ノードのネットワークルールを管理します。これにより、pods へのネットワーク通信が可能なります。Kube-proxy は Fargate ノードにはデプロイされません。詳細については、Kubernetes ドキュメントの「kube-proxy」を参照してください。各 Kubernetes バージョン用に使用できる kube-proxy イメージには、次の 2 種類があります。

  • デフォルト – このタイプは、新しいクラスターでデフォルトでデプロイされます。これは、バージョン 1.22 以前のクラスターの Amazon EKS アドオンで使用できる唯一のタイプです。

  • 最小限 — デフォルトのタイプとは異なり、このイメージのタイプは、最小ベースイメージは、最小限のパッケージを含み、シェルを持たない Amazon EKS Distro によって維持されています。詳細については、「Amazon EKS Distro」を参照してください。このタイプは、セルフマネージドアドオンとして使用できます。バージョン 1.23 以降のクラスター用の Amazon EKS アドオンとしても使用できますが、バージョン 1.22 以前のクラスターの Amazon EKS アドオンとしては使用できません。このタイプをセルフマネージドアドオンとしてインストールすることを選択した場合は、バージョン 1.22 以前のクラスターについて、次の表で最小タイプの最新バージョンを指定して、kube-proxy のセルフマネージド型アドオンを更新する のステップを完了します。このタイプは、デフォルトで、新しい 1.23 以降のクラスターに追加されます。既存のクラスターをバージョン 1.23 に更新する場合、Amazon EKS アドオンをクラスターに追加するか、既存の Amazon EKS アドオンをこのタイプに更新できます。

Amazon EKS クラスターの各バージョンで使用可能な最新の kube-proxy バージョン
[Image type] (イメージタイプ) 1.23 1.22 1.21 1.20 1.19 1.18
kube-proxy (デフォルトタイプ) 利用不可 1.22.11-eksbuild.2 1.21.14-eksbuild.2 1.20.15-eksbuild.2 1.19.16-eksbuild.2 1.18.8-eksbuild.1
kube-proxy (最小タイプ) 1.23.7-minimal-eksbuild.1 1.22.11-minimal-eksbuild.2 1.21.14-minimal-eksbuild.2 1.20.15-minimal-eksbuild.3 1.19.16-minimal-eksbuild.3 1.18.20-minimal-eksbuild.1

1.18 を使用して AWS Management Console 以降のクラスターを作成した場合、Amazon EKS アドオンとして、プラグインが Amazon EKS によりインストールされます。任意のツールを使用して 1.17 以前のクラスターを作成した場合、または AWS Management Console 以外のツールを使用して 1.18 以降のクラスターを作成した場合、Amazon EKS はセルフマネージドアドオンとしてプラグインをインストールしています。kube-proxy Amazon EKS アドオンの追加 での手順により、セルフマネージドアドオンを Amazon EKS アドオンに移行できます。kube-proxy アドオンが既に追加してあるクラスターの場合は、「kube-proxy Amazon EKS アドオンの更新」および「kube-proxy Amazon EKS アドオンの削除」セクションの手順で管理できます。Amazon EKS アドオンの詳細については、「Amazon EKS アドオン」を参照してください。

kube-proxy Amazon EKS アドオンを追加していない場合、クラスター上では kube-proxy のセルフマネージド型アドオンが引き続き実行されています。kube-proxy のセルフマネージド型アドオンを更新する での手順により、kube-proxy のセルフマネージド型アドオンを手動で更新できます。

Amazon EKS は、kube-proxy 用に Kubernetes と同じ互換性とスキューポリシーを備えています。Kube-proxy は、次の要件を満たす必要があります。

  • ノードの kubelet と同じマイナーバージョンである必要があります。

  • クラスターのコントロールプレーンのバージョン以前のものである必要があります。

  • そのバージョンは、コントロールプレーンの 2 つのマイナーバージョン以降のものである必要があります。例えば、コントロールプレーンが Kubernetes 1.23 を実行している場合、kube-proxy マイナーバージョンを 1.21 より前にすることはできません。

前提条件

  • 既存の Amazon EKS クラスター。デプロイするには、Amazon EKS の使用開始を参照してください。

  • クラスターが 1.21 以降である場合、Amazon VPC と CoreDNS アドオンが、サービスアカウントトークンにリストされている最小のバージョンであること確認してください。

kube-proxy Amazon EKS アドオンの追加

eksctl、AWS Management Console、または AWS CLI を使用して、kube-proxy Amazon EKS アドオンをクラスターに追加できます。

重要

kube-proxy Amazon EKS アドオンを追加する前に、Amazon EKS により管理される設定内容を自分自身で変更していないことを確認してください。Amazon EKS が管理する設定については、「Amazon EKS アドオンの設定」でご確認ください。

eksctl

eksctl を使用して kube-proxy Amazon EKS アドオンを追加する

my-cluster をクラスターの名前に置き換えてから、次のコマンドを実行します。Eksctl は、クラスターのバージョンで使用できるアドオンの最新バージョンを追加します。

eksctl create addon --name kube-proxy --cluster my-cluster --force

--force オプションを削除した状態で Amazon EKS アドオンを追加する場合、アドオンの設定のいずれかが現状の設定と競合していると、この追加は失敗します。この場合、競合を解決するためのエラーメッセージが表示されます。このオプションを指定する前に、自分が管理する必要がある設定を Amazon EKS アドオンが管理していないことを確認してください。これらの設定は、このオプションの指定により上書きされます。Amazon EKS アドオン設定管理の詳細については、「Amazon EKS アドオンの設定」を参照してください。

AWS Management Console

AWS Management Console を使用して kube-proxy Amazon EKS アドオンを追加する方法

  1. Amazon EKS コンソール (https://console.aws.amazon.com/eks/home#/clusters) を開きます。

  2. 左のナビゲーションペインで、[Clusters] (クラスター) を選択した後、kube-proxy Amazon EKS アドオンを設定するクラスター名を選択します。

  3. [アドオン] タブを選択します。

  4. [Add new (新規追加)] を選択します。

    1. [Name (名前)]は kube-proxy を選択します。

    2. 使用する [Version (バージョン)] を選択します。[Latest] (最新) としてマークされたバージョンを選択します。

    3. [クラスター上のこのアドオンで既存の設定を上書きする] を選択すると、既存のアドオンでの任意の設定が、Amazon EKS アドオンの設定により上書きされます。このオプションを有効にしない状態で Amazon EKS アドオンを追加する際に、そのアドオンの設定のいずれかが現状の設定と競合している場合その移行は失敗します。この場合、競合を解決するためのエラーメッセージが表示されます。このオプションを選択する前に、自分で管理する必要のある設定が、Amazon EKS アドオンにより管理されていないことを確認してください。Amazon EKS アドオン設定管理の詳細については、「Amazon EKS アドオンの設定」を参照してください。

    4. [Add (追加)] を選択します。

AWS CLI

AWS CLI を使用して kube-proxy Amazon EKS アドオンを追加する方法

アドオンを作成します。my-cluster をクラスターの名前に置き換え、最新バージョンのテーブルのクラスターのために 1.23.7-minimal-eksbuild.1 を最新バージョンに置き換えます。

aws eks create-addon --cluster-name my-cluster --addon-name kube-proxy --addon-version v1.23.7-minimal-eksbuild.1 --resolve-conflicts OVERWRITE

--resolve-conflicts OVERWRITE オプションを削除した状態で Amazon EKS アドオンを作成する際に、そのアドオンの設定のいずれかが現状の設定と競合している場合その作成は失敗します。この場合、競合を解決するためのエラーメッセージが表示されます。このオプションを指定する前に、自分が管理する必要がある設定を Amazon EKS アドオンが管理していないことを確認してください。これらの設定は、このオプションの指定により上書きされます。Amazon EKS アドオン設定管理の詳細については、「Amazon EKS アドオンの設定」を参照してください。

kube-proxy Amazon EKS アドオンの更新

kube-proxy Amazon EKS アドオンを更新するための手順です。kube-proxy Amazon EKS アドオンを追加していない場合は、代わりに kube-proxy のセルフマネージド型アドオンを更新する の手順を完了してください。Amazon EKS では、新しいバージョンがリリースされても、もしくは新しい Kubernetes マイナーバージョンにクラスターを更新しても、クラスターで kube-proxy が自動的に更新されることはありません。既存のクラスターで kube-proxy を更新するには、まずはお客様が更新を開始してください。その後、Amazon EKSで Amazon EKS アドオンが更新されます。

重要

クラスターとノードを新しい Kubernetes マイナーバージョンに更新してから、更新したクラスターのマイナーバージョンと同じマイナーバージョンに kube-proxy を更新します。

eksctl

eksctl を使用して kube-proxy Amazon EKS アドオンを更新する方法

  1. kube-proxy Amazon EKS アドオンの現在のバージョンを確認します。my-cluster をクラスター名に置き換えます。

    eksctl get addon --name kube-proxy --cluster my-cluster

    出力例を次に示します。

    NAME VERSION STATUS ISSUES IAMROLE UPDATE AVAILABLE kube-proxy v1.22.11-eksbuild.2 ACTIVE 0 v1.23.7-minimal-eksbuild.1
  2. アドオンを、前のステップの出力で UPDATE AVAILABLE の下に表示されたバージョンに更新します。

    eksctl update addon \ --name kube-proxy \ --version v1.23.7-minimal-eksbuild.1 \ --cluster my-cluster \ --force

    --force オプションを削除した状態で Amazon EKS アドオンを更新する際に、そのアドオンの設定のいずれかが現状の設定と競合している場合その更新は失敗します。この場合、競合を解決するためのエラーメッセージが表示されます。このオプションを指定する前に、自分が管理する必要がある設定を Amazon EKS アドオンが管理していないことを確認してください。これらの設定は、このオプションの指定により上書きされます。Amazon EKS アドオン設定管理の詳細については、「Amazon EKS アドオンの設定」を参照してください。

AWS Management Console

AWS Management Console を使用して kube-proxy Amazon EKS アドオンを更新する方法

  1. Amazon EKS コンソール (https://console.aws.amazon.com/eks/home#/clusters) を開きます。

  2. 左のナビゲーションペインで、[Clusters] (クラスター) を選択した後、kube-proxy Amazon EKS アドオンを更新するクラスター名を選択します。

  3. [アドオン] タブを選択します。

  4. kube-proxy ボックス右上にあるボックスをクリックし、[Edit (編集)] を選択します。

    1. [Latest] (最新) としてマークされた [Version] (バージョン) を選択します。

    2. [クラスター上のこのアドオンで既存の設定を上書きする] を選択すると、既存のアドオンでの任意の設定が、Amazon EKS アドオンの設定により上書きされます。このオプションを有効にしない状態で Amazon EKS アドオンを更新する際に、そのアドオンの設定のいずれかが現在の設定と競合している場合は、その更新は失敗します。この場合、競合を解決するためのエラーメッセージが表示されます。このオプションを選択する前に、自分で管理する必要のある設定が、Amazon EKS アドオンにより管理されていないことを確認してください。Amazon EKS アドオン設定管理の詳細については、「Amazon EKS アドオンの設定」を参照してください。

    3. [Update] (更新) を選択します。

AWS CLI

AWS CLI を使用して kube-proxy Amazon EKS アドオンを更新する方法

  1. kube-proxy Amazon EKS アドオンの現在のバージョンを確認します。my-cluster をクラスター名に置き換えます。

    aws eks describe-addon --cluster-name my-cluster --addon-name kube-proxy --query "addon.addonVersion" --output text

    出力例を次に示します。

    v1.22.11-eksbuild.2
  2. クラスターのバージョンで使用できる kube-proxy アドオンのバージョンを確認します。1.23 を、自分のクラスターのバージョンに置き換えます。

    aws eks describe-addon-versions --addon-name kube-proxy --kubernetes-version 1.23 \ --query "addons[].addonVersions[].[addonVersion, compatibilities[].defaultVersion]" --output text

    出力例を次に示します。

    v1.23.7-minimal-eksbuild.1 False v1.22.11-eksbuild.2 True ...

    True が下に表示されているバージョンは、指定した Kubernetes バージョンの新しいクラスターでデプロイされたデフォルトのバージョンです。

  3. アドオンを、前のステップで出力の返された最新バージョンに更新します。

    aws eks update-addon --cluster-name my-cluster --addon-name kube-proxy --addon-version v1.23.7-minimal-eksbuild.1 --resolve-conflicts OVERWRITE

    --resolve-conflicts OVERWRITE オプションを削除した状態で Amazon EKS アドオンを更新する際に、そのアドオンの設定のいずれかが現状の設定と競合している場合その更新は失敗します。この場合、競合を解決するためのエラーメッセージが表示されます。このオプションを指定する前に、自分が管理する必要がある設定を Amazon EKS アドオンが管理していないことを確認してください。これらの設定は、このオプションの指定により上書きされます。Amazon EKS アドオン設定管理の詳細については、「Amazon EKS アドオンの設定」を参照してください。

kube-proxy Amazon EKS アドオンの削除

Amazon EKS アドオンを削除する場合、次の 2 つのオプションがあります。

  • クラスター上のアドオンのソフトウェアを保持する — このオプションでは、Amazon EKS の設定管理が削除され、Amazon EKS が更新を通知し、更新を開始すると Amazon EKS アドオンが自動的に更新されますが、アドオンのソフトウェアはクラスター上に保持されます。このオプションを選択すると、Amazon EKS アドオンではなく、セルフマネージド型アドオンになります。アドオンではダウンタイムはありません。

  • クラスターからアドオンソフトウェアを完全に削除する — クラスターから Amazon EKS アドオンを削除するのは、アドオンが提供する機能に依存するリソースがクラスター上にない場合のみとしてください。Amazon EKS アドオンは、削除した後でも必要に応じて再度追加することができます。

アドオンに IAM アカウントが関連付けられている場合、その IAM アカウントは削除されません。

eksctl、AWS Management Console、または AWS CLI を使用して、クラスターから kube-proxy Amazon EKS アドオンを削除できます。

eksctl

eksctl を使用して kube-proxy Amazon EKS アドオンを削除する

my-cluster を自分のクラスター名に置き換えた上で、次のコマンドを実行します。--preserve を削除することにより、アドオンがクラスターから削除されます。

eksctl delete addon --cluster my-cluster --name kube-proxy --preserve
AWS Management Console

AWS Management Console を使用して kube-proxy Amazon EKS アドオンを削除する方法

  1. Amazon EKS コンソール (https://console.aws.amazon.com/eks/home#/clusters) を開きます。

  2. 左のナビゲーションペインで、[Clusters] (クラスター) を選択した後、kube-proxy Amazon EKS アドオンを削除するクラスター名を選択します。

  3. [アドオン] タブを選択します。

  4. kube-proxy ボックス右上にあるボックスをクリックし、[Remove (削除)] を選択します。kube-proxy と入力し、[Remove (削除)] を選択します。

AWS CLI

AWS CLI を使用して kube-proxy Amazon EKS アドオンを削除する方法

my-cluster を自分のクラスター名に置き換えた上で、次のコマンドを実行します。--preserve を削除することにより、アドオンがクラスターから削除されます。

aws eks delete-addon --cluster-name my-cluster --addon-name kube-proxy --preserve

kube-proxy のセルフマネージド型アドオンを更新する

kube-proxy Amazon EKS アドオンを追加していないクラスターがある場合は、以下のステップを実行して、セルフマネージドアドオンを更新します。kube-proxy Amazon EKS アドオンを追加した場合は、代わりに kube-proxy Amazon EKS アドオンの更新 で手順を完了してください。

重要

クラスターとノードを新しい Kubernetes マイナーバージョンに更新してから、更新したクラスターのマイナーバージョンと同じマイナーバージョンに kube-proxy を更新します。

kubectl を使用してkube-proxy のセルフマネージド型アドオンを更新する

  1. kube-proxy デプロイの現在のバージョンを確認します。

    kubectl get daemonset kube-proxy --namespace kube-system -o=jsonpath='{$.spec.template.spec.containers[:1].image}'

    出力例を次に示します。

    602401143452.dkr.ecr.region-code.amazonaws.com/eks/kube-proxy:v1.22.11-eksbuild.2
  2. 602401143452region-code を出力された値に置き換えて、kube-proxy アドオンを更新します。1.22.11-eksbuild.2 を、使用しているクラスターバージョン用に、Amazon EKS クラスターの各バージョンのテーブルで使用可能な最新の kube-proxy バージョンに記載されている kube-proxy バージョンに置き換えます。デフォルトまたは最小のイメージタイプのバージョン番号を指定できます。

    kubectl set image daemonset.apps/kube-proxy -n kube-system kube-proxy=602401143452.dkr.ecr.region-code.amazonaws.com/eks/kube-proxy:v1.23.7-minimal-eksbuild.1
  3. 同じクラスターで x86 ノードと Arm ノードを使用しており、クラスターが 2020 年 8 月 17 日より前にデプロイされている場合。以下のコマンドにより kube-proxy マニフェストを編集して、複数のハードウェアアーキテクチャにノードセレクターを含めます。このオペレーションを行うのは 1 回限りです。マニフェストにセレクタを追加した後は、更新するたびに追加を行う必要はありません。クラスターが 2020 年 8 月 17 日以降にデプロイされている場合、kube-proxy は既にマルチアーキテクチャに対応しています。

    kubectl edit -n kube-system daemonset/kube-proxy

    エディタを使用して、次のノードセレクターをファイルに追加し、その内容を保存します。エディタ上で、このテキストを挿入する場所の例については、「GitHub」の CNI マニフェストファイル をご覧ください。これにより、Kubernetes はノードのハードウェアアーキテクチャに基づいて、正しいハードウェアイメージを取得できるようになります。

    - key: "kubernetes.io/arch" operator: In values: - amd64 - arm64
  4. クラスターが最初に Kubernetes バージョン 1.14 以降で作成されている場合は、kube-proxy には既にこの Affinity Rule が含まれているため、このステップはスキップできます。最初に Kubernetes バージョン 1.13 以前のバージョンで Amazon EKS クラスターを作成し、Fargate ノードを使用する予定がある場合は、kube-proxy マニフェストを編集し、NodeAffinity ルールを含め、Fargate ノードで kube-proxy pods がスケジュールしないようにします。この編集を行うのは 1 回限りです。Affinity Rule をマニフェストに一度追加した後は、クラスターをアップグレードするたびに追加を行う必要はありません。kube-proxy DaemonSet を編集します。

    kubectl edit -n kube-system daemonset/kube-proxy

    エディタで、次の Affinity Rule をファイルの DaemonSet spec セクションに追加した後、変更内容を保存します。エディタ上で、このテキストを挿入する場所の例については、「GitHub」の CNI マニフェストファイル をご覧ください。

    - key: eks.amazonaws.com/compute-type operator: NotIn values: - fargate