クラスタの更新

各KubernetesノードのOracle Container Host for Kubernetes (OCK)イメージを更新して、Kubernetesクラスタを更新する方法について学習します。

この項では、最新のKubernetesパッチ・リリースにノードを更新する方法、または次のKubernetesマイナー・リリースにノードを更新する方法について説明します。

パッチ・リリースには、エラータの更新が含まれ、Common Vulnerabilities and Exposures (CVE)の修正、Kubernetesの更新、OSの更新などが含まれる場合があります。 次のKubernetesマイナー・バージョンへの更新は、パッチ更新と同じ方法で実行され、Kubernetesバージョン番号を設定する追加のステップが1つあります。

Oracle CNEは、更新されたOracle Container Host for Kubernetes (OCK)イメージを介してすべての更新を提供します。 更新は、Kubernetesマイナー・バージョンに固有のOCKイメージを介して配信されます(たとえば、Kubernetesリリース1.31)。

各ノードは定期的にコンテナ・レジストリをポーリングして、実行されているOCKイメージの更新をチェックするか、Kubernetesをアップグレードする場合はターゲットKubernetesバージョンのイメージをチェックします。 アップグレードのKubernetesバージョンを設定すると、そのバージョンのイメージがクラスタ内のノードにプルおよびステージングされます。 パッチの更新は、各ノードに自動的にダウンロードされるため、ノードの更新前にステージングする必要はありません。

更新が使用可能な場合は、ocne node updateコマンドを使用してノードを再起動し、新しいイメージを使用します。 ノードに対してocne node updateコマンドを実行すると、次のアクションが完了します:

  1. ノードは、クラスタから(kubectl drainコマンドを使用して)排出されます。 これにより、ノードからポッドが削除されます。

  2. ホストOCKイメージがノードにインストールされ、ノードが再起動されます。

  3. ノードは(kubectl uncordonコマンドを使用して)クラスタに戻され、ポッドの実行に使用できます。

コントロール・プレーン・ノードから順にノードを更新します。

ヒント:

時間を節約するために、コントロール・プレーン・ノードの1つが更新可能であると注釈が付けられ次第、更新プロセスを開始できます。

高可用性クラスタは、クラスタを停止せずに更新できます。 1つのコントロール・プレーン・ノードがオフラインになると、別のコントロール・プレーン・ノードによってクラスタが制御されます。 単一のコントロール・プレーン・ノードを持つクラスタでは、更新の実行中にコントロール・プレーン・ノードが短時間オフラインになります。

アプリケーションが複数のワーカー・ノードで実行されている場合、更新中は起動したまま使用可能になります。

クラスタ更新のベスト・プラクティス

Kubernetesクラスタを更新するためのベスト・プラクティスについて学習します。

次のリストは、本番環境でKubernetesクラスタを更新する際に従うベスト・プラクティスを示しています:

etcdデータベースのバックアップ

まれにOCKイメージの更新が失敗した場合、更新は前のOCKイメージにロールバックされます。 ホストは、前のOCKイメージにリブートし、クラスタに再度参加します。 ただし、このような保護対策が行われているにもかかわらず、クラスタを更新する前に、ベスト・プラクティスに従い、etcdデータベースをバックアップすることをお薦めします。

ワーカー・ノードの前にコントロール・プレーン・ノードを更新

コントロール・プレーン内のノードは、常に最初に1つずつ更新してください。 別のノードで更新を開始する前に、作業中のコントロール・プレーン・ノードの更新が完了し、ノードがクラスタに再参加したことを確認します。

新しいKubernetesバージョンをステージングした直後にノードを更新

Kubernetesマイナー・アップグレードのイメージをステージングすると、クラスタは現在のバージョンのパッチ更新のポーリングを停止します。 したがって、アップグレードはできるだけ早く適用してください。

Kubernetesルールの確認

特定のKubernetes構成では、アップグレードのためにノードをオフラインにできない場合があります。 たとえば、PodDisruptionBudgetオブジェクトのminAvailableフィールドは、常に使用可能である必要があるポッドの最小数を設定します。 ノードをオフラインにするには、実行中のポッドの数をminAvailableフィールドに設定された数を超えるように増やす必要がある場合があります。 PodDisruptionBudgetsの詳細は、アップストリームの「Kubernetesドキュメント」を参照してください。

