Amazon EKS
ユーザーガイド

Amazon EKS クラスターの Kubernetes バージョンの更新

新しい Kubernetes バージョンが Amazon EKS で利用できるようになると、クラスターを最新バージョンに更新することができます。新しいバージョンの Kubernetes では大幅な変更が加えられているため、本稼働用クラスターで更新を実行する前に、新しいバージョンの Kubernetes に対してアプリケーションの動作をテストすることをお勧めします。そのためには、継続的な統合ワークフローを作成し、新しい Kubernetes バージョンに移行する前にアプリケーションの動作をエンドツーエンドでテストします。

更新プロセスは、更新された Kubernetes バージョンで新しい API サーバーを起動して既存のバージョンを置き換える Amazon EKS で構成されます。Amazon EKS は、これらの新しいノードでネットワークトラフィックの標準インフラストラクチャと準備状況のヘルスチェックを実行し、予期どおりに動作していることを確認します。これらのヘルスチェックが失敗すると、Amazon EKS はインフラストラクチャのデプロイを元に戻します。クラスターは前の Kubernetes バージョンのままになります。実行中のアプリケーションは影響を受けません。また、クラスターが非決定的または回復不可能な状態のままになることはありません。Amazon EKS は定期的にすべてのマネージド型クラスターをバックアップします。また、必要に応じてクラスターを復元するメカニズムが存在します。Kubernetes インフラストラクチャの管理プロセスは、継続的に評価、改善されています。

クラスターをアップグレードするためには、クラスターの作成時に指定したサブネットから、2~3 の空き IP アドレスが Amazon EKS に必要です。これらのサブネットに使用可能な IP アドレスがない場合、アップグレードが失敗することがあります。さらに、クラスターの作成時に指定されたいずれかのサブネットやセキュリティグループが削除された場合、クラスターのアップグレードが失敗することがあります。

注記

Amazon EKS は可用性の高いコントロールプレーンが実行されますが、更新時にサービスが短時間中断することがあります。たとえば、終了直前または終了直後に新しいバージョンの Kubernetes を実行している新しい API サーバーに接続しようとすると、API コールエラーや接続の問題が発生する可能性があります。この場合は、成功するまで API オペレーションを繰り返し実行します。

Amazon EKS は、クラスターの更新時に Kubernetes アドオンを変更しません。クラスターの更新後、更新後の新しいバージョンの Kubernetes 用に、アドオンを次の表に記載のバージョンに更新することをお勧めします (これを達成するためのステップは、更新手順に含まれています)。

Kubernetes バージョン 1.14 1.13 1.12 1.11
Amazon VPC CNI プラグイン 使用可能な最新の CNI バージョン (1.5.4) を推奨
DNS CoreDNS 1.3.1 CoreDNS 1.2.6 CoreDNS 1.2.2 CoreDNS 1.1.3
KubeProxy 1.14.6 1.13.10 1.12.6 1.11.8

重要

Amazon EKS will deprecate Kubernetes version 1.11 on 2019 年 11 月 4 日. On this day, you will no longer be able to create new 1.11 clusters, and all Amazon EKS clusters running Kubernetes version 1.11 will be updated to the latest available platform version of Kubernetes version 1.12. For more information, see Amazon EKS バージョンの廃止.

Kubernetes バージョン 1.10 は Amazon EKS でサポートされなくなりました。新しい 1.10 クラスターを作成することはできなくなりました。Kubernetes バージョン 1.10 を実行しているすべての既存の Amazon EKS クラスターは、Kubernetes バージョン 1.11 を利用可能な最新のプラットフォームバージョンに最終的に自動的に更新されます。詳細については、「Amazon EKS バージョンの廃止」を参照してください。

サービスの中断を防ぐため、1.10 クラスターはバージョン 1.11 以降に更新してください。詳細については、「Amazon EKS クラスターの Kubernetes バージョンの更新」を参照してください。

上記の表に記載されていない追加のアドオンをクラスターに使用する場合は、クラスターの更新後にそれらを最新の互換バージョンに更新します。

以下から必要なクラスター更新方法に対応するタブを選択します。

eksctlAWS マネジメントコンソールAWS CLI
eksctl

