既存のセルフマネージド型ノードグループの更新 - Amazon EKS

既存のセルフマネージド型ノードグループの更新

このトピックは、新しい AMI を使用して既存の AWS CloudFormation セルフマネージド型ノードスタックを更新するのに役立ちます。この手順を使用して、クラスターの更新後にノードを新しいバージョンの Kubernetes に更新するか、Kubernetes の既存バージョン用の最新の Amazon EKS 最適化 AMI に更新することができます。

重要

このトピックでは、セルフマネージド型ノードのノードの更新について説明します。マネージド型ノードグループ を使用している場合は、「マネージド型ノードグループの更新」を参照してください。

最新のデフォルトの Amazon EKS ノード AWS CloudFormation テンプレートは、古い AMI を一度に 1 つずつ削除する前に、新しい AMI を使用してインスタンスをクラスターに起動するように設定されています。この設定により、ローリング更新中にクラスター内で Auto Scaling グループのアクティブなインスタンスが必要数確保されるようになります。

注記

この方法は、eksctl を使用して作成されたノードグループではサポートされていません。eksctl を使用してクラスターまたはノードグループを作成した場合は、「新しいノードグループへの移行」を参照してください。

既存のノードグループを更新するには

  1. クラスターの DNS プロバイダーを決定します。

    kubectl get deployments -l k8s-app=kube-dns -n kube-system

    出力 (このクラスターでは、DNS 解決に coredns を使用していますが、クラスターからは kube-dns が返される場合があります)。

    NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE <coredns> 1 1 1 1 31m
  2. 現在のデプロイで実行しているレプリカが 2 つ未満の場合は、そのデプロイを 2 つのレプリカにスケールアウトします。前のコマンドで、その出力が返された場合は、corednskube-dns に置き換えます。

    kubectl scale deployments/<coredns> --replicas=2 -n kube-system
  3. (オプション) Kubernetes Cluster Autoscaler を使用している場合は、スケーリングアクションの競合を回避するために、デプロイを 0 にスケールダウンします。

    kubectl scale deployments/cluster-autoscaler --replicas=0 -n kube-system
  4. 現在のノードグループのインスタンスタイプと必要なインスタンス数を決定します。グループの AWS CloudFormation テンプレートを更新する場合は、後でこれらの値を入力します。

    1. Amazon EC2 コンソール (https://console.aws.amazon.com/ec2/) を開きます。

    2. 左ナビゲーションの [起動設定] を選択し、既存のノードの起動設定のインスタンスタイプを書き留めます。

    3. 左ナビゲーションの [Auto Scaling グループ] を選択し、既存の Auto Scaling グループ のノードの、インスタンスの 必要数 を書き留めます。

  5. https://console.aws.amazon.com/cloudformation で AWS CloudFormation コンソール を開きます。

  6. ノードグループスタックを選択し、[更新] を選択します。

  7. [Replace current template (現在のテンプレートを置き換える)] を選択し、[Amazon S3 URL] を選択します。

  8. Amazon S3 URL で、ノードの AWS CloudFormation テンプレートの最新バージョンを使用していることを確認するために以下の URL をテキストエリアに貼り付けたら、[次へ] を選択します。

    https://amazon-eks.s3.us-west-2.amazonaws.com/cloudformation/2020-10-29/amazon-eks-nodegroup.yaml
  9. [Specify stack details (スタックの詳細の指定)] ページで、以下のパラメータを指定し、[次へ] を選択します。

    • [NodeAutoScalingGroupDesiredCapacity] 前のステップ で記録した必要なインスタンス数を入力するか、スタックの更新時にスケーリングする新しい必要ノード数を入力します。

    • [NodeAutoScalingGroupMaxSize]: ノードの Auto Scaling グループがスケールアウトする最大ノード数を入力します。更新時にノード数を減らさずにノードのローリング更新を実行できるように、この値は、必要なキャパシティーよりも 1 ノード多くする必要があります。

    • [NodeInstanceType]: 前のステップ で記録したインスタンスタイプを選択するか、別のインスタンスタイプをノード用に選択します。各 Amazon EC2 インスタンスタイプは最大数の Elastic Network Interface (ENI) をサポートし、各 ENI は最大数の IP アドレスをサポートします。ワーカーノードとポッドには、それぞれ IP アドレスが割り当てられているため、各ワーカーノードで実行させたいポッドの最大数をサポートするインスタンスタイプを選択することが重要です。インスタンスタイプごとにサポートされる ENI と IP アドレスのリストについては、「各インスタンスタイプのネットワークインターフェイスごとの IP アドレス」を参照してください。例えば、m5.large インスタンスタイプは、ワーカーノードとポッドに対して最大 30 の IP アドレスをサポートします。リージョンによっては利用できないインスタンスタイプがあります。

      注記

      最新バージョンの Amazon VPC CNI Plugin for Kubernetes でサポートされているインスタンスタイプをこちらに示します。サポートされている最新のインスタンスタイプを利用するには、CNI のバージョンを更新する必要があります。詳細については、「Amazon VPC CNI のセルフマネージド型アドオンを更新する」を参照してください。

      重要

      リージョンによっては利用できないインスタンスタイプがあります。

    • [NodeImageIdSSMParam]: 更新する AMI ID の Amazon EC2 Systems Manager パラメータです。次の値では、最新の Amazon EKS 最適化 AMI for Kubernetes バージョン 1.21 が使用されています。

      /aws/service/eks/optimized-ami/<1.21>/<amazon-linux-2>/recommended/image_id

      <1.21> (<> を含む) は、サポートされる Kubernetes バージョンと同じバージョンか、コントロールプレーン上で実行されているよりも 1 つ前のバージョンに置き換えることができます。ノードは、コントロールプレーンと同じバージョンにしておくことをお勧めします。Amazon EKS 最適化 高速 AMI を使用する場合は、<amazon-linux-2><amazon-linux-2-gpu> に置き換えます。

      注記

      Amazon EC2 Systems Manager パラメータを使用すると、AMI ID を検索して指定することなく、後でノードを更新できます。AWS CloudFormation スタックがこの値を使用している場合、テンプレートの値を変更しない場合でも、スタックの更新によって常に、指定された Kubernetes バージョンで推奨される最新の Amazon EKS 最適化 AMI が起動されます。

    • NodeImageId - 独自のカスタム AMI を使用するには、使用する AMI の ID を入力します。

      重要

      この値は、NodeImageIdSSMParam に指定されたすべての値を上書きします。NodeImageIdSSMParam 値を使用する場合は、 NodeImageId の値が空白であることを確認します。

    • [DisableIMDSv1]: 各ノードは、デフォルトでインスタンスメタデータサービスバージョン 1 (IMDSv1) および IMDSv2 をサポートしますが、IMDSv1 を無効にできます。ノードグループ内のノードや、ノードグループ内のノードでスケジュールされたポッドで IMDSv1 を使用しない場合は、[true] を選択します。IDMS の詳細については、「インスタンスメタデータサービスの設定」を参照してください。サービスアカウントの IAM ロールを実装しており、AWS サービスへのアクセスを必要とするすべてのポッドに、必要なアクセス許可を直接割り当てていて、クラスター内のポッドが現在のリージョンを取得するなどの理由から IMDS へのアクセス許可を必要としない場合は、ホストネットワークを使用しないポッドによる IDMSv2 へのアクセスも、無効にすることができます。詳細については、「IMDS および Amazon EC2 インスタンスプロファイルの認証情報に対するアクセスの制限」を参照してください。

  10. (オプション) [オプション] ページで、スタックリソースをタグ付けします。[Next] を選択します。

  11. [確認] ページで情報を確認し、スタックで IAM リソースを作成することを承認して、[スタックの更新] を選択します。

    注記

    クラスター内の各ノードの更新には数分かかります。すべてのノードの更新が完了するのを待ってから、次の手順を実行します。

  12. クラスターの DNS プロバイダーは kube-dns の場合は、kube-dns デプロイを 1 レプリカにスケールインします。

    kubectl scale deployments/kube-dns --replicas=1 -n kube-system
  13. (オプション) Kubernetes Cluster Autoscaler を使用している場合は、デプロイのスケーリングを目的のレプリカ数に戻します。

    kubectl scale deployments/cluster-autoscaler --replicas=<1> -n kube-system
  14. (オプション) 最新バージョンの Amazon VPC CNI Plugin for Kubernetes を使用していることを確認します。サポートされている最新のインスタンスタイプを利用するには、CNI のバージョンを更新する必要があります。詳細については、「Amazon VPC CNI のセルフマネージド型アドオンを更新する」を参照してください。