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

kube-proxy アドオンの管理

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

  • デフォルト値 — 新しいクラスターでデフォルトでデプロイされるバージョンです。Amazon EKS アドオンでは、これが唯一のバージョンです。

  • 最小限 — デフォルトバージョンとは異なり、このイメージバージョンは、最小ベースイメージは、最小限のパッケージを含み、シェルを持たない Amazon EKS Distro によって維持されています。詳細については、「Amazon EKS Distro」を参照してください。このバージョンは、Amazon EKS アドオンとして提供されていますが、Amazon EKS アドオンとしては提供されていません。このバージョンのインストールを選択した場合は、kube-proxy のセルフマネージド型アドオンを更新する のステップ 2 を完了し、このバージョンを指定します。

Amazon EKS がサポートするクラスターバージョンごとにデプロイされた kube-proxy イメージバージョン
Kubernetes バージョン 1.21 1.20 1.19 1.18 1.17 1.16
kube-proxy (デフォルトバージョン) 1.21.2-eksbuild.2 1.20.4-eksbuild.2 1.19.6-eksbuild.2 1.18.8-eksbuild.1 1.17.9-eksbuild.1 1.16.13-eksbuild.1
kube-proxy (最小限) 1.21.2-minimal-eksbuild.1 1.20.7-minimal-eksbuild.1 1.19.13-minimal eksbuild.1 1.18.20-minimal eksbuild.1 1.17.17-minimal-eksbuild.1 1.16.15-minimal eksbuild.1

kube-proxy Amazon EKS アドオンを追加していない 1.18 以降のクラスターがある場合は、kube-proxy Amazon EKS アドオンの追加 の手順を使用して追加できます。AWS Management Console を使用して 2021 年 5 月 3 日以降に 1.18 以降のクラスターを作成した場合、 kube-proxy Amazon EKS アドオンはクラスターにすでに追加されています。他のツールを使用して 1.18 以降のクラスターを作成し、kube-proxy Amazon EKS アドオンを使用する場合は、自分でクラスターに追加する必要があります。

1.18 以降のクラスターに kube-proxy Amazon EKS アドオンを追加した場合は、「kube-proxy Amazon EKS アドオンの更新」、「kube-proxy Amazon EKS アドオンの削除」に示される手順で管理できます。Amazon EKS アドオンの詳細については、「Amazon EKS アドオン」を参照してください。

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

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

kube-proxy Amazon EKS アドオンをクラスターに追加するために使用するツールの名前が付いているタブを選択します。

重要

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

eksctl

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

my-cluster (<>を含む) をクラスター名に置き換えた後、次のコマンドを実行します。

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. https://console.aws.amazon.com/eks/home#/clusters で Amazon EKS コンソールを開きます。

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

  3. [Configuration (設定)] タブ、[Add-ons (アドオン)] タブの順に選択します。

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

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

    2. 使用する [Version (バージョン)] を選択します。

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

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

AWS CLI

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

my-cluster (<>を含む) をクラスター名に置き換えた後、次のコマンドを実行します。

aws eks create-addon \ --cluster-name my-cluster \ --addon-name kube-proxy \ --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.19.6-eksbuild.2 ACTIVE 0 v1.20.4-eksbuild.2
  2. アドオンを、前のステップの出力で UPDATE AVAILABLE の下に表示されたバージョンに更新します。

    eksctl update addon \ --name kube-proxy \ --version <v1.20.4-eksbuild.2> \ --cluster <my-cluster> \ --force

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

AWS Management Console

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

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

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

  3. [Configuration (設定)] タブ、[Add-ons (アドオン)] タブの順に選択します。

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

    1. [Version (バージョン)] で、使用したい Amazon EKS アドオンのバージョンを選択します。

    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.19.6-eksbuild.2
  2. クラスターのバージョンで使用できる kube-proxy アドオンのバージョンを確認します。

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

    出力

    v1.20.4-eksbuild.2 True v1.19.6-eksbuild.2 False v1.18.8-eksbuild.1 False

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

  3. アドオンを、前のステップの出力で True として返されたバージョンに更新します。出力に返されたバージョンであれば、さらに新しいにものに更新することもできます。

    aws eks update-addon \ --cluster-name my-cluster \ --addon-name kube-proxy \ --addon-version v1.20.4-eksbuild.2 \ --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 アカウントは削除されません。

kube-proxy Amazon EKS アドオンを、1.18 以降のクラスターから削除するために使用するツールの名前が付いたタブを選択します。

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. https://console.aws.amazon.com/eks/home#/clusters で Amazon EKS コンソールを開きます。

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

  3. [Configuration (設定)] タブ、[Add-ons (アドオン)] タブの順に選択します。

  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 のセルフマネージド型アドオンを更新する

1.17 以前のクラスターまたは 1.18 以降のクラスターで 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.us-west-2.amazonaws.com/eks/kube-proxy:v1.20.4-eksbuild.2
  2. 602401143452us-west-2、 を出力された値に置き換え、kube-proxy アドオンを更新します。1.21.2-eksbuild.2 を、Amazon EKS でサポートされる各クラスターバージョンごとにデプロイされた kube-proxy バージョン表にある、自分のクラスターの kube-proxy バージョンに置き換えます。

    kubectl set image daemonset.apps/kube-proxy \ -n kube-system \ kube-proxy=602401143452.dkr.ecr.us-west-2.amazonaws.com/eks/kube-proxy:v1.21.2-eksbuild.2
  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: "beta.kubernetes.io/arch" operator: In values: - amd64 - arm64
  4. (オプション) クラスターが、最初に Kubernetes v1.14 以降で作成されている場合は、既に kube-proxy にはこの Affinity Rule が含まれているため、このステップはスキップできます。最初に Kubernetes バージョン 1.13 以前のバージョンで Amazon EKS クラスターを作成し、Fargate ノードを使用する予定がある場合には、kube-proxy マニフェストを編集し NodeAffinity ルールを含め、 Fargate ノードで kube-proxy ポッドがスケジュールしないようにします。この編集を行うのは 1 回限りです。Affinity Rule をマニフェストに一度追加した後は、クラスターをアップグレードするたびに追加を行う必要はありません。kube-proxy デーモンセットを編集します。

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

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

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