eksctl を使用して既存のクラスターを更新するには

この手順では、eksctl をインストール済みで、お使いの eksctl バージョンが 0.5.1 以上であることを前提としています。 お使いのバージョンは、以下のコマンドを使用して確認できます。

eksctl version

eksctl のインストールまたはアップグレードの詳細については、eksctl のインストールまたはアップグレード を参照してください。

注記

この手順は、eksctl で作成されたクラスターに対してのみ機能します。

  1. Kubernetes バージョンの クラスターコントロールプレーンと Kubernetes バージョンのワーカーノードを比較します。

    • 次のコマンドで、Kubernetes バージョンのクラスターコントロールプレーンを取得します。

      kubectl version --short
    • 次のコマンドで、Kubernetes バージョンのワーカーノードを取得します。

      kubectl get nodes

    ワーカーノードがコントロールプレーンよりも古い複数の Kubernetes マイナーバージョンの場合は、クラスターの Kubernetes バージョンを更新する前に、ワーカーノードを新しい Kubernetes マイナーバージョンにアップグレードする必要があります。詳細については、Kubernetes ドキュメントの「Kubernetes のバージョンおよびバージョンスキューのサポートポリシー」を参照してください。

    クラスターを更新する前に、ワーカーノードをクラスターの現在の更新前の Kubernetes マイナーバージョンに更新することをお勧めします。コントロールプレーンより新しい Kubernetes バージョンをワーカーノードで実行しないでください。たとえば、コントロールプレーンでバージョン 1.13 を実行し、ワーカーでバージョン 1.11 を実行している場合は、クラスターの Kubernetes バージョンを 1.14 に更新する前に、ワーカーノードをバージョン 1.12 または 1.13 (推奨) に更新します。詳細については、「ワーカーノードの更新」を参照してください。

  2. 以下のコマンドを使用して、Amazon EKS クラスターの Kubernetes バージョンを更新します。赤いテキストは実際のクラスター名に置き換えてください。

    eksctl update cluster --name dev --approve

    このプロセスが完了するまでに数分かかります。

  3. クラスターの現在の Kubernetes バージョン (この例では 1.14.6) に対応するイメージを使用するには、kube-proxy デーモンセットにパッチを適用します。

    Kubernetes バージョン 1.14 1.13 1.12 1.11
    KubeProxy 1.14.6 1.13.10 1.12.6 1.11.8
    kubectl set image daemonset.apps/kube-proxy \ -n kube-system \ kube-proxy=602401143452.dkr.ecr.us-west-2.amazonaws.com/eks/kube-proxy:v1.14.6
  4. クラスターの DNS プロバイダーを確認します。Kubernetes バージョン 1.10 で作成されたクラスターは、デフォルトの DNS およびサービス検出プロバイダーとして kube-dns に付属していました。1.10 クラスターをそれ以降のバージョンに更新し、DNS とサービス検出に CoreDNS を使用する場合は、CoreDNS をインストールして、kube-dns を削除する必要があります。

    クラスターですでに CoreDNS が実行されているかどうかを確認するには、次のコマンドを使用します。

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

    出力のポッド名に coredns と示されている場合、CoreDNS はすでにクラスターで実行されています。それ以外の場合は、以下のコマンドを実行して coredns をインストールします。赤いテキストは実際のクラスター名に置き換えてください。

    eksctl utils install-coredns --name dev --approve
  5. クラスターの coredns デプロイの現在のバージョンを確認します。

    kubectl describe deployment coredns --namespace kube-system | grep Image | cut -d "/" -f 3

    対応する Kubernetes バージョンに対して推奨される coredns のバージョンは以下のとおりです。

    • Kubernetes 1.14: 1.3.1

    • Kubernetes 1.13: 1.2.6

    • Kubernetes 1.12: 1.2.2

    • Kubernetes 1.11: 1.1.3

    現在の coredns バージョンがクラスターの推奨バージョンと一致しない場合は、coredns デプロイメントを更新して、推奨イメージを使用します。

    kubectl set image --namespace kube-system deployment.apps/coredns \ coredns=602401143452.dkr.ecr.us-west-2.amazonaws.com/eks/coredns:v1.3.1
  6. クラスターの Amazon VPC CNI Plugin for Kubernetes のバージョンを確認します。次のコマンドを使用して、クラスターの CNI バージョンを出力します。

    kubectl describe daemonset aws-node --namespace kube-system | grep Image | cut -d "/" -f 2

    出力:

    amazon-k8s-cni:1.5.3

    CNI バージョンが 1.5.4 より前のバージョンである場合は、以下のコマンドを使用して、CNI バージョンを最新バージョンにアップグレードします。

    • Kubernetes 1.10 クラスターの場合:

      kubectl apply -f https://raw.githubusercontent.com/aws/amazon-vpc-cni-k8s/release-1.5/config/v1.5/aws-k8s-cni-1.10.yaml
    • その他のすべての Kubernetes のバージョンの場合:

      kubectl apply -f https://raw.githubusercontent.com/aws/amazon-vpc-cni-k8s/release-1.5/config/v1.5/aws-k8s-cni.yaml
  7. (GPU ワーカーを含むクラスターのみ) クラスターに GPU 対応のワーカーノードグループ (p3.2xlarge など) がある場合は、以下のコマンドを使用してクラスターの NVIDIA device plugin for Kubernetes デーモンセットを更新する必要があります。

    kubectl apply -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/1.0.0-beta/nvidia-device-plugin.yml
  8. クラスターの更新が完了したら、同じ Kubernetes バージョンの更新したクラスターにワーカーノードを更新する必要があります。詳細については、「ワーカーノードの更新」を参照してください。

