6.2. マシン削除フェーズのライフサイクルフック


マシンのライフサイクルフックは、通常のライフサイクルプロセスが中断できる、マシンの調整ライフサイクル内のポイントです。マシンの Deleting フェーズでは、これらの中断により、コンポーネントがマシンの削除プロセスを変更する機会が提供されます。

6.2.1. 用語と定義

マシンの削除フェーズのライフサイクルフックの動作を理解するには、次の概念を理解する必要があります。

調整
調整は、コントローラーがクラスターの実際の状態とクラスターを構成するオブジェクトをオブジェクト仕様の要件と一致させようとするプロセスです。
マシンコントローラー

マシンコントローラーは、マシンの調整ライフサイクルを管理します。クラウドプラットフォーム上のマシンの場合、マシンコントローラーは OpenShift Container Platform コントローラーとクラウドプロバイダーのプラットフォーム固有のアクチュエーターを組み合わせたものです。

マシンの削除のコンテキストでは、マシンコントローラーは次のアクションを実行します。

  • マシンによってバックアップされているノードをドレインします。
  • クラウドプロバイダーからマシンインスタンスを削除します。
  • Node オブジェクトを削除します。
ライフサイクルフック

ライフサイクルフックは、通常のライフサイクルプロセスを中断できる、オブジェクトの調整ライフサイクル内の定義されたポイントです。コンポーネントはライフサイクルフックを使用してプロセスに変更を注入し、望ましい結果を達成できます。

マシンの Deleting フェーズには 2 つのライフサイクルフックがあります。

  • preDrain ライフサイクルフックは、マシンによってサポートされているノードをドレインする前に解決する必要があります。
  • preTerminate ライフサイクルフックは、インスタンスをインフラストラクチャープロバイダーから削除する前に解決する必要があります。
フック実装コントローラー

フック実装コントローラーは、ライフサイクルフックと対話できる、マシンコントローラー以外のコントローラーです。フック実装コントローラーは、次の 1 つ以上のアクションを実行できます。

  • ライフサイクルフックを追加します。
  • ライフサイクルフックに応答します。
  • ライフサイクルフックを削除します。

各ライフサイクルフックには 1 つのフック実装コントローラーがありますが、フック実装コントローラーは 1 つ以上のフックを管理できます。

6.2.2. マシン削除処理順序

OpenShift Container Platform 4.16 には、マシン削除フェーズ用の 2 つのライフサイクルフック (preDrainpreTerminate) があります。特定のライフサイクルポイントのすべてのフックが削除されると、調整は通常どおり続行されます。

図6.1 マシン削除のフロー

マシンの Deleting フェーズの一連のイベント。

マシンの Deleting フェーズは次の順序で続行されます。

  1. 既存のマシンは、次のいずれかの理由により削除される予定です。

    • cluster-admin 権限を持つユーザーは、oc delete machine コマンドを使用します。
    • マシンは machine.openshift.io/delete-machine アノテーションを取得します。
    • マシンを管理するマシンセットは、調整の一環としてレプリカ数を減らすために、そのマシンに削除のマークを付けます。
    • クラスターオートスケーラーは、クラスターのデプロイメントニーズを満たすために不必要なノードを特定します。
    • マシンの健全性チェックは、異常なマシンを置き換えるように設定されています。
  2. マシンは Deleting フェーズに入ります。このフェーズでは、マシンは削除対象としてマークされていますが、API にはまだ存在しています。
  3. preDrain ライフサイクルフックが存在する場合、それを管理するフック実装コントローラーは指定されたアクションを実行します。

    すべての preDrain ライフサイクルフックが満たされるまで、マシンのステータス条件 DrainableFalse に設定されます。

  4. 未解決の preDrain ライフサイクルフックはなく、マシンのステータス条件 DrainableTrue に設定されています。
  5. マシンコントローラーは、マシンによってサポートされているノードをドレインしようとします。

    • ドレインが失敗した場合、Drained は、False に設定され、マシンコントローラーはノードのドレインを再度試行します。
    • ドレインに成功すると、DrainedTrue に設定されます。
  6. マシンのステータス条件 DrainedTrue に設定されます。
  7. preTerminate ライフサイクルフックが存在する場合、それを管理するフック実装コントローラーは指定されたアクションを実行します。

    すべての preTerminate ライフサイクルフックが満たされるまで、マシンのステータス条件 TerminableFalse に設定されます。

  8. 未解決の preTerminate ライフサイクルフックはなく、マシンのステータス条件 TerminableTrue に設定されています。
  9. マシンコントローラーは、インフラストラクチャープロバイダーからインスタンスを削除します。
  10. マシンコントローラーは Node オブジェクトを削除します。

