失敗した状態の Azure Kubernetes Service クラスターまたはノードのトラブルシューティング
この記事では、失敗状態になった Microsoft Azure Kubernetes Service (AKS) クラスターまたはノードのトラブルシューティング方法について説明します。
一般的な原因
障害が発生したクラスターまたはノード プールの一般的な原因を次に示します。
原因 | リファレンス |
---|---|
カスタム スクリプト拡張機能 (CSE) 仮想マシン (VM) 拡張機能のプロビジョニング エラー | CSE エラーが原因のノードの準備ができていないエラーのトラブルシューティング |
主要な Azure リソースを使用できない | |
ゾーン/リージョンの容量がないために VM の割り当てが失敗する | |
コア クォータの超過による VM 割り当てエラー | Quotaexceeded エラー |
お客様が課した制限 | |
ワークロードの問題 |
クラスター/ノードが失敗する一般的なエラーの基本的なトラブルシューティング
次の表は、クラスターまたはノードが失敗状態に入る原因となる一般的なエラー、その説明、およびこれらのエラーを解決するための基本的なトラブルシューティング方法の概要を示しています。
エラー | 説明 | トラブルシューティング方法 |
---|---|---|
OutboundConnFailVMExtensionError | このエラーは、送信接続がないために VM 拡張機能のインストールまたは更新に失敗したことを示します。 | VM または VM スケール セットのネットワーク セキュリティ グループ (NSG) 規則とファイアウォール設定を確認します。 VM または VM スケール セットがこれらのエンドポイント ( https://aka.ms/aks/outbound 、 https://aka.ms/aks/ssh 、 https://aka.ms/aks/agent 、 https://aka.ms/aks/containerinsights ) にアクセスできることを確認します。 |
ドレイン エラー | このエラーは、アップグレード操作の前にノードのドレインに失敗したことを示します。 | kubectl コマンド ( kubectl get pods --all-namespaces -o wide と kubectl describe pod <pod-name> -n <namespace> ) を使用して、ノード上のポッドの状態とイベントを確認します。 終了または不明な状態で、またはイベントにエラーや警告が表示された状態でスタックしているポッドを探します。 場合によっては、ポッドを強制的に削除するか、ノードで kubelet サービスを再起動する必要があります。 |
SubscriptionNotRegistered エラー | このエラーは、サブスクリプションが AKS リソース プロバイダーを使用するように登録されていないことを示します。 | az provider register --namespace Microsoft.ContainerService コマンドを使用してサブスクリプションを登録します。 |
RequestDisallowedByPolicy エラー | このエラーは、サブスクリプションまたはリソース グループに適用されたポリシーによって操作がブロックされていることを示します。 | ポリシーの詳細とポリシー割り当てのスコープを確認します。 操作を許可するには、ポリシーを変更または除外することが必要な場合があります。 |
QuotaExceeded エラー | このエラーは、操作がリソースの種類またはリージョンのクォータ制限を超えていることを示します。 | Azure portal、Azure CLI、または Azure PowerShell を使用して、リソースの種類またはリージョンの現在のクォータ使用量とクォータ制限を確認します。 未使用のリソースを削除したり、クォータの引き上げを要求したりする必要がある場合があります。 |
PublicIPCountLimitReached エラー | このエラーは、操作がサブスクリプションまたはリージョンに作成できるパブリック IP アドレスの最大数に達したことを示します。 | Azure portal、Azure CLI、または Azure PowerShell を使用して、サブスクリプションまたはリージョンの現在のパブリック IP アドレスの使用量と制限を確認します。 未使用のパブリック IP アドレスの一部を削除するか、パブリック IP アドレスの制限の引き上げを要求する必要がある場合があります。 |
OverconstrainedAllocationRequest エラー | このエラーは、操作がリージョンに要求された VM サイズを割り当てに失敗したことを示します。 | Azure portal、Azure CLI、または Azure PowerShell を使用して、リージョン内の VM サイズの可用性を確認します。 別の VM サイズまたは別のリージョンを選択することが必要な場合があります。 |
ReadOnlyDisabledSubscription エラー | このエラーは、サブスクリプションが現在無効であり、読み取り専用に設定されていることを示します。 | 課金の問題、期限切れのクレジット、またはポリシー違反によってサブスクリプションが中断された可能性があるため、サブスクリプションのアクセス許可を確認して調整します。 |
クラスター/ノードの障害の原因となっている可能性のあるその他の問題の基本的なトラブルシューティング
次の表では、クラスターまたはノードが障害状態に入る原因となる可能性のあるその他の問題、その説明、およびこれらの問題を解決するための解決策について説明します。
問題 | 説明 | 解決方法 |
---|---|---|
サブネットのサイズが小さすぎます | サブネットに必要なノード数に対応できる十分な領域がないため、この操作ではクラスターを作成または更新できません。 | Azure portal、Azure CLI、または Azure PowerShell を使用して、ノード プールを削除し、サブネット サイズが大きい新しいノード プールを作成します。 |
仮想ネットワークがブロックされている | ファイアウォールまたはカスタム ドメイン ネーム システム (DNS) 設定によってノードからの送信接続がブロックされるため、この操作はクラスター API サーバーまたは Kubernetes コントロール プレーンと結合できません。 | ファイアウォールでノードのトラフィックを許可し、Azure portal、Azure CLI、または Azure PowerShell を使用して Azure への DNS 解決を設定します。 |
PDB の問題 | PDB によって 1 つ以上のポッドの削除が停止されたため、この操作ではクラスターを更新できません。 PDB は、特定の期間中に自発的に終了できるポッドの数を制限するリソースです。 | 一時的に PDB を削除し、クラスターを調整してから、kubectl コマンド ライン ツールを使用して PDB をもう一度追加します。 |
インフラストラクチャの問題 | Azure 内のリソースを管理する Azure Resource Manager (ARM) サービスの内部的な問題のため、この操作ではクラスターを更新できません。 | Azure CLI または Azure PowerShell を使用して、ノード プールごとにエージェント プールの調整を行い、マネージド クラスターの調整を行います。 |
API サーバーエラー | 停止またはバグのため、この操作はクラスター API サーバーまたは Kubernetes コントロール プレーンに到達できません。 | AKS サポート チームに報告し、関連するログと診断情報を提供します。 ログと診断情報は、Azure portal、Azure CLI、または Azure PowerShell を使用して取得できます。 |
Note
- 前の表で説明した操作は、顧客側からトリガーされた更新 (
PUT
) 操作を指します。 - Kubernetes には、コントローラー内にコンポーネントがあります。 これにより、クラスターの状態や、Kubelet のコンテナーの実行やクラウド プロバイダーのロード バランサーなどの潜在的な外部状態など、世界の実際の状態が保証されます。 これは、オブジェクトで指定された目的の状態に合わせて配置されます。 この配置プロセスは、コントローラーの重要な機能です。 AKS の場合、このコンポーネントにより、AKS クラスターの状態が目的の構成と一致することが保証されます。 手動でトリガーするには、
az resource update --ids <AKS cluster id>
を実行します。az aks show -n <cluster name> -g <cluster resource group> -o json --query id
を実行して、AKS クラスター ID を取得できます。 実際の状態と目的の状態に違いがある場合は、これらの不一致を修正するために必要なアクションを実行します。
プロビジョニング状態チェック
クラスターの状態を確認するには、 プロビジョニング状態チェックを選択します。 次に、クラスターとエージェント プールのプロビジョニング状態が表示されます。
シナリオ 1: クラスターが失敗状態である
この問題を解決するには、エラーの原因となる操作を取得し、エラーを特定します。 クラスターに障害が発生する可能性がある 2 つの一般的な操作エラーを次に示します。
- クラスターの作成に失敗した
- クラスターのアップグレードに失敗しました
最近作成またはアップグレードされたクラスターが失敗状態の場合は、次の方法を使用してエラーのトラブルシューティングを行います。
アクティビティ ログを調べて、障害の根本原因を特定します。
アクティビティ ログは、Azure portalazure CLI または Azure PowerShell 使用して表示できます。
アクティビティ ログには、エラーに関連付けられているエラー コードとメッセージが表示されます。 特定のエラーの詳細については、「 クラスター/ノードの障害の原因となっている一般的なエラーの基本的なトラブルシューティング 」セクションを参照してください。
AKS の問題の診断と解決機能を使用して 一般的な問題のトラブルシューティングと解決を行います。
Note
この機能は、Azure portal と Azure CLI でのみ使用できます。
Azure portal を使用して失敗したクラスターのアクティビティ ログを表示する
Azure portal から失敗したクラスターのアクティビティ ログを表示するには、次の手順に従います。
Azure portal で、 リソース グループ ページに移動し、クラスターを含むリソース グループを選択します。
Overview ページで、リソースの一覧からクラスター名を選択します。
クラスター ページで、左側のメニューから Activity log を選択します。
Activity ログ ページでは、イベントを Status、Timespan、Event initiated by、Event カテゴリでフィルター処理できます。 たとえば、Status ドロップダウン リストから Failed を選択すると、失敗したイベントのみが表示されます。
イベントの詳細を確認するには、一覧からイベント名を選択します。 新しいウィンドウが開き、イベントの概要、プロパティ、JSON データが表示されます。 JSON データをファイルとしてダウンロードすることもできます。
イベントに関連付けられているエラー コードとメッセージを確認するには、イベントの概要の Status セクションまで下にスクロールします。 エラー情報は、プロパティと JSON データ セクションでも確認できます。
Azure CLI を使用して失敗したクラスターのアクティビティ ログを表示する
Azure CLI を使用して、失敗したクラスターのアクティビティ ログを表示する場合は、次の手順に従います。
マシンに Azure CLI をインストールし、Azure アカウントでログインします。
az group list
コマンドを使用してサブスクリプション内のリソース グループを一覧表示し、クラスターを含むリソース グループの名前を見つけます。--resource-group
パラメーターを指定してaz resource list
コマンドを使用してリソース グループ内のリソースを一覧表示し、クラスターの名前を見つけます。--resource-group
パラメーターと--resource
パラメーターを指定して、az monitor activity-log list
コマンドを使用してクラスターのアクティビティ ログを一覧表示します。 また、--status
、--start-time
、--end-time
、--caller
、および--filter
パラメーターを使用して、さまざまな条件でイベントをフィルター処理することもできます。 たとえば、--status Failed
を使用して、失敗したイベントのみを表示できます。--resource-group
、--resource
、および--event-id
パラメーターを指定して、az monitor activity-log show
コマンドを使用して、特定のイベントの詳細を表示します。 イベント ID は、前のコマンドの出力から確認できます。 出力には、イベントの概要、プロパティ、JSON データが含まれます。--output
パラメーターを使用して出力形式を変更することもできます。イベントに関連付けられているエラー コードとメッセージを表示するには、コマンド出力で
statusMessage
フィールドを探します。 エラー情報は、プロパティと JSON データ セクションでも確認できます。
障害が発生したクラスターに対して AKS の問題の診断と解決機能を使用する
Azure portal で AKS クラスター リソースに移動し、左側のメニューから Diagnose と問題の解決 を選択します。 診断チェックを実行し、推奨されるソリューションを取得するために選択できるカテゴリとシナリオの一覧が表示されます。
Azure CLI で、--name
パラメーターと--resource-group
パラメーターと共に az aks collect
コマンドを使用して、クラスター ノードから診断データを収集します。 --storage-account
パラメーターと--sas-token
パラメーターを使用して、データをアップロードする Azure Storage アカウントを指定することもできます。 出力には、結果と推奨されるアクションを表示できる Diagnose と [問題の解決 ] ブレードへのリンクが含まれます。
Diagnose と [問題の解決] ブレードで、カテゴリとして [クラスターの問題を選択できます。 問題が検出された場合は、解決できる解決策の一覧が表示されます。
シナリオ 2: ノードが失敗状態である
まれに、Azure Disk デタッチ操作が部分的に失敗し、ノード VM が失敗状態になる場合があります。
この問題を解決するには、次のいずれかの方法を使用して VM の状態を手動で更新します。
可用性セットに基づくクラスターの場合は、次の az vm update コマンドを実行します。
az vm update --resource-group <resource-group-name> --name <vm-name>
VM スケール セットに基づくクラスターの場合は、次の az vmss update-instances コマンドを実行します。
az vmss update-instances --resource-group <resource-group-name> --name <scale-set-name> --instance-id <vm-or-scale-set-id>
シナリオ 3: ノード プールが失敗状態である
この問題は、ノード プールをバックアップする VM スケール セットまたは可用性セットで、プロビジョニング、スケーリング、または更新中にエラーが発生した場合に発生する可能性があります。 この問題は、十分な容量、クォータ制限、ネットワークの問題、ポリシー違反、リソース ロック、または VM が適切に割り当てまたは構成されないその他の要因が原因である可能性があります。
この問題のトラブルシューティングを行うには、これらの手順に従います。
az aks nodepool show
コマンドを使用して、ノードプールの状態を確認します。 プロビジョニング状態がFailed
場合は、エラー メッセージとコードが出力に表示されます。az vmss show
またはaz vm availability-set show
コマンドを使用して、VM スケール セットまたは可用性セットの状態を確認します。 プロビジョニング状態がFailed
場合は、エラー メッセージとコードが出力に表示されます。az vmss list-instances
またはaz vm list
command を使用して、ノード プール内の個々の VM の状態を確認します。 いずれかの VM がFailed
またはUnhealthy
状態の場合は、エラー メッセージとコードが出力に表示されます。- VM スケール セットまたは可用性セットのアクティビティ ログと診断設定を調べて、障害の原因を示すイベントまたはアラートがあるかどうかを確認します。 Azure portal、Azure CLI、または Azure Monitor API を使用して、アクティビティ ログと診断設定にアクセスできます。
- ノード プールがデプロイされているリージョンとサブスクリプションのクォータと容量を確認します。
az vm list-usage
コマンドまたは Azure portal を使用して、クォータと容量を確認できます。 クォータまたは容量の制限に達した場合は、未使用のリソースの増加または削除を要求できます。 - ノード プールのポリシーとロールの割り当てを確認します。
az policy
コマンドとaz role
コマンドまたは Azure portal を使用して、ポリシーの定義、割り当て、コンプライアンス、除外を確認できます。az role assignment
コマンドまたは Azure portal を使用して、ノード プールのロールの割り当てとアクセス許可を確認することもできます。 - ノード プールのリソース ロックを確認します。
az lock
コマンドまたは Azure portal を使用して、ロック レベル、スコープ、およびメモを確認できます。 必要に応じて、ロックを削除または更新することもできます。
その他のログ記録と診断ツール
上記のトラブルシューティング方法で問題が解決しない場合は、次のログ記録と診断ツールを使用して詳細情報を収集し、根本原因を特定できます。
コンテナーに対する Azure Monitor:
このサービスは、AKS クラスターとノードからメトリックとログを収集して分析します。 Azure Monitor for containers では、クラスターとノードの正常性、パフォーマンス、可用性を監視できます。 これを使用して、コンテナー ログ、kubelet ログ、ノード ブート診断ログを表示することもできます。
-
このツールは、ノードとポッドのログ、ネットワーク情報、およびクラスター構成を AKS クラスターから収集し、Azure ストレージ アカウントにアップロードします。 このツールは、DNS 解決、ネットワーク接続、ノードの状態など、クラスターの一般的な問題のトラブルシューティングに役立ちます。 これを使用して、収集されたログが添付されたサポート要求を生成することもできます。
AKS 診断
このツールは、AKS クラスターとノードに対して一連のチェックを実行し、一般的な問題に対する推奨事項と修復手順を提供します。 このツールは、クラスターの作成、アップグレード、スケーリング、ネットワーク、ストレージ、セキュリティに関連する問題のトラブルシューティングに役立ちます。 これを使用して、診断結果が添付されたサポート要求を生成することもできます。
お問い合わせはこちらから
質問がある場合やヘルプが必要な場合は、サポート要求を作成するか、Azure コミュニティ サポートにお問い合わせください。 Azure フィードバック コミュニティに製品フィードバックを送信することもできます。