AWS マネジメントコンソール

コンソールを使用して既存のクラスターを更新するには

  1. Kubernetes バージョンの クラスターコントロールプレーンと Kubernetes バージョンのワーカーノードを比較します。

    • 次のコマンドで、Kubernetes バージョンのクラスターコントロールプレーンを取得します。

      kubectl version --short
    • 次のコマンドで、Kubernetes バージョンのワーカーノードを取得します。

      kubectl get nodes

    ワーカーノードがコントロールプレーンよりも古い複数の Kubernetes マイナーバージョンの場合は、クラスターの Kubernetes バージョンを更新する前に、ワーカーノードを新しい Kubernetes マイナーバージョンにアップグレードする必要があります。詳細については、Kubernetes ドキュメントの「Kubernetes のバージョンおよびバージョンスキューのサポートポリシー」を参照してください。

    クラスターを更新する前に、ワーカーノードをクラスターの現在の更新前の Kubernetes マイナーバージョンに更新することをお勧めします。コントロールプレーンより新しい Kubernetes バージョンをワーカーノードで実行しないでください。たとえば、コントロールプレーンでバージョン 1.13 を実行し、ワーカーでバージョン 1.11 を実行している場合は、クラスターの Kubernetes バージョンを 1.14 に更新する前に、ワーカーノードをバージョン 1.12 または 1.13 (推奨) に更新します。詳細については、「ワーカーノードの更新」を参照してください。

  2. Open the Amazon EKS console at https://console.aws.amazon.com/eks/home#/clusters.

  3. 更新するクラスターの名前を選択し、[Update cluster version (クラスターバージョンの更新)] を選択します。

  4. [Kubernetes version] で、バージョンを選択してクラスターを更新し、[更新] を選択します。

    重要

    Amazon EKS will deprecate Kubernetes version 1.11 on 2019 年 11 月 4 日. On this day, you will no longer be able to create new 1.11 clusters, and all Amazon EKS clusters running Kubernetes version 1.11 will be updated to the latest available platform version of Kubernetes version 1.12. For more information, see Amazon EKS バージョンの廃止.

    Kubernetes バージョン 1.10 は Amazon EKS でサポートされなくなりました。新しい 1.10 クラスターを作成することはできなくなりました。Kubernetes バージョン 1.10 を実行しているすべての既存の Amazon EKS クラスターは、Kubernetes バージョン 1.11 を利用可能な最新のプラットフォームバージョンに最終的に自動的に更新されます。詳細については、「Amazon EKS バージョンの廃止」を参照してください。

    サービスの中断を防ぐため、1.10 クラスターはバージョン 1.11 以降に更新してください。詳細については、「Amazon EKS クラスターの Kubernetes バージョンの更新」を参照してください。

    重要

    Amazon EKS は可用性の高いコントロールプレーンを実行しているため、一度に更新できるマイナーバージョンは 1 つのみです。この背後にある論理的根拠については、「Kubernetes Version and Version Skew Support Policy (Kubernetes のバージョンおよびバージョンスキューのサポートポリシー)」を参照してください。したがって、現在のバージョンが 1.12 で、1.14 にアップグレードする場合は、最初にクラスターを 1.13 にアップグレードし、その後 1.13 から 1.14 にアップグレードする必要があります。1.12 から 1.14 に直接アップデートしようとすると、バージョン更新コマンドからエラーがスローされます。

  5. [クラスター名] にクラスターの名前を入力し、[確認] を選択します。

    注記

    クラスターの更新は、数分で終了します。

  6. クラスターの現在の Kubernetes バージョン (この例では 1.14.6) に対応するイメージを使用するには、kube-proxy デーモンセットにパッチを適用します。

    Kubernetes バージョン 1.14 1.13 1.12 1.11
    KubeProxy 1.14.6 1.13.10 1.12.6 1.11.8
    kubectl set image daemonset.apps/kube-proxy \ -n kube-system \ kube-proxy=602401143452.dkr.ecr.us-west-2.amazonaws.com/eks/kube-proxy:v1.14.6
  7. クラスターの DNS プロバイダーを確認します。Kubernetes バージョン 1.10 で作成されたクラスターは、デフォルトの DNS およびサービス検出プロバイダーとして kube-dns に付属していました。1.10 クラスターをそれ以降のバージョンに更新し、DNS とサービス検出に CoreDNS を使用する場合は、CoreDNS をインストールして、kube-dns を削除する必要があります。

    クラスターですでに CoreDNS が実行されているかどうかを確認するには、次のコマンドを使用します。

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

    出力のポッド名に coredns と示されている場合、CoreDNS はすでにクラスターで実行されています。それ以外の場合は、CoreDNS のインストールを参照して、クラスターに CoreDNS をインストールしてから、この手順に戻ります。

  8. クラスターの coredns デプロイの現在のバージョンを確認します。

    kubectl describe deployment coredns --namespace kube-system | grep Image | cut -d "/" -f 3

    対応する Kubernetes バージョンに対して推奨される coredns のバージョンは以下のとおりです。

    • Kubernetes 1.14: 1.3.1

    • Kubernetes 1.13: 1.2.6

    • Kubernetes 1.12: 1.2.2

    • Kubernetes 1.11: 1.1.3

    現在の coredns バージョンがクラスターの推奨バージョンと一致しない場合は、coredns デプロイメントを更新して、推奨イメージを使用します。

    kubectl set image --namespace kube-system deployment.apps/coredns \ coredns=602401143452.dkr.ecr.us-west-2.amazonaws.com/eks/coredns:v1.3.1
  9. クラスターの Amazon VPC CNI Plugin for Kubernetes のバージョンを確認します。次のコマンドを使用して、クラスターの CNI バージョンを出力します。

    kubectl describe daemonset aws-node --namespace kube-system | grep Image | cut -d "/" -f 2

    出力:

    amazon-k8s-cni:1.5.3

    CNI バージョンが 1.5.4 より前のバージョンである場合は、以下のコマンドを使用して、CNI バージョンを最新バージョンにアップグレードします。

    • Kubernetes 1.10 クラスターの場合:

      kubectl apply -f https://raw.githubusercontent.com/aws/amazon-vpc-cni-k8s/release-1.5/config/v1.5/aws-k8s-cni-1.10.yaml
    • その他のすべての Kubernetes のバージョンの場合:

      kubectl apply -f https://raw.githubusercontent.com/aws/amazon-vpc-cni-k8s/release-1.5/config/v1.5/aws-k8s-cni.yaml
  10. (GPU ワーカーを含むクラスターのみ) クラスターに GPU 対応のワーカーノードグループ (p3.2xlarge など) がある場合は、以下のコマンドを使用してクラスターの NVIDIA device plugin for Kubernetes デーモンセットを更新する必要があります。

    kubectl apply -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/1.0.0-beta/nvidia-device-plugin.yml
  11. クラスターの更新が完了したら、同じ Kubernetes バージョンの更新したクラスターにワーカーノードを更新する必要があります。詳細については、「ワーカーノードの更新」を参照してください。

