Node DoctorスクリプトによるKubernetesクラスタのノードの問題のトラブルシューティング
Node Doctorスクリプトを使用して、Kubernetes Engine (OKE)を使用して作成したクラスタ内のワーカー・ノードをホストするコンピュート・インスタンスの問題を解決する方法をご紹介します。
Node Doctorスクリプトは、インスタンスに関する問題の解決に役立つように、管理対象ノードのコンピュート・インスタンスに事前にインストールされています。実行方法に応じて、Node Doctorスクリプトは次のようになります。
- 潜在的な問題領域を特定するトラブルシューティング出力を、それらの領域に対処するためのドキュメントへのリンクとともに出力します。
- システム情報をバンドルに収集します。My Oracle Support (MOS)には、バンドルをサポートチケットにアップロードする手順が記載されています。
「Kubernetesのノード条件」に「アクティブ」以外のものがあるか、「ノード状態」に「準備完了」以外のものがある場合は、Node Doctorスクリプトを使用して問題のトラブルシューティングを行います。
Node Doctorスクリプトは次のように実行できます。
- SSHの使用
- コマンド実行機能の使用
ワーカー・ノードのトラブルシューティング・ガイドは、コンソールからNode Doctorスクリプトを起動する便利な方法です。ワーカー・ノードのトラブルシューティング・ガイドには、SSHまたはコマンド実行機能を使用してノード・ドクター・スクリプトを実行するための動的に移入されたコマンドが用意されています。ワーカー・ノードのトラブルシューティング・ガイドにアクセスするには、「ノード・プールの詳細」ページの「ノードのトラブルシューティング」ボタンをクリックし、「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スクリプトは、管理対象ノード・プールのワーカー・ノードで実行できますが、仮想ノード・プールでは実行できません。
コマンド実行機能を使用したノード・ドクター・スクリプトの実行
「実行コマンド」機能は、ノードの問題のトラブルシューティングや、ノード・ドクター・スクリプトを使用したサポート・バンドルの生成に使用できます。コマンド実行機能の使用の詳細は、インスタンスでのコマンドの実行を参照してください。
「コマンドの実行」機能を使用してノード・ドクター・スクリプトを実行するには、次のいずれかを行います。
- 『Worker Node Troubleshooting Guide』を使用します。「ノード・プールの詳細」ページで、「ノードのトラブルシューティング」をクリックしてワーカー・ノードのトラブルシューティング・ガイドを表示し、「コマンドの実行」を選択して、指示に従います。
- この項のステップに従います。
必須IAMポリシー
管理者向け: コマンド実行機能のポリシーを記述するには、次を実行します:
- コマンドの実行機能を使用して、コマンドを発行したり、コマンドを取り消したり、コンパートメント内のインスタンスのコマンド出力を表示したりできるようにするには、次のポリシーを記述します:
Allow any-user to use instance-agent-command-execution-family in compartment id <compartment-ocid> where request.instance.id=target.instance.id
-
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スクリプトを実行するコマンドの作成
インスタンスでNode Doctorスクリプトを実行するコマンドを作成するには:
- 「クラスタ詳細」ページで「ノード・プール」をクリックし、トラブルシューティングする管理対象ノードを含む管理対象ノード・プールをクリックします。
- 「ノード」で、トラブルシューティングするノードの名前をクリックして、「インスタンスの詳細」ページを表示します。
- 「リソース」で、「コマンドの実行」をクリックします。
- 「コマンド作成」をクリックします。
- コマンドの名前を入力します。機密情報の入力は避けてください。
- 「タイムアウト(秒)」ボックスに、コンピュート・インスタンスのコマンド実行プラグインがタイムアウトするまでにインスタンスでコマンドを実行する時間を入力します。タイマーは、プラグインがコマンドを開始すると開始されます。タイムアウトなしの場合は、0を入力します。
- 「スクリプトの追加」セクションで、コンピュート・インスタンスのコマンド実行プラグインをインスタンスで実行するスクリプトをアップロードします。「スクリプトの貼付け」オプションを選択し、次のいずれかのコマンドをボックスに貼り付けます:
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)には、バンドルをサポートチケットにアップロードする手順が記載されています。
- 「出力タイプ」セクションで、コマンドの出力を保存する場所を選択します:
- テキストとして出力: 出力はプレーン・テキストとして保存されます。「インスタンスの詳細」ページで出力を確認できます。
- オブジェクト・ストレージ・バケットに出力: 出力はオブジェクト・ストレージ・バケットに保存されます。バケットの選択「オブジェクト名」ボックスに、出力ファイルの名前を入力します。機密情報の入力は避けてください。
- オブジェクト・ストレージURLに出力: 出力はオブジェクト・ストレージURLに保存されます。URLを入力します。
- 「コマンド作成」をクリックします。
Node Doctorスクリプトの出力の表示
Node Doctorスクリプトの出力を表示する方法は、出力がオブジェクト・ストレージの場所に保存されたか、プレーン・テキスト・ファイルとして保存されたかによって異なります。次に例を示します。
- Node Doctorスクリプトの出力がオブジェクト・ストレージの場所に保存された場合は、次のいずれかを実行します:
- 保存されたバケットからレスポンス・オブジェクトをダウンロードします。
- オブジェクト・ストレージの事前認証済リクエストのURLに移動します。
- Node Doctorスクリプト出力がプレーン・テキスト・ファイルとして保存された場合は、次を実行します:
- ナビゲーション・メニューを開き、「コンピュート」をクリックします。「コンピュート」で、「インスタンス」をクリックします。
- 関心のあるインスタンスをクリックします。
- 「リソース」で、「コマンドの実行」をクリックします。
- リストでコマンドを見つけて、 をクリックし、「コマンドの詳細の表示」をクリックします。
SSHを使用したNode Doctorスクリプトの実行
管理対象ノードへのSSHアクセス権がある場合は、SSHを使用してNode Doctorスクリプトを実行し、ノードの問題をトラブルシューティングし、Node Doctorスクリプトを使用してサポート・バンドルを生成できます。
SSHを使用してノード・ドクター・スクリプトを実行するには、次のいずれかを行います。
- 『Worker Node Troubleshooting Guide』を使用します。「ノード・プールの詳細」ページで、「ノードのトラブルシューティング」をクリックしてワーカー・ノードのトラブルシューティング・ガイドを表示し、「SSH接続」を選択して、指示に従います。
- この項のステップに従います。
- Node Doctorスクリプトを実行するワーカー・ノード・インスタンスとのSSH接続を確立します。SSH接続を確立する詳細な手順は、SSHを使用した管理対象ノードへの接続を参照してください。大まかなステップは次のとおりです。
- トラブルシューティングするワーカー・ノード・インスタンスのIPアドレスを確認し、それをノートにとります。
たとえば、「クラスタ詳細」ページで「ノード・プール」をクリックし、ワーカー・ノードを含むノード・プールをクリックします。「ノード」をクリックし、目的のノードの名前をクリックして「インスタンスの詳細」ページを表示します。インスタンスのIPアドレスが「インスタンス情報」タブに表示されます。
- ターミナル・ウィンドウで、
ssh opc@<node_ip_address>
と入力してワーカー・ノードに接続します。<node_ip_address>
は、以前にノートにとっておいたワーカー・ノード・インスタンスのIPアドレスです。たとえば、次を入力します:
SSHユーティリティが予測するファイルまたはパスにSSH秘密キーが格納されていない場合(たとえば、SSHユーティリティが秘密キーを~/.ssh/id_rsaに格納することを期待している場合があります)、秘密キー・ファイル名と場所を明示的に指定する必要があります。詳細は、「SSHを使用した管理対象ノードへの接続」を参照してください。ssh opc@192.0.2.254
- トラブルシューティングするワーカー・ノード・インスタンスのIPアドレスを確認し、それをノートにとります。
- ワーカー・ノード・インスタンスとの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スクリプトをダウンロード、インストールおよび更新するには:
- ワーカー・ノードとのSSH接続を確立します。SSH接続を確立する詳細な手順は、SSHを使用した管理対象ノードへの接続を参照してください。大まかなステップは次のとおりです。
- トラブルシューティングするワーカー・ノード・インスタンスのIPアドレスを確認し、それをノートにとります。
たとえば、「クラスタ詳細」ページで「ノード・プール」をクリックし、ワーカー・ノードを含むノード・プールをクリックします。「ノード」をクリックし、ノードの名前をクリックして「インスタンスの詳細」ページを表示します。インスタンスのIPアドレスが「インスタンス情報」タブに表示されます。
- ターミナル・ウィンドウで、
ssh opc@<node_ip_address>
と入力してワーカー・ノードに接続します。<node_ip_address>
は、以前にノートにとっておいたワーカー・ノードのIPアドレスです。たとえば、次を入力します:
SSHユーティリティが予測するファイルまたはパスにSSH秘密キーが格納されていない場合(たとえば、SSHユーティリティが秘密キーを~/.ssh/id_rsaに格納することを期待している場合があります)、秘密キー・ファイル名と場所を明示的に指定する必要があります。詳細は、「SSHを使用した管理対象ノードへの接続」を参照してください。ssh opc@192.0.2.254
- トラブルシューティングするワーカー・ノード・インスタンスのIPアドレスを確認し、それをノートにとります。
- ワーカー・ノードとの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スクリプトを初めて実行する前に、次のステップを完了します。
-
Node Doctorスクリプトがワーカー・ノードにダウンロードおよびインストールされたら、次のように入力して最新バージョンのNode Doctorスクリプトを取得します。
sudo /usr/local/bin/node-doctor.sh --update
Node Doctorスクリプトを最新の状態に保つには、前述のコマンドを時々実行することをお薦めします。
これで、Node Doctorスクリプトを使用して、ワーカー・ノードの問題をトラブルシューティングできます。