新しいバージョンのKubernetesへのクラスタのアップグレード

Container Engine for Kubernetes (OKE)を使用して、コントロール・プレーン・ノードおよびワーカー・ノードを新しいKubernetesバージョンにアップグレードする様々な方法について説明します。

Kubernetesの新しいバージョンがリリースされ、Container Engine for Kubernetesが新しいバージョンをサポートしている場合は、クラスタ内のコントロール・プレーン・ノードおよびワーカー・ノードで実行されているKubernetesバージョンをアップグレードできます。

Kubernetesのドキュメントに記載されているKubernetesバージョン・スキュー・サポート・ポリシーに従っていれば、クラスタを構成するコントロール・プレーン・ノードおよびワーカー・ノードで異なるバージョンのKubernetesを実行できます。

コントロール・プレーン・ノードとワーカー・ノードは異なる方法でアップグレードします:

  • コントロール・プレーン・ノードのアップグレード:コントロール・プレーン・ノードをアップグレードするには、クラスタをアップグレードし、クラスタに新しいKubernetesバージョンを指定します。古いバージョンのKubernetesが実行されているコントロール・プレーン・ノードがアップグレードされます。Container Engine for Kubernetesでは、高可用性を確保するために、Kubernetesコントロール・プレーンが複数のOracle管理コントロール・プレーン・ノードに分散されているため(サポートされているリージョン内の異なる可用性ドメインに分散されます)、コントロール・プレーン・ノードで実行されているKubernetesバージョンをダウンタイムなしでアップグレードできます。

    コントロール・プレーン・ノードをKubernetesの新しいバージョンにアップグレードした後、新しいバージョンを実行しているワーカー・ノードで新しいノード・プールを作成できます。または、古いバージョンのKubernetesを実行しているワーカー・ノードを使用して、新しいノード・プールを引き続き作成できます(古いバージョンがコントロール・プレーン・ノードで実行されているKubernetesバージョンと互換性がある場合)。

    コントロール・プレーン・ノードのアップグレードの詳細は、クラスタ内のコントロール・プレーン・ノードでのKubernetesバージョンのアップグレードを参照してください。

  • ワーカー・ノードのアップグレード:管理対象ノード、自己管理ノードおよび仮想ノードのアップグレード方法は異なります:
    • 管理対象ノードのアップグレード:次のいずれかの方法でワーカー・ノードをアップグレードします:
      • クラスタ内のノード・プールのインプレース・アップグレードを実行し、既存のノード・プールに新しいKubernetesバージョンを指定して、ノードをサイクリングし、既存のすべてのワーカー・ノードを自動的に置換します。
      • クラスタ内のノード・プールのインプレース・アップグレードを実行し、既存のノード・プールに新しいKubernetesバージョンを指定して、既存の各ワーカー・ノードを新しいワーカー・ノードに手動で置き換えます。
      • クラスタ内のノード・プールのアウトオブプレース・アップグレードを実行し、元のノード・プールを新しいKubernetesバージョンを指定した新しいノード・プールに置き換えます。

      管理対象ノードのアップグレードの詳細は、管理対象ノードの新しいKubernetesバージョンへのアップグレードを参照してください。

    • 自己管理ノードのアップグレード:既存の自己管理ノードを、新しいコンピュート・インスタンスでホストされている新しい自己管理ノードに置き換えることで、自己管理ノードをアップグレードします。自己管理ノードのアップグレードの詳細は、既存の自己管理ノードの置換による新しいKubernetesバージョンへの自己管理ノードのアップグレードを参照してください。
    • 仮想ノードのアップグレード:クラスタ内のコントロール・プレーン・ノードをアップグレードして、仮想ノードをアップグレードします。コントロール・プレーン・ノードで実行されているKubernetesバージョンをアップグレードすると、クラスタ内のすべての仮想ノード・プールの仮想ノードも自動的にそのKubernetesバージョンにアップグレードされます。仮想ノードのアップグレードの詳細は、新しいKubernetesバージョンへの仮想ノードのアップグレードを参照してください。

Container Engine for Kubernetesで現在および以前にサポートされていたKubernetesのバージョンの詳細は、サポートされているKubernetesのバージョンを参照してください。

クラスタのアップグレードに関する注意

クラスタをアップグレードする際には、次の点に注意してください:

  • Container Engine for Kubernetesは、アップグレード操作を明示的に開始した場合にのみ、コントロール・プレーン・ノードで実行されているKubernetesバージョンをアップグレードします。
  • コントロール・プレーン・ノードを新しいバージョンのKubernetesにアップグレードした後は、コントロール・プレーン・ノードを以前のバージョンのKubernetesにダウングレードできません。
  • コントロール・プレーン・ノードで実行されているKubernetesのバージョンをアップグレードする前に、クラスタにデプロイされているアプリケーションが新しいKubernetesバージョンと互換性があることをテストする必要があります。たとえば、既存のクラスタをアップグレードする前に、新しいKubernetesバージョンで新しいクラスタを作成し、アプリケーションをテストできます。
  • コントロール・プレーン・ノードとワーカー・ノードで実行されているKubernetesのバージョンは互換性がある必要があります。つまり、コントロール・プレーン・ノードのKubernetesバージョンは、ワーカー・ノードのKubernetesバージョンより前の2つのマイナー・バージョン(またはKubernetesバージョン1.28から始まる3つのマイナー・バージョン)である必要があります。Kubernetesドキュメントに記載されているKubernetesバージョン・スキュー・サポート・ポリシーを参照してください。
  • コントロール・プレーン・ノードで現在実行されているKubernetesのバージョンが、サポートされている最新バージョンより1バージョン超古い場合は、アップグレード先となるバージョンを選択できます。現在コントロール・プレーン・ノードで実行しているバージョンより1バージョン超新しいバージョンのKubernetesにアップグレードする場合は、バージョンをスキップせずに各中間バージョンに順番にアップグレードする必要があります(Kubernetesのドキュメントを参照)。
  • クラスタ内のコントロール・プレーン・ノードを正常にアップグレードするには、Kubernetes DashboardサービスのタイプがClusterIPである必要があります。Kubernetes DashboardサービスがClusterIPタイプではない場合(たとえば、サービスがNodePortタイプの場合)、アップグレードは失敗します。この場合、Kubernetes DashboardサービスのタイプをClusterIPに変更します(たとえば、kubectl -n kube-system edit service kubernetes-dashboardと入力してタイプを変更します)。

  • Kubernetesバージョン1.14より前のContainer Engine for Kubernetesでは、DNSサーバーとしてkube-dnsを使用してクラスタが作成されました。ただし、Kubernetesバージョン1.14以降では、Container Engine for KubernetesはDNSサーバーとしてCoreDNSを使用してクラスタを作成します。Container Engine for Kubernetesによって作成されたクラスタを以前のバージョンからKubernetes 1.14以降にアップグレードすると、クラスタのkube-dnsサーバーは自動的にCoreDNSサーバーに置き換えられます。元のkube-dns ConfigMapを使用してkube-dnsの動作をカスタマイズした場合、それらのカスタマイズはCoreDNS ConfigMapに引き継がれないことに注意してください。CoreDNS Corefileの設定をオーバーライドするには、カスタマイズを含む新しいConfigMapを作成して適用する必要があります。CoreDNSへのアップグレードの詳細は、KubernetesクラスタのDNSサーバーの構成を参照してください。