ヒント:

--disable-evictionオプションをocne node updateコマンドとともに使用して、PodDisruptionBudgetをバイパスし、ドレイン・プロセス中にポッドを強制的に削除することもできます。 注意して使用してください。

Kubernetesパッチ更新

Kubernetesパッチ・リリースへの更新について説明します。

イメージの更新が検出されると、イメージは各ノードで自動的にプル、検証およびステージングされます。 イメージがステージングされると、ノードに注釈が付けられ、更新が使用可能であることが示されます。

ocne cluster infoコマンドを使用して、ノードに使用可能な更新があるかどうかを確認できます。 OCKイメージをインストールする準備ができたら、このコマンドの出力には、ノードのUpdate Availableフィールドがtrueに設定されていることが示されます。

ノート:

ocne cluster infoコマンドを頻繁に実行して、更新を確認することをお薦めします。 更新を逃し、新しい更新が使用可能になると、最新の更新がプルおよびステージングされ、すぐに使用できます。 最新のパッチ・イメージは、常にノードで使用可能になります。 パッチの更新を逃した場合は、最新のパッチをインストールできます。

更新がステージングされたら、ocne node updateコマンドを使用してノードを再起動し、新しいイメージを使用します。

Kubernetesパッチ・リリースのインストール

KubernetesノードのOracle Container Host for Kubernetes (OCK)イメージを更新して、最新のKubernetesパッチ・リリースをインストールします。

Kubernetesクラスタ内の各ノードは、コンテナ・レジストリを定期的にポーリングして、実行されているOracle Container Host for Kubernetes (OCK)イメージに対するパッチ更新を確認します。 更新が検出されると、イメージは各ノードで自動的にプル、検証およびステージングされ、ノードに注釈が付けられて更新が表示されます。

  1. クラスタ・ノードで更新が使用可能であることを確認します。

    ocne cluster infoコマンドを使用して、ノードが更新されたOCKイメージでステージングされていることを確認します。 次の構文を使用します。

    ocne cluster info
    [{-N|--node}] nodename, ...
    [{-s|--skip-nodes }]

    構文オプションの詳細は、Oracle Cloud Native Environment: CLIを参照してください。

    たとえば:

    ocne cluster info

    OCKイメージが使用可能、ステージング済およびインストール準備完了の場合、このコマンドの出力には、ノードのUpdate Availableフィールドがtrueと表示されます。

  2. コントロール・プレーン・ノードを更新します。

    ステージングされたOCKイメージを使用して、コントロール・プレーン・ノード(一度に1つのノード)を更新します。

    ocne node updateコマンドを使用して、各ノードを更新します。 次の構文を使用します。

    ocne node update 
    [{-d|--delete-emptydir-data}]
    [{-c|--disable-eviction}]
    {-N|--node} name
    [{-p|--pre-update-mode} mode]
    [{-t|--timeout} minutes] 

    構文オプションの詳細は、Oracle Cloud Native Environment: CLIを参照してください。

    たとえば:

    ocne node update --node mynode

    mynodeをコントロール・プレーン・ノードの名前に置き換えます。

    ヒント:

    各ノードが更新されたら、ocne cluster infoコマンドを使用して更新が完了したことを確認します。 ノードの更新は非同期です。 更新が完了するのは、このコマンドの出力で、ノードに対して更新が使用できなくなったことが報告された場合のみです。

  3. ワーカー・ノードを更新します。

    ocne node updateコマンドを使用して、各ワーカー・ノードを更新します。

Kubernetesマイナー更新

Kubernetesマイナー・リリースへの更新について説明します。

OCKイメージがそのバージョンで使用可能になったときに、クラスタを次のKubernetesマイナー・バージョンにアップグレードできます。 これを行うには、ocne cluster stageコマンドを使用して、ターゲットのKubernetesバージョンを設定します。

