5.6. ポイズンピルオペレーターによるノードの修復
Poison Pill Operator を使用して、異常なノードを自動的に再起動できます。この修復戦略は、ステートフルアプリケーションと ReadWriteOnce(RWO) ボリュームのダウンタイムを最小限に抑え、一時的な障害が発生した場合に計算能力を回復します。
5.6.1. ポイズンピルオペレーターについて リンクのコピーリンクがクリップボードにコピーされました!
Poison Pill Operator はクラスターノードで実行され、異常と識別されたノードを再起動します。オペレーターは、 MachineHealthCheck コントローラーを使用して、クラスター内のノードの状態を検出します。ノードが異常であると識別されると、MachineHealthCheck リソースは PoisonPillRemediation カスタムリソース (CR) を作成し、 Poison PillOperator をトリガーします。
ポイズンピルオペレーターは、次の機能を提供します。
- ステートフルアプリケーションのダウンタイムを最小限に抑え、一時的な障害が発生した場合に計算能力を回復します。
- ノードをプロビジョニングするための IPMI や API などの管理インターフェイスから独立しています。
5.6.1.1. ポイズンピルオペレーターの設定を理解する リンクのコピーリンクがクリップボードにコピーされました!
Poison Pill Operator は、 PoisonPillConfig の名前空間に poison-pill-config という名前の PoisonPillConfigCR を作成します。この CR を編集できます。ただし、Poison PillOperator の新しい CR を作成することはできません。
PoisonPillConfig CR を変更すると、PoisonPill デーモンセットが再作成されます。
PoisonPillConfig CR は、次の YAML ファイルに似ています。
apiVersion: poison-pill.medik8s.io/v1alpha1
kind: PoisonPillConfig
metadata:
name: poison-pill-config
namespace: openshift-operators
spec:
safeTimeToAssumeNodeRebootedSeconds: 180
watchdogFilePath: /test/watchdog1
5.6.2. Web コンソールを使用した PoisonPillOperator のインストール リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform Web コンソールを使用して、Poison PillOperator をインストールできます。
前提条件
-
cluster-admin権限を持つユーザーとしてログインしている。
手順
-
OpenShift Container Platform Web コンソールで、Operators
OperatorHub ページに移動します。 - 使用可能なオペレーターのリストからポイズンピルオペレーターを検索し、Installをクリックします。
-
Installation modeとnamespaceのデフォルトの選択を維持して、Operator が
poison-pill名前空間にインストールされるようにします。 - Install をクリックします。
検証
インストールが正常に行われたことを確認するには、以下を実行します。
-
Operators
Installed Operators ページに移動します。 -
オペレータは
poison-pill名前空間内に設置され、そのステータスがSucceededになったことを確認してください。
Operator が正常にインストールされていない場合、以下を実行します。
-
Operators
Installed Operators ページに移動し、 Status列でエラーまたは失敗の有無を確認します。 -
Workloads
Podsページに移動し、問題を報告している poison-pill-controller-managerプロジェクトの Pod のログを確認します。
5.6.3. CLI を使用した PoisonPillOperator のインストール リンクのコピーリンクがクリップボードにコピーされました!
OpenShift CLI(oc ) を使用して、Poison PillOperator をインストールできます。
前提条件
-
OpenShift CLI (
oc) をインストールしている。 -
cluster-admin権限を持つユーザーとしてログインしている。
手順
Poison Pill Operator の
Namespaceカスタムリソース (CR) を作成します。NamespaceCR を定義し、YAML ファイルを保存します (例:poison-pill-namespace.yaml)。apiVersion: v1 kind: Namespace metadata: name: poison-pillNamespaceCR を作成するには、次のコマンドを実行します。$ oc create -f poison-pill-namespace.yaml
OperatorGroupを作成します。OperatorGroupCR を定義し、YAML ファイルを保存します (例:poison-pill-operator-group.yaml)。apiVersion: operators.coreos.com/v1 kind: OperatorGroup metadata: name: poison-pill-manager namespace: poison-pill spec: targetNamespaces: - poison-pillOperatorGroupCR を作成するには、次のコマンドを実行します。$ oc create -f poison-pill-operator-group.yaml
SubscriptionCR を作成します。SubscriptionCR を定義し、YAML ファイル (poison-pill-subscription.yamlなど) を保存します。apiVersion: operators.coreos.com/v1alpha1 kind: Subscription metadata: name: poison-pill-manager namespace: poison-pill spec: channel: alpha name: poison-pill-manager source: redhat-operators sourceNamespace: openshift-marketplace package: poison-pill-managerSubscriptionCR を作成するには、次のコマンドを実行します。$ oc create -f poison-pill-subscription.yaml
検証
CSV リソースを調べて、インストールが成功したことを確認します。
$ oc get csv -n poison-pill出力例
NAME DISPLAY VERSION REPLACES PHASE poison-pill.v0.1.4 Poison Pill Operator 0.1.4 SucceededPoison PillOperator が稼働していることを確認します。
$ oc get deploy -n poison-pill出力例
NAME READY UP-TO-DATE AVAILABLE AGE poison-pill-controller-manager 1/1 1 1 10dPoison PillOperator が
PoisonPillConfigCR を作成したことを確認します。$ oc get PoisonPillConfig -n poison-pill出力例
NAME AGE poison-pill-config 10d各ポイズンピル Pod がスケジュールされ、各ワーカーノードで実行されていることを確認します。
$ oc get daemonset -n poison-pill出力例
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE poison-pill-ds 2 2 2 2 2 <none> 10d注記このコマンドは、コントロールプレーンノードではサポートされていません。
5.6.4. ポイズンピルオペレーターを使用するためのマシンヘルスチェックの設定 リンクのコピーリンクがクリップボードにコピーされました!
次の手順を使用して、Poison PillOperator を修復プロバイダーとして使用するようにマシンヘルスチェックを設定します。
前提条件
-
OpenShift CLI (
oc) をインストールしている。 -
cluster-admin権限を持つユーザーとしてログインしている。
手順
PoisonPillRemediationTemplateCR を作成します。PoisonPillRemediationTemplateを定義します。apiVersion: poison-pill.medik8s.io/v1alpha1 kind: PoisonPillRemediationTemplate metadata: namespace: openshift-machine-api name: poisonpillremediationtemplate-sample spec: template: spec: {}PoisonPillRemediationTemplateCR を作成するには、次のコマンドを実行します。$ oc create -f <ppr-name>.yaml
PoisonPillRemediationTemplateCR を指すようにMachineHealthCheckCR を作成または更新します。MachineHealthCheckを定義または更新します。apiVersion: machine.openshift.io/v1beta1 kind: MachineHealthCheck metadata: name: machine-health-check namespace: openshift-machine-api spec: selector: matchLabels: machine.openshift.io/cluster-api-machine-role: "worker" machine.openshift.io/cluster-api-machine-type: "worker" unhealthyConditions: - type: "Ready" timeout: "300s" status: "False" - type: "Ready" timeout: "300s" status: "Unknown" maxUnhealthy: "40%" nodeStartupTimeout: "10m" remediationTemplate:1 kind: PoisonPillRemediationTemplate apiVersion: poison-pill.medik8s.io/v1alpha1 name: <poison-pill-remediation-template-sample>- 1
- 修復テンプレートの詳細を指定します。
MachineHealthCheckCR を作成するには、次のコマンドを実行します。$ oc create -f <file-name>.yamlMachineHealthCheckCR を更新するには、次のコマンドを実行します。$ oc apply -f <file-name>.yaml
5.6.5. ポイズンピルオペレーターのトラブルシューティング リンクのコピーリンクがクリップボードにコピーされました!
5.6.5.1. 一般的なトラブルシューティング リンクのコピーリンクがクリップボードにコピーされました!
- 問題
- ポイズンピルオペレーターの問題をトラブルシューティングしたいと考えています。
- 解決策
- オペレーターログを確認してください。
5.6.5.2. デーモンセットの確認 リンクのコピーリンクがクリップボードにコピーされました!
- 問題
- Poison Pill Operator はインストールされていますが、デーモンセットは使用できません。
- 解決策
- エラーまたは警告がないか、オペレーターログを確認してください。
5.6.5.3. 失敗した修復 リンクのコピーリンクがクリップボードにコピーされました!
- 問題
- 不健康なノードは修正されませんでした。
- 解決策
次のコマンドを実行して、
PoisonPillRemediationCR が作成されたことを確認します。$ oc get ppr -Aノードが不健康になったときに
MachineHealthCheckコントローラーがPoisonPillRemediationCR を作成しなかった場合は、MachineHealthCheckコントローラーのログを確認してください。さらに、MachineHealthCheckCR に、修復テンプレートを使用するために必要な仕様が含まれていることを確認してください。PoisonPillRemediationCR が作成された場合は、その名前が異常なノードまたはマシンオブジェクトと一致することを確認してください。
5.6.5.4. Poison Pill Operator をアンインストールした後でも、デーモンセットおよびその他の Poison Pill Operator リソースが存在する リンクのコピーリンクがクリップボードにコピーされました!
- 問題
- Poison Pill Operator のリソース (デーモンセット、設定 CR、修復テンプレート CR など) は、Operator をアンインストールした後も存在します。
- 解決策
Poison Pill Operator リソースを削除するには、リソースタイプごとに次のコマンドを実行してリソースを削除します。
$ oc delete ds <poison-pill-ds> -n <namespace>$ oc delete ppc <poison-pill-config> -n <namespace>$ oc delete pprt <poison-pill-remediation-template> -n <namespace>