Node Doctorスクリプトを使用したKubernetesクラスタのノード問題のトラブルシューティング

Node Doctorスクリプトを使用して、Container Engine for Kubernetes (OKE)を使用して作成したクラスタ内のワーカー・ノードをホストするコンピュート・インスタンスの問題を解決する方法を確認します。

Node Doctorスクリプトは、管理対象ノードのコンピュート・インスタンスに事前にインストールされているため、インスタンスの問題の解決に役立ちます。実行方法に応じて、Node Doctorスクリプトは次のようになります。

  • 潜在的な問題領域を特定するトラブルシューティング出力と、それらの領域に対応するドキュメントへのリンクを出力します。
  • システム情報をバンドルに収集します。My Oracle Support (MOS)には、サポートチケットにバンドルをアップロードする手順が用意されています。

「アクティブ」以外のKubernetesノード条件を持つワーカー・ノード、または「準備完了」以外のノード状態が表示されている場合は、Node Doctorスクリプトを使用して問題をトラブルシューティングします。

Node Doctorスクリプトは、次の方法で実行できます。

  • SSHの使用
  • コマンドの実行機能の使用

ワーカー・ノードのトラブルシューティング・ガイドは、コンソールからNode Doctorスクリプトを起動するための便利な方法です。ワーカー・ノード・トラブルシューティング・ガイドには、SSHまたはコマンドの実行機能を使用して、Node Doctorスクリプトを実行するための動的に移入されたコマンドが用意されています。ワーカー・ノードのトラブルシューティング・ガイドにアクセスするには、「ノード・プールの詳細」ページで「ノードのトラブルシューティング」ボタンをクリックし、「SSH接続」または「コマンドの実行」のいずれかを選択して、指示に従います。

ノート

  • Node Doctorスクリプトは、2021年7月19日から作成されたワーカー・ノード・インスタンスに事前にインストールされています。2021年7月19日より前に作成されたワーカー・ノードには、Node Doctorスクリプトが事前インストールされていません。Node Doctorスクリプトのインストール方法については、Node Doctorスクリプトのダウンロード、インストールおよび更新を参照してください。このようなノードにNode Doctorスクリプトをインストールするには、ノードへのSSHアクセス権が必要です。
  • Oracleは、Node Doctorスクリプトの新しいバージョンを定期的にリリースします。Node Doctorスクリプトを初めて実行する前に(2021年7月19日以降に作成されたワーカー・ノードでも)、Node Doctorスクリプトのダウンロード、インストールおよび更新の手順に従って、スクリプトを最新バージョンに更新します。また、Node Doctorスクリプトを随時更新することをお薦めします。
  • Node Doctorスクリプトは、管理対象ノード・プールのワーカー・ノードで実行できますが、仮想ノード・プールでは実行できません。

Runコマンド機能の使用によるノード・医師スクリプトの実行

「実行コマンド」機能は、ノードの問題のトラブルシューティングや、ノード・ドクター・スクリプトを使用したサポート・バンドルの生成に使用できます。コマンドの実行機能の使用の詳細は、インスタンスでのコマンドの実行を参照してください。

コマンドの実行機能を使用してNode Doctorスクリプトを実行するには、次のいずれかを行います。

  • ワーカー・ノードのトラブルシューティング・ガイドを使用します。「ノード・プールの詳細」ページで、「ノードのトラブルシューティング」をクリックしてワーカー・ノードのトラブルシューティング・ガイドを表示し、「コマンドの実行」を選択して、指示に従います。
  • この項のステップに従ってください。

必須IAMポリシー

管理者の場合:コマンドの実行機能のポリシーを記述するには、次の手順を実行します。

  1. コマンドの実行機能を使用してコマンドを発行し、コマンドをキャンセルし、コンパートメント内のインスタンスのコマンド出力を表示することをユーザーに許可するには、次のポリシーを記述します。
    Allow any-user to use instance-agent-command-execution-family in compartment id <compartment-ocid> where request.instance.id=target.instance.id
  2. Node Doctorスクリプトの出力をオブジェクト・ストレージ・バケットに保存する場合は、次のポリシーを記述します:

    Allow any-user to manage objects in compartment id <compartment-ocid-of-bucket> where all { request.principal.type='instance', request.principal.compartment.id='<compartment-ocid-of-node>', target.bucket.name = '<bucket-name>' }
    

    ここでは:

    • <compartment-ocid-of-bucket>は、オブジェクト・ストレージ・バケットが属するコンパートメントのOCIDです。
    • <compartment-ocid-of-node>は、ワーカー・ノード・インスタンスが属するコンパートメントのOCIDです。

ノード・医師スクリプトを実行するコマンドの作成