AWS CLI

AWS CLI で既存のクラスターを更新するには

  1. Kubernetes バージョンの クラスターコントロールプレーンと Kubernetes バージョンのワーカーノードを比較します。

    • 次のコマンドで、Kubernetes バージョンのクラスターコントロールプレーンを取得します。

      kubectl version --short
    • 次のコマンドで、Kubernetes バージョンのワーカーノードを取得します。

      kubectl get nodes

    ワーカーノードがコントロールプレーンよりも古い複数の Kubernetes マイナーバージョンの場合は、クラスターの Kubernetes バージョンを更新する前に、ワーカーノードを新しい Kubernetes マイナーバージョンにアップグレードする必要があります。詳細については、Kubernetes ドキュメントの「Kubernetes のバージョンおよびバージョンスキューのサポートポリシー」を参照してください。

    クラスターを更新する前に、ワーカーノードをクラスターの現在の更新前の Kubernetes マイナーバージョンに更新することをお勧めします。コントロールプレーンより新しい Kubernetes バージョンをワーカーノードで実行しないでください。たとえば、コントロールプレーンでバージョン 1.13 を実行し、ワーカーでバージョン 1.11 を実行している場合は、クラスターの Kubernetes バージョンを 1.14 に更新する前に、ワーカーノードをバージョン 1.12 または 1.13 (推奨) に更新します。詳細については、「ワーカーノードの更新」を参照してください。

  2. 次の AWS CLI コマンドを使用して、クラスターを作成します。クラスター名と目的の Kubernetes マイナーバージョンを置き換えます。

    重要

    Amazon EKS will deprecate Kubernetes version 1.11 on 2019 年 11 月 4 日. On this day, you will no longer be able to create new 1.11 clusters, and all Amazon EKS clusters running Kubernetes version 1.11 will be updated to the latest available platform version of Kubernetes version 1.12. For more information, see Amazon EKS バージョンの廃止.

    Kubernetes バージョン 1.10 は Amazon EKS でサポートされなくなりました。新しい 1.10 クラスターを作成することはできなくなりました。Kubernetes バージョン 1.10 を実行しているすべての既存の Amazon EKS クラスターは、Kubernetes バージョン 1.11 を利用可能な最新のプラットフォームバージョンに最終的に自動的に更新されます。詳細については、「Amazon EKS バージョンの廃止」を参照してください。

    サービスの中断を防ぐため、1.10 クラスターはバージョン 1.11 以降に更新してください。詳細については、「Amazon EKS クラスターの Kubernetes バージョンの更新」を参照してください。

    重要

    Amazon EKS は可用性の高いコントロールプレーンを実行しているため、一度に更新できるマイナーバージョンは 1 つのみです。この背後にある論理的根拠については、「Kubernetes Version and Version Skew Support Policy (Kubernetes のバージョンおよびバージョンスキューのサポートポリシー)」を参照してください。したがって、現在のバージョンが 1.12 で、1.14 にアップグレードする場合は、最初にクラスターを 1.13 にアップグレードし、その後 1.13 から 1.14 にアップグレードする必要があります。1.12 から 1.14 に直接アップデートしようとすると、バージョン更新コマンドからエラーがスローされます。

    aws eks --region region update-cluster-version --name prod --kubernetes-version 1.14

    出力:

    { "update": { "id": "b5f0ba18-9a87-4450-b5a0-825e6e84496f", "status": "InProgress", "type": "VersionUpdate", "params": [ { "type": "Version", "value": "1.14" }, { "type": "PlatformVersion", "value": "eks.1" } ], "createdAt": 1544051347.305, "errors": [] } }
  3. 次のコマンドでクラスター更新のステータスをモニタリングします。その際、以前のコマンドで返されたクラスター名と更新 ID を使用します。ステータスが Successful となったら、更新は完了です。

    注記

    クラスターの更新は、数分で終了します。

    aws eks --region region describe-update --name prod --update-id b5f0ba18-9a87-4450-b5a0-825e6e84496f

    出力:

    { "update": { "id": "b5f0ba18-9a87-4450-b5a0-825e6e84496f", "status": "Successful", "type": "VersionUpdate", "params": [ { "type": "Version", "value": "1.14" }, { "type": "PlatformVersion", "value": "eks.1" } ], "createdAt": 1544051347.305, "errors": [] } }
  4. クラスターの現在の Kubernetes バージョン (この例では 1.14.6) に対応するイメージを使用するには、kube-proxy デーモンセットにパッチを適用します。

    Kubernetes バージョン 1.14 1.13 1.12 1.11
    KubeProxy 1.14.6 1.13.10 1.12.6 1.11.8
    kubectl set image daemonset.apps/kube-proxy \ -n kube-system \ kube-proxy=602401143452.dkr.ecr.us-west-2.amazonaws.com/eks/kube-proxy:v1.14.6
  5. クラスターの DNS プロバイダーを確認します。Kubernetes バージョン 1.10 で作成されたクラスターは、デフォルトの DNS およびサービス検出プロバイダーとして kube-dns に付属していました。1.10 クラスターをそれ以降のバージョンに更新し、DNS とサービス検出に CoreDNS を使用する場合は、CoreDNS をインストールして、kube-dns を削除する必要があります。

    クラスターですでに CoreDNS が実行されているかどうかを確認するには、次のコマンドを使用します。

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

    出力のポッド名に coredns と示されている場合、CoreDNS はすでにクラスターで実行されています。それ以外の場合は、CoreDNS のインストールを参照して、クラスターに CoreDNS をインストールしてから、この手順に戻ります。

  6. クラスターの coredns デプロイの現在のバージョンを確認します。

    kubectl describe deployment coredns --namespace kube-system | grep Image | cut -d "/" -f 3

    対応する Kubernetes バージョンに対して推奨される coredns のバージョンは以下のとおりです。

    • Kubernetes 1.14: 1.3.1

    • Kubernetes 1.13: 1.2.6

    • Kubernetes 1.12: 1.2.2

    • Kubernetes 1.11: 1.1.3

    現在の coredns バージョンがクラスターの推奨バージョンと一致しない場合は、coredns デプロイメントを更新して、推奨イメージを使用します。

    kubectl set image --namespace kube-system deployment.apps/coredns \ coredns=602401143452.dkr.ecr.us-west-2.amazonaws.com/eks/coredns:v1.3.1
  7. クラスターの Amazon VPC CNI Plugin for Kubernetes のバージョンを確認します。次のコマンドを使用して、クラスターの CNI バージョンを出力します。

    kubectl describe daemonset aws-node --namespace kube-system | grep Image | cut -d "/" -f 2

    出力:

    amazon-k8s-cni:1.5.3

    CNI バージョンが 1.5.4 より前のバージョンである場合は、以下のコマンドを使用して、CNI バージョンを最新バージョンにアップグレードします。

    • Kubernetes 1.10 クラスターの場合:

      kubectl apply -f https://raw.githubusercontent.com/aws/amazon-vpc-cni-k8s/release-1.5/config/v1.5/aws-k8s-cni-1.10.yaml
    • その他のすべての Kubernetes のバージョンの場合:

      kubectl apply -f https://raw.githubusercontent.com/aws/amazon-vpc-cni-k8s/release-1.5/config/v1.5/aws-k8s-cni.yaml
  8. (GPU ワーカーを含むクラスターのみ) クラスターに GPU 対応のワーカーノードグループ (p3.2xlarge など) がある場合は、以下のコマンドを使用してクラスターの NVIDIA device plugin for Kubernetes デーモンセットを更新する必要があります。

    kubectl apply -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/1.0.0-beta/nvidia-device-plugin.yml
  9. クラスターの更新が完了したら、同じ Kubernetes バージョンの更新したクラスターにワーカーノードを更新する必要があります。詳細については、「ワーカーノードの更新」を参照してください。