ノードの自動修復を有効にし、ノードのヘルス問題を調査する - Amazon EKS

このページの改善にご協力ください

このユーザーガイドに貢献するには、すべてのページの右側のペインにある「GitHub でこのページを編集する」リンクを選択してください。

ノードの自動修復を有効にし、ノードのヘルス問題を調査する

ノードのヘルスとは、ワークロードを効果的に実行するためのノードの運用ステータスと機能を指します。正常なノードは、予想される接続を維持し、十分なリソースを持ち、中断することなくポッドを正常に実行できます。お使いのノードに関する詳細を取得する方法については、「ノードのヘルスステータスを表示する」および「kubectl と S3 を使用してマネージドノードのノードログを取得する」を参照してください。

ノードを正常に維持するために、Amazon EKS にはノードモニタリングエージェントノード自動修復の機能があります。

重要

ノードモニタリングエージェントノード自動修復を使用できるのは、Linux のみです。Windows では使用できません。

ノードモニタリングエージェント

ノードモニタリングエージェントはノードログを自動的に読み取り、特定のヘルス問題を検出します。ノードログを解析して障害を検出し、ワーカーノードに関するさまざまなステータス情報を表示します。ストレージやネットワーク形成の問題など、検出された問題のカテゴリごとに、ワーカーノードに専用の NodeCondition が適用されます。検出されたヘルスの問題の説明は、オブザーバビリティダッシュボードで確認できます。詳細については、「ノードのヘルスの問題」を参照してください。

ノードモニタリングエージェントは、すべての Amazon EKS Auto Mode クラスターの機能として用意されています。他のクラスタータイプでは、モニタリングエージェントを Amazon EKS アドオンとして追加できます。詳細については、「Amazon EKS アドオンを作成する」を参照してください。

ノードの自動修復

ノードの自動修復は、ノードのヘルスを継続的にモニタリングし、検出された問題に自動的に対応して、可能な場合はノードを置き換えることのできる追加機能です。これにより、最小限の手動操作でクラスターの全体的な可用性が向上します。ヘルスチェックが失敗すると、ノードは自動的に遮断され、ノードに新しいポッドがスケジュールされません。

ノードの自動修復自体は、kubelet および手動で削除されたノードオブジェクトの Ready 状態に対応できます。ノードモニタリングエージェントと組み合わせると、ノードの自動修復は、他の方法では検出されないより多くの状態に対応できます。これらの追加の状態には、KernelReadyNetworkingReady、および StorageReady があります。

この自動ノード修復は、クラスターへの結合の失敗、応答しない kubelets、アクセラレーター (デバイス) エラーの増加など、断続的なノードの問題に自動的に対処します。信頼性の向上により、アプリケーションのダウンタイムが短縮され、クラスターのオペレーションが向上します。ノードの自動修復では、DiskPressureMemoryPressurePIDPressure などの、報告された特定の問題を処理できません。Amazon EKS は AcceleratedHardwareReady NodeConditions に作用するまでに 10 分かかり、さらに他のすべての状態の場合は 30 分かかります。

また、マネージド型ノードグループは、2 つのシナリオで、安全上の理由からノードの修復を自動的に無効にします。以前から進行中の修復操作は、どちらの状態でも続行されます。

  • クラスターのゾーンシフトが Application Recovery Controller (ARC) を介してトリガーされた場合、それ以降のすべての修復オペレーションが停止します。

  • ノードグループに 5 つ以上のノードがあり、ノードグループ内のノードの 20% 以上が異常な状態である場合、修復オペレーションは停止します。

マネージド型ノードグループを作成または編集するときに、ノードの自動修復を有効にできます。

  • Amazon EKS コンソールを使用する場合は、マネージド型ノードグループの [ノード自動修復を有効にする] チェックボックスをオンにします。詳細については、「クラスターのマネージドノードグループを作成する」を参照してください。

  • AWS CLI を使用する場合は、--node-repair-config enabled=trueeks create nodegroup または eks update-nodegroup-config コマンドに追加します。

  • ノードの自動修復でマネージド型ノードグループを使用する eksctl ClusterConfig の例については、GitHub の「44-node-repair.yaml」を参照してください。

