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 1
  watchdogFilePath: /test/watchdog1 2
1
存続しているピアのタイムアウト期間を指定します。その後、オペレーターは異常なノードが再起動されたと見なすことができます。オペレーターは、この値の下限を自動的に計算します。ただし、ノードごとにウォッチドッグタイムアウトが異なる場合は、この値をより高い値に変更する必要があります。
2
ノード内のウォッチドッグデバイスのファイルパスを指定します。ウォッチドッグデバイスが使用できない場合、 PoisonPillConfigCR はソフトウェアの再起動を使用します。

5.6.2. Web コンソールを使用した PoisonPillOperator のインストール

OpenShift Container Platform Web コンソールを使用して、Poison PillOperator をインストールできます。

前提条件

  • cluster-admin 権限を持つユーザーとしてログインしている。

手順

  1. OpenShift Container Platform Web コンソールで、OperatorsOperatorHub ページに移動します。
  2. 使用可能なオペレーターのリストからポイズンピルオペレーターを検索し、Installをクリックします。
  3. Installation modenamespaceのデフォルトの選択を維持して、Operator が poison-pill 名前空間にインストールされるようにします。
  4. Install をクリックします。

検証

インストールが正常に行われたことを確認するには、以下を実行します。

  1. OperatorsInstalled Operators ページに移動します。
  2. オペレータは poison-pill 名前空間内に設置され、そのステータスが Succeeded になったことを確認してください。

Operator が正常にインストールされていない場合、以下を実行します。

  1. OperatorsInstalled Operators ページに移動し、Status 列でエラーまたは失敗の有無を確認します。
  2. WorkloadsPodsページに移動し、問題を報告している poison-pill-controller-manager プロジェクトの Pod のログを確認します。

5.6.3. CLI を使用した PoisonPillOperator のインストール

OpenShift CLI(oc ) を使用して、Poison PillOperator をインストールできます。

前提条件

  • OpenShift CLI (oc) をインストールしている。
  • cluster-admin 権限を持つユーザーとしてログインしている。

手順

  1. Poison Pill Operator の Namespace カスタムリソース (CR) を作成します。

    1. NamespaceCR を定義し、YAML ファイルを保存します (例: poison-pill-namespace.yaml)。

      apiVersion: v1
      kind: Namespace
      metadata:
        name: poison-pill
    2. NamespaceCR を作成するには、次のコマンドを実行します。

      $ oc create -f poison-pill-namespace.yaml
  2. OperatorGroup を作成します。

    1. OperatorGroup CR を定義し、YAML ファイルを保存します (例: poison-pill-operator-group.yaml )。

      apiVersion: operators.coreos.com/v1
      kind: OperatorGroup
      metadata:
        name: poison-pill-manager
        namespace: poison-pill
      spec:
        targetNamespaces:
        - poison-pill
    2. OperatorGroup CR を作成するには、次のコマンドを実行します。

      $ oc create -f poison-pill-operator-group.yaml
  3. SubscriptionCR を作成します。

    1. 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-manager
    2. SubscriptionCR を作成するには、次のコマンドを実行します。

      $ oc create -f poison-pill-subscription.yaml

検証

  1. CSV リソースを調べて、インストールが成功したことを確認します。

    $ oc get csv -n poison-pill

    出力例

    NAME                   DISPLAY                 VERSION   REPLACES    PHASE
    poison-pill.v0.1.4     Poison Pill Operator    0.1.4                 Succeeded

  2. Poison PillOperator が稼働していることを確認します。

    $ oc get deploy -n poison-pill

    出力例

    NAME                                 READY   UP-TO-DATE   AVAILABLE   AGE
    poison-pill-controller-manager       1/1     1            1           10d

  3. Poison PillOperator が PoisonPillConfigCR を作成したことを確認します。

    $ oc get PoisonPillConfig -n poison-pill

    出力例

    NAME                 AGE
    poison-pill-config   10d

  4. 各ポイズンピル 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 権限を持つユーザーとしてログインしている。

手順

  1. PoisonPillRemediationTemplate CR を作成します。

    1. PoisonPillRemediationTemplate を定義します。

      apiVersion: poison-pill.medik8s.io/v1alpha1
      kind: PoisonPillRemediationTemplate
      metadata:
        namespace: openshift-machine-api
        name: poisonpillremediationtemplate-sample
      spec:
        template:
          spec: {}
    2. PoisonPillRemediationTemplate CR を作成するには、次のコマンドを実行します。

      $ oc create -f <ppr-name>.yaml
  2. PoisonPillRemediationTemplate CR を指すように MachineHealthCheckCR を作成または更新します。

    1. 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
      修復テンプレートの詳細を指定します。
    2. MachineHealthCheck CR を作成するには、次のコマンドを実行します。

      $ oc create -f <file-name>.yaml
    3. MachineHealthCheck CR を更新するには、次のコマンドを実行します。

      $ 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 コントローラーが PoisonPillRemediation CR を作成しなかった場合は、MachineHealthCheck コントローラーのログを確認してください。さらに、MachineHealthCheck CR に、修復テンプレートを使用するために必要な仕様が含まれていることを確認してください。

PoisonPillRemediation CR が作成された場合は、その名前が異常なノードまたはマシンオブジェクトと一致することを確認してください。

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>

5.6.6. 関連情報