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


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

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

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

10.6.3.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. マシンコントローラーは、コントロールプレーンマシンによってサポートされているノードを drain しようとします。

    • drain が失敗した場合、Drained は、False に設定され、マシンコントローラーはノードの drain を再度試行します。
    • drain に成功すると、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
      owner: clusteroperator/etcd
  ...

ここでは、以下のようになります。

spec.lifecycleHooks.preDrain.name
preDrain ライフサイクルフックの名前を指定します。
spec.lifecycleHooks.preDrain.owner
preDrain ライフサイクルフックを管理するフック実装コントローラーを指定します。
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

会社概要

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

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

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

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

Legal Notice

Theme

© 2026 Red Hat
トップに戻る