6.2.3. 削除ライフサイクルフック設定

次の YAML スニペットは、マシンセット内の削除ライフサイクルフック設定の形式と配置を示しています。

preDrain ライフサイクルフックを示す YAML スニペット

apiVersion: machine.openshift.io/v1beta1
kind: Machine
metadata:
  ...
spec:
  lifecycleHooks:
    preDrain:
    - name: <hook_name> 1
      owner: <hook_owner> 2
  ...

1
preDrain ライフサイクルフックの名前。
2
preDrain ライフサイクルフックを管理するフック実装コントローラー。

preTerminate ライフサイクルフックを示す YAML スニペット

apiVersion: machine.openshift.io/v1beta1
kind: Machine
metadata:
  ...
spec:
  lifecycleHooks:
    preTerminate:
    - name: <hook_name> 1
      owner: <hook_owner> 2
  ...

1
preTerminate ライフサイクルフックの名前。
2
preTerminate ライフサイクルフックを管理するフック実装コントローラー。
ライフサイクルフックの設定例

次の例は、マシンの削除プロセスを中断する複数の架空のライフサイクルフックの実装を示しています。

ライフサイクルフックの設定例

apiVersion: machine.openshift.io/v1beta1
kind: Machine
metadata:
  ...
spec:
  lifecycleHooks:
    preDrain: 1
    - name: MigrateImportantApp
      owner: my-app-migration-controller
    preTerminate: 2
    - name: BackupFileSystem
      owner: my-backup-controller
    - name: CloudProviderSpecialCase
      owner: my-custom-storage-detach-controller 3
    - name: WaitForStorageDetach
      owner: my-custom-storage-detach-controller
  ...

1
単一のライフサイクルフックを含む preDrain ライフサイクルフックスタンザ。
2
3 つのライフサイクルフックを含む preTerminate ライフサイクルフックスタンザ。
3
2 つの preTerminate ライフサイクルフック CloudProviderSpecialCaseWaitForStorageDetach を管理するフック実装コントローラー。

6.2.4. Operator 開発者向けのマシン削除ライフサイクルフックの例

Operator は、マシン削除フェーズのライフサイクルフックを使用して、マシン削除プロセスを変更できます。次の例は、Operator がこの機能を使用できる方法を示しています。

preDrain ライフサイクルフックの使用例
積極的にマシンを入れ替える
Operator は、削除されたマシンのインスタンスを削除する前に、preDrain ライフサイクルフックを使用して、代替マシンが正常に作成され、クラスターに参加していることを確認できます。これにより、マシンの交換中の中断や、すぐに初期化されない交換用インスタンスの影響を軽減できます。
カスタムドレインロジックの実装

Operator は、preDrain ライフサイクルフックを使用して、マシンコントローラーのドレインロジックを別のドレインコントローラーに置き換えることができます。ドレインロジックを置き換えることにより、Operator は各ノードのワークロードのライフサイクルをより柔軟に制御できるようになります。

たとえば、マシンコントローラーのドレインライブラリーは順序付けをサポートしていませんが、カスタムドレインプロバイダーはこの機能を提供できます。カスタムドレインプロバイダーを使用することで、Operator はノードをドレインする前にミッションクリティカルなアプリケーションの移動を優先して、クラスターの容量が制限されている場合にサービスの中断を最小限に抑えることができます。

preTerminate ライフサイクルフックの使用例
ストレージの切り離しを確認する
Operator は、preTerminate ライフサイクルフックを使用して、マシンがインフラストラクチャープロバイダーから削除される前に、マシンに接続されているストレージが確実に切り離されるようにすることができます。
ログの信頼性の向上