Amazon EKS は、以下を通じてノードの自動修復動作をより詳細に制御します。

  • maxUnhealthyNodeThresholdCount および maxUnhealthyNodeThresholdPercentage

    • これらのフィールドでは、異常なノードの数または割合のしきい値を指定できます。このしきい値を超えると、ノードの自動修復アクションが停止します。これにより、ノードの自動修復の「影響範囲」をより細かく制御できます。

    • 絶対数またはパーセンテージのいずれかを設定できますが、両方を設定することはできません。

  • maxParallelNodesRepairedCount および maxParallelNodesRepairedPercentage

    • これらのフィールドでは、同時にまたは並行して修復できるノードの最大数を、すべての異常なノードに対する数または割合として指定できます。これにより、ノード置換のペースをよりきめ細かく制御できます。

    • 異常なノードしきい値と同様に、絶対数またはパーセンテージのいずれかを設定できますが、両方を設定することはできません。

  • nodeRepairConfigOverrides

    • これは、特定の修復アクションの詳細なオーバーライドを設定できる複雑な構造です。これらのオーバーライドは、ノードが修復対象と見なされるまでの修復アクションと修復遅延時間を制御します。

    • この構造の特定のフィールドは次のとおりです。

      • nodeMonitoringCondition: ノードモニタリングエージェントによって報告された異常な状態。

      • nodeUnhealthyReason: ノードモニタリングエージェントがノードを異常と識別した理由。

      • minRepairWaitTimeMins: ノードが修復対象となるまでに、修復条件と異常理由が継続している必要がある最小時間 (分単位)。

      • repairAction: 上記の条件が満たされた場合に、修復システムが実行するアクション。

    • このフィールドを使用する場合は、構造内のすべてのフィールドを指定する必要があります。これらのオーバーライドのリストを指定することもできます。

    • nodeMonitoringCondition および nodeUnhealthyReason は、システムのデフォルト動作から逸脱することを示すために設定する手動テキスト入力です。

    • minRepairWaitTimeMins および repairAction フィールドを使用すると、システムのデフォルト動作からの逸脱を指定できます。

ノードのヘルスの問題

次の表は、ノードモニタリングエージェントが検出できるノードのヘルス問題を示しています。次の 2 種類の問題があります。

  • 症状 – インスタンスの置き換えや再起動などの修復アクションを必要とするターミナルの問題。自動修復が有効になっている場合、Amazon EKS はノードの置換または再起動として修復アクションを実行します。詳細については、「ノードの状態」を参照してください。

  • イベント – 一時的な問題または最適ではないノード設定。自動修復アクションは行われません。詳細については、「ノードイベント」を参照してください。

AcceleratedHardware ノードのヘルス問題

次の表に記載されている、緊急度が「条件」である問題について、モニタリング条件は AcceleratedHardwareReady です。

自動修復が有効になっている場合、リストされている修復アクションは、問題が検出されてから 10 分後に開始されます。XID エラーの詳細については、「NVIDIA GPU のデプロイおよび管理ドキュメント」の「Xid エラー」を参照してください。個々の XID メッセージの詳細については、「NVIDIA GPU Deployment and Management Documentation」の「Understanding Xid Messages」を参照してください。

名前 緊急度 説明

DCGMDiagnosticFailure

条件

DCGM アクティブ診断テストスイートからのテストケースが失敗しました。

DCGMError

条件

DCGM ホストプロセスへの接続を失ったか、確立できませんでした。

DCGMFieldError[Code]

イベント

DCGM は、フィールド識別子を介して GPU の劣化を検出しました。

DCGMHealthCode[Code]

イベント

DCGM ヘルスチェックが、致命的ではない方法で失敗しました。

DCGMHealthCode[Code]

条件

DCGM ヘルスチェックが、致命的な方法で失敗しました。

NeuronDMAError

条件

DMA エンジンで回復不可能なエラーが発生しました。

NeuronHBMUncorrectableError

条件

HBM で修正不可能なエラーが発生し、誤った結果が生成されました。

NeuronNCUncorrectableError

条件

Neuron Core の修正不可能なメモリエラーが検出されました。

NeuronSRAMUncorrectableError

条件

オンチップ SRAM でパリティエラーが発生し、誤った結果が生成されました。

NvidiaDeviceCountMismatch

イベント

NVML で認識される GPU の数が、ファイルシステムの NVIDIA デバイス数と一致していません。

NvidiaDoubleBitError

条件

GPU ドライバーによってダブルビットエラーが生成されました。