ターゲットのKubernetesバージョンは、次に使用可能なマイナー・バージョンである必要があります。 たとえば、Kubernetesリリース1.29から1.31にアップグレードするには、最初にターゲットKubernetesリリースを1.30に設定し、すべてのノードを更新してから、ターゲット・バージョンを1.31に設定し、ノードを再度更新します。

ノードは、ターゲットKubernetesバージョンのOCKイメージのコンテナ・レジストリをポーリングします。 イメージが使用可能な場合、ノードはイメージをプルおよびステージングし、パッチ更新と同じ方法で更新を表示するようにノードに注釈を付けます。 再度、ocne node updateコマンドを使用して各ノードを手動で更新します。

ヒント:

クラスタがOCIで実行されていて、ociプロバイダでプロビジョニングされている場合、KubernetesクラスタAPIコントローラを使用してKubernetesマイナー・バージョンに更新することもできます。 クラスタAPIを使用してアップグレードすると、既存のノードを1つずつアップグレードするのではなく、新しいOCKイメージを使用して新しいコンピュート・インスタンスがプロビジョニングされます。 ociプロバイダでプロビジョニングされたクラスタのアップグレードの詳細は、「Kubernetesマイナー・リリースへのアップグレード」を参照してください。

Kubernetesマイナー・リリースへのアップグレード

KubernetesノードのOracle Container Host for Kubernetes (OCK)イメージを更新して、次のKubernetesマイナー・リリースにアップグレードします。

Oracle Container Host for Kubernetes (OCK)イメージがそのバージョンで使用可能になったときに、Kubernetesクラスタを次のマイナーKubernetesバージョンにアップグレードします。 ocne cluster stageコマンドを使用して、ターゲットのKubernetesバージョンを設定します。

  1. ターゲットのKubernetesバージョンを設定します。

    ocne cluster stageコマンドを使用して、ターゲットのKubernetesバージョンをステージングします。 次の構文を使用します:

    ocne cluster stage 
    [{-c|--config} path] 
    [{-r|--os-registry} registry]
    [{-t|--transport} transport]
    {-v|--version} version

    構文オプションの詳細は、Oracle Cloud Native Environment: CLIを参照してください。

    たとえば:

    ocne cluster stage --version 1.31
  2. クラスタ・ノードで更新が使用可能であることを確認します。

    ocne cluster infoコマンドを使用して、ノードが更新されたOCKイメージでステージングされていることを確認します。 次の構文を使用します。

    ocne cluster info
    [{-N|--node}] nodename, ...
    [{-s|--skip-nodes }]

    構文オプションの詳細は、Oracle Cloud Native Environment: CLIを参照してください。

    たとえば:

    ocne cluster info

    OCKイメージが使用可能、ステージング済およびインストール準備完了の場合、このコマンドの出力には、ノードのUpdate Availableフィールドがtrueと表示されます。

  3. コントロール・プレーン・ノードを更新します。

    ステージングされたOCKイメージを使用して、コントロール・プレーン・ノード(一度に1つのノード)を更新します。

    ocne node updateコマンドを使用して、各ノードを更新します。 次の構文を使用します。

    ocne node update 
    [{-d|--delete-emptydir-data}]
    [{-c|--disable-eviction}]
    {-N|--node} name
    [{-p|--pre-update-mode} mode]
    [{-t|--timeout} minutes] 

    構文オプションの詳細は、Oracle Cloud Native Environment: CLIを参照してください。

    たとえば:

    ocne node update --node mynode

    mynodeをコントロール・プレーン・ノードの名前に置き換えます。

    ヒント:

    各ノードが更新されたら、ocne cluster infoコマンドを使用して更新が完了したことを確認します。 ノードの更新は非同期です。 更新が完了するのは、このコマンドの出力で、ノードに対して更新が使用できなくなったことが報告された場合のみです。

  4. ワーカー・ノードを更新します。

    ocne node updateコマンドを使用して、各ワーカー・ノードを更新します。

  5. Kubernetesがアップグレードされたことを確認します。

    kubectl get nodesコマンドを使用して、すべてのノードがアップグレードされ、更新されたKubernetesバージョンとともにリストされていることを確認します。

    kubectl get nodes