ノードがドレインされた後、ログエクスポータデーモンがログを集中ログシステムに同期するのに時間がかかります。

ロギング Operator は、preTerminate ライフサイクルフックを使用して、ノードがドレインするときと、マシンがインフラストラクチャープロバイダーから削除されるときとの間に遅延を追加できます。この遅延により、Operator は主要なワークロードが削除され、ログバックログに追加されないようにする時間が確保されます。ログバックログに新しいデータが追加されていない場合、ログエクスポータは同期プロセスに追いつくことができるため、すべてのアプリケーションログが確実にキャプチャーされます。

6.2.5. マシンライフサイクルフックによるクォーラム保護

Machine API Operator を使用する OpenShift Container Platform クラスターの場合、etcd Operator はマシン削除フェーズのライフサイクルフックを使用して、クォーラム保護メカニズムを実装します。

preDrain ライフサイクルフックを使用することにより、etcd Operator は、コントロールプレーンマシン上の Pod がいつドレインされ、削除されるかを制御できます。etcd クォーラムを保護するために、etcd Operator は、etcd メンバーをクラスター内の新しいノードに移行するまで、そのメンバーの削除を防ぎます。

このメカニズムにより、etcd クラスターの具体的な運用上の知識がなくても、etcd Operator によって etcd クォーラムのメンバーを正確に制御できるようになり、Machine API Operator によってコントロールプレーンマシンを安全に作成および削除できるようになります。

6.2.5.1. クォーラム保護処理順序によるコントロールプレーンの削除

コントロールプレーンマシンセットを使用するクラスター上でコントロールプレーンマシンが置き換えられると、クラスターには一時的に 4 つのコントロールプレーンマシンが存在します。4 番目のコントロールプレーンノードがクラスターに参加すると、etcd Operator は代替ノードで新しい etcd メンバーを開始します。etcd Operator は、古いコントロールプレーンマシンが削除対象としてマークされていることを確認すると、古いノード上の etcd メンバーを停止し、代替の etcd メンバーをクラスターのクォーラムに参加するように昇格させます。

コントロールプレーンマシンの Deleting フェーズは、以下の順序で続行されます。

  1. コントロールプレーンマシンは削除される予定です。
  2. コントロールプレーンマシンは Deleting フェーズに入ります。
  3. preDrain ライフサイクルフックを満たすために、etcd Operator は次のアクションを実行します。

    1. etcd Operator は、4 番目のコントロールプレーンマシンが etcd メンバーとしてクラスターに追加されるまで待機します。この新しい etcd メンバーの状態は Running ですが、etcd リーダーから完全なデータベース更新を受信するまでは ready ができていません。
    2. 新しい etcd メンバーが完全なデータベース更新を受け取ると、etcd Operator は新しい etcd メンバーを投票メンバーに昇格させ、古い etcd メンバーをクラスターから削除します。

    この移行が完了すると、古い etcd Pod とそのデータは安全に削除されるため、preDrain ライフサイクルフックが削除されます。

  4. コントロールプレーンマシンのステータス条件 DrainableTrue に設定されます。
  5. マシンコントローラーは、コントロールプレーンマシンによってサポートされているノードをドレインしようとします。

    • ドレインが失敗した場合、Drained は、False に設定され、マシンコントローラーはノードのドレインを再度試行します。
    • ドレインに成功すると、DrainedTrue に設定されます。
  6. コントロールプレーンマシンのステータス条件 DrainedTrue に設定されます。
  7. 他の Operator が preTerminate ライフサイクルフックを追加していない場合、コントロールプレーンのマシンステータス条件 TerminableTrue に設定されます。
  8. マシンコントローラーは、インフラストラクチャープロバイダーからインスタンスを削除します。
  9. マシンコントローラーは Node オブジェクトを削除します。

etcd クォーラム保護の preDrain ライフサイクルフックを示す YAML スニペット

apiVersion: machine.openshift.io/v1beta1
kind: Machine
metadata:
  ...
spec:
  lifecycleHooks:
    preDrain:
    - name: EtcdQuorumOperator 1
      owner: clusteroperator/etcd 2
  ...

1
preDrain ライフサイクルフックの名前。
2
preDrain ライフサイクルフックを管理するフック実装コントローラー。
Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.