NvidiaNCCLError

イベント

NVIDIA Collective Communications ライブラリ (libnccl) でセグメンテーション違反が発生しました。

NvidiaNVLinkError

条件

NVLink エラーが GPU ドライバーによって報告されました。

NvidiaPCIeError

イベント

送信エラーから回復するために PCIe リプレイがトリガーされました。

NvidiaPageRetirement

イベント

GPU ドライバーがメモリページを廃止としてマークしました。これは、1 つのダブルビットエラーが起こった場合、または同じアドレスで 2 つのシングルビットエラーが起こった場合に発生する可能性があります。

NvidiaPowerError

イベント

GPU の電力使用率が許容しきい値を超えました。

NvidiaThermalError

イベント

GPU の熱ステータスが許容しきい値を超えました。

NvidiaXID[Code]Error

条件

重大な GPU エラーが発生しました。

NvidiaXID[Code]Warning

イベント

重要ではない GPU エラーが発生しました。

ContainerRuntime ノードのヘルスの問題

次の表に記載されている、緊急度が「条件」である問題について、モニタリング条件は ContainerRuntimeReady です。

名前 緊急度 説明

ContainerRuntimeFailed

イベント

コンテナランタイムはコンテナの作成に失敗しました。繰り返し発生する場合は、報告された問題に関連している可能性があります。

DeprecatedContainerdConfiguration

イベント

廃止されたイメージマニフェストバージョン 2、スキーマ 1 を使用するコンテナイメージが、最近 containerd を介してノードにプルされました。

KubeletFailed

イベント

kubelet が失敗状態になりました。

LivenessProbeFailures

イベント

ライブネスプローブの障害が検出されました。アプリケーションコードの問題や、繰り返し発生する場合はタイムアウト値が不十分である可能性を示しています。

PodStuckTerminating

条件

ポッドが終了しているか、または長時間停止していました。これは、ポッドの状態の進行を妨げる CRI エラーが原因で発生する可能性があります。

ReadinessProbeFailures

イベント

レディネスプローブの障害が検出されました。アプリケーションコードの問題や、繰り返し発生する場合はタイムアウト値が不十分である可能性を示しています。

[Name]RepeatedRestart

イベント

systemd ユニットが頻繁に再起動しています。

ServiceFailedToStart

イベント

systemd ユニットの起動に失敗しました。

カーネルノードのヘルスの問題

次の表に記載されている、緊急度が「条件」である問題について、モニタリング条件は KernelReady です。

名前 緊急度 説明

AppBlocked

イベント

タスクが長時間スケジュールからブロックされており、通常は入力または出力がブロックされていることが原因で発生します。

AppCrash

イベント

ノード上のアプリケーションがクラッシュしました。

ApproachingKernelPidMax

イベント

プロセスの数が、現在の kernel.pid_max 設定で使用可能な PID の最大数に近づいています。最大数に到達すると、これ以上プロセスを起動することはできません。

ApproachingMaxOpenFiles

イベント

開いているファイルの数は、現在のカーネル設定で可能な開いているファイルの最大数に近づいています。最大数に到達すると、新しいファイルを開くことができなくなります。

ConntrackExceededKernel

イベント

接続追跡がカーネルの最大数を超え、新しい接続を確立できなかったため、パケットロスが発生する可能性があります。

ExcessiveZombieProcesses

イベント

完全に再要求できないプロセスが大量に蓄積されています。これはアプリケーションの問題を示しており、システムプロセスの制限に達する可能性があります。

ForkFailedOutOfPIDs

条件

フォークまたは実行の呼び出しが失敗したのは、システムがプロセス ID またはメモリ不足であるためです。これは、ゾンビプロセスまたは物理メモリの枯渇が原因である可能性があります。

KernelBug

イベント

CPU またはメモリの使用率が高いノードが原因でイベント処理が遅れることがありますが、カーネルのバグが Linux カーネル自体によって検出および報告されました。

LargeEnvironment

イベント

このプロセスの環境変数の数は予想よりも多く、enableServiceLinks が true に設定されている多くのサービスが原因で発生する可能性があります。このため、パフォーマンスの問題が発生する可能性があります。

RapidCron

イベント

このノードでは、cron ジョブが 5 分間隔よりも速く実行されています。このため、ジョブが大量のリソースを消費すると、パフォーマンスに影響が出る可能性があります。