インスタンスでNode Doctorスクリプトを実行するコマンドを作成するには:

  1. 「クラスタ詳細」ページで「ノード・プール」をクリックし、トラブルシューティングする管理対象ノードを含む管理対象ノード・プールをクリックします。
  2. 「ノード」で、トラブルシューティングするノードの名前をクリックして、「インスタンスの詳細」ページを表示します。
  3. 「リソース」で、「コマンドの実行」をクリックします。
  4. 「コマンド作成」をクリックします。
  5. コマンドの名前を入力します。機密情報を入力しないでください。
  6. 「タイムアウト(秒)」ボックスに、コンピュート・インスタンスのコマンド実行プラグインがタイムアウトするまでにインスタンスでコマンドを実行する時間を入力します。タイマーは、プラグインがコマンドを開始すると開始されます。タイムアウトなしの場合は、0を入力します。
  7. 「スクリプトの追加」セクションで、コンピュート・インスタンスのコマンド実行プラグインをインスタンスで実行するスクリプトをアップロードします。「スクリプトの貼付け」オプションを選択して、次のいずれかのコマンドをボックスに貼り付けます。
    • sudo /usr/local/bin/node-doctor.sh --check:潜在的な問題領域を特定するトラブルシューティング出力を、その領域に対応するドキュメントへのリンクとともに印刷します。
    • sudo /usr/local/bin/node-doctor.sh --generate &> /dev/null && cat /tmp/oke-support-bundle.tar:バンドル内のシステム情報を収集します。My Oracle Support (MOS)には、サポートチケットにバンドルをアップロードする手順が用意されています。
  8. 「出力タイプ」セクションで、コマンドの出力を保存する場所を選択します:
    • テキストとして出力: 出力はプレーン・テキストとして保存されます。「インスタンスの詳細」ページで出力を確認できます。
    • オブジェクト・ストレージ・バケットに出力: 出力はオブジェクト・ストレージ・バケットに保存されます。バケットを選択します。「オブジェクト名」ボックスに、出力ファイルの名前を入力します。機密情報の入力は避けてください。
    • オブジェクト・ストレージURLに出力: 出力はオブジェクト・ストレージURLに保存されます。URLを入力します。
  9. 「コマンド作成」をクリックします。

Node Doctorスクリプトの出力の表示

Node Doctorスクリプトの出力を表示する方法は、次のように、出力をオブジェクト・ストレージの場所に保存したか、プレーン・テキスト・ファイルとして保存したかによって異なります。

  1. Node Doctorスクリプトの出力がオブジェクト・ストレージの場所に保存されている場合は、次のいずれかを実行します。
  2. Node Doctorスクリプトの出力がプレーン・テキスト・ファイルとして保存されている場合は、次の手順を実行します。
    1. ナビゲーション・メニューを開き、「コンピュート」をクリックします。「コンピュート」で、「インスタンス」をクリックします。
    2. 関心のあるインスタンスをクリックします。
    3. 「リソース」で、「コマンドの実行」をクリックします。
    4. リストでコマンドを見つけて、「アクション」メニュー(アクション・メニュー)「コマンドの詳細の表示」の順にクリックします。

SSHを使用したノード・医師スクリプトの実行

管理対象ノードへのSSHアクセス権がある場合は、SSHを使用してNode Doctorスクリプトを実行して、ノードの問題をトラブルシューティングし、Node Doctorスクリプトを使用してサポート・バンドルを生成できます。

SSHを使用してNode Doctorスクリプトを実行するには、次のいずれかを実行します。

  • ワーカー・ノードのトラブルシューティング・ガイドを使用します。「ノード・プールの詳細」ページで、「ノードのトラブルシューティング」をクリックして「ワーカー・ノードのトラブルシューティング・ガイド」を表示し、「SSH接続」を選択して手順に従います。
  • この項のステップに従ってください。
  1. Node Doctorスクリプトを実行するワーカー・ノード・インスタンスとのSSH接続を確立します。
    SSH接続を確立する詳細な手順は、SSHを使用した管理対象ノードへの接続を参照してください。大部分のステップは次のとおりです。
    1. トラブルシューティングするワーカー・ノード・インスタンスのIPアドレスを確認し、メモします。

      たとえば、「クラスタ詳細」ページで、「ノード・プール」をクリックし、ワーカー・ノードを含むノード・プールをクリックします。「ノード」をクリックし、目的のノードの名前をクリックして「インスタンスの詳細」ページを表示します。インスタンスのIPアドレスが「インスタンス情報」タブに表示されます。

    2. ターミナル・ウィンドウで、ssh opc@<node_ip_address>を入力してワーカー・ノードに接続します。<node_ip_address>は、以前に書き留めたワーカー・ノード・インスタンスのIPアドレスです。たとえば、次のように入力します:
      ssh opc@192.0.2.254
      SSH秘密キーが、SSHユーティリティが期待するファイルまたはパスに格納されていない場合(たとえば、SSHユーティリティが秘密キーを~/.SSH/id_rsaに格納することを想定している場合)、秘密キーのファイル名と場所を明示的に指定する必要があります。詳細は、「SSHを使用した管理対象ノードへの接続」を参照してください。
  2. ワーカー・ノード・インスタンスとのSSH接続を確立したターミナル・ウィンドウで、次のいずれかのコマンドを入力します。
    • sudo /usr/local/bin/node-doctor.sh --check:潜在的な問題領域を特定するトラブルシューティング出力を、その領域に対応するドキュメントへのリンクとともに印刷します。
    • sudo /usr/local/bin/node-doctor.sh --generate:バンドル内のシステム情報を収集します。My Oracle Support (MOS)には、サポートチケットにバンドルをアップロードする手順が用意されています。