SoftLockup

イベント

CPU が一定時間停止しました。

ネットワークノードのヘルスの問題

次の表に記載されている、緊急度が「条件」である問題について、モニタリング条件は NetworkingReady です。

名前 緊急度 説明

BandwidthInExceeded

イベント

インバウンド集計帯域幅がインスタンスの最大値を超えたため、パケットはキューに入れられたか、ドロップされました。

BandwidthOutExceeded

イベント

アウトバウンド集計帯域幅がインスタンスの最大値を超えたため、パケットはキューに入れられたか、ドロップされました。

ConntrackExceeded

イベント

接続追跡がインスタンスの最大数を超え、新しい接続を確立できなかったため、パケットロスが発生する可能性があります。

IPAMDInconsistentState

イベント

ディスク上の IPAMD チェックポイントの状態が、コンテナランタイム内の IP を反映していません。

IPAMDNoIPs

イベント

IPAMD が IP アドレスから外れています。

IPAMDNotReady

条件

IPAMD が API サーバーに接続できません。

IPAMDNotRunning

条件

Amazon VPC CNI プロセスは実行中であることが確認されませんでした。

IPAMDRepeatedlyRestart

イベント

IPAMD サービスで複数の再起動が発生しました。

InterfaceNotRunning

条件

このインターフェイスは実行されていないか、ネットワークの問題があります。

InterfaceNotUp

条件

このインターフェイスは起動していないか、ネットワークの問題があります。

KubeProxyNotReady

イベント

Kube-proxy がリソースの監視または一覧表示に失敗しました。

LinkLocalExceeded

イベント

ローカルプロキシサービスへのトラフィックの PPS がネットワークインターフェイスの最大値を超えたため、パケットがドロップされました。

MACAddressPolicyMisconfigured

イベント

systemd-networkd のリンク設定で、MACAddressPolicy の値が正しくありません。

MissingDefaultRoutes

イベント

デフォルトのルートルールが見つかりません。

MissingIPRoutes

イベント

Pod IP のルートがありません。

MissingIPRules

イベント

Pod IP のルールがありません。

MissingLoopbackInterface

条件

このインスタンスには、ループバックインターフェイスがないため、ローカル接続によってはサービスの不具合が発生します。

NetworkSysctl

イベント

このノードのネットワーク sysctl 設定が正しくない可能性があります。

PPSExceeded

イベント

双方向 PPS がインスタンスの最大値を超えたため、パケットはキューに入れられたか、ドロップされました。

PortConflict

イベント

ポッドが hostPort を使用する場合、ホストの既にバインドされているポートを上書きするように iptables ルールを書き込みできるため、API サーバーが kubelet にアクセスできなくなる可能性があります。

UnexpectedRejectRule

イベント

iptables で予期しない REJECT または DROP ルールが検出されたため、予想されたトラフィックがブロックされる可能性があります。

ストレージノードのヘルスの問題

次の表に記載されている、緊急度が「条件」である問題について、モニタリング条件は StorageReady です。

名前 緊急度 説明

EBSInstanceIOPSExceeded

イベント

インスタンスの最大 IOPS を超えました。

EBSInstanceThroughputExceeded

イベント

インスタンスの最大スループットを超えました。

EBSVolumeIOPSExceeded

イベント

特定の EBS ボリュームに対する最大 IOPS を超えました。

EBSVolumeThroughputExceeded

イベント

特定の Amazon EBS ボリュームに対する最大スループットを超えました。

EtcHostsMountFailed

イベント

kubelet-container オペレーション中にユーザーデータを /var/lib/kubelet/pods に再マウントしたため、kubelet が生成した /etc/hosts のマウントに失敗しました。

IODelays

イベント

入力または出力の遅延がプロセスで検出されました。過剰な場合は入力/出力プロビジョニングが不十分である可能性があります。

KubeletDiskUsageSlow

イベント

kubelet は、ファイルシステムにアクセスしようとしているときにディスクの使用が遅いことを報告しています。これは、ディスクの入出力が不十分である、またはファイルシステムに問題がある可能性を示しています。

XFSSmallAverageClusterSize

イベント

XFS 平均クラスターサイズが小さいことは、空き領域が過度に断片化されていることを示しています。このため、inode や空き領域が使用可能であっても、ファイルを作成できない場合があります。