Node Doctorスクリプトのダウンロード、インストールおよび更新

2021年7月19日から作成されたワーカー・ノードには、すでにNode Doctorスクリプトがインストールされています。

2021年7月19日より前に作成されたワーカー・ノードには、Node Doctorスクリプトが事前インストールされていません。このようなワーカー・ノードでNode Doctorスクリプトを実行するには、スクリプトをダウンロードしてインストールする必要があります。Node Doctorスクリプトをダウンロードしてインストールするには、ワーカー・ノードへのSSHアクセス権が必要です。

ノート

Oracleでは、定期的に新しいバージョンのNode Doctorスクリプトがリリースされます。Node Doctorスクリプトを(2021年7月19日以降に作成されたワーカー・ノードでも)初めて実行する前に、次の手順の最後のステップに従って、スクリプトを最新バージョンに更新します。また、Node Doctorスクリプトを時々更新することをお薦めします。

管理対象ノードでNode Doctorスクリプトをダウンロード、インストールおよび更新するには:

  1. ワーカー・ノードとのSSH接続を確立します。
    SSH接続を確立する詳細な手順は、SSHを使用した管理対象ノードへの接続を参照してください。大部分のステップは次のとおりです。
    1. トラブルシューティングするワーカー・ノード・インスタンスのIPアドレスを確認し、メモします。

      たとえば、「クラスタ詳細」ページで、「ノード・プール」をクリックし、ワーカー・ノードを含むノード・プールをクリックします。「ノード」をクリックし、ノードの名前をクリックして「インスタンスの詳細」ページを表示します。インスタンスのIPアドレスが「インスタンス情報」タブに表示されます。

    2. ターミナル・ウィンドウで、ssh opc@<node_ip_address>を入力してワーカー・ノードに接続します。<node_ip_address>は、以前にノートにとっておいたワーカー・ノードのIPアドレスです。たとえば、次のように入力します:
      ssh opc@192.0.2.254
      SSH秘密キーが、SSHユーティリティが期待するファイルまたはパスに格納されていない場合(たとえば、SSHユーティリティが秘密キーを~/.SSH/id_rsaに格納することを想定している場合)、秘密キーのファイル名と場所を明示的に指定する必要があります。詳細は、「SSHを使用した管理対象ノードへの接続」を参照してください。
  2. ワーカー・ノードとのSSH接続を確立したターミナル・ウィンドウで、次のように入力して、/usr/local/binディレクトリにNode Doctorスクリプトをダウンロードしてインストールします。
    sudo curl -s -X GET https://objectstorage.<region-name>.oraclecloud.com/n/odx-oke/b/public/o/artifacts/prd/workernode/14d06c9-431/node-doctor --output /usr/local/bin/node-doctor.sh

    <region-name>は、クラスタが存在するリージョンです。例:

    sudo curl -s -X GET https://objectstorage.us-ashburn-1.oraclecloud.com/n/odx-oke/b/public/o/artifacts/prd/workernode/14d06c9-431/node-doctor --output /usr/local/bin/node-doctor.sh

    Node Doctorスクリプトを初めて実行する前に、次のステップを完了します。

  3. Node Doctorスクリプトをダウンロードしてワーカー・ノードにインストールした場合は、次のように入力して、Node Doctorスクリプトの最新バージョンを取得します。

    sudo /usr/local/bin/node-doctor.sh --update

    前述のコマンドを時々実行して、Node Doctorスクリプトを最新の状態に保つことをお薦めします。

これで、Node Doctorスクリプトを使用してワーカー・ノードの問題をトラブルシューティングできるようになりました。