AKS クラスターの起動に関する基本的なトラブルシューティング

この記事では、Microsoft Azure Kubernetes Service (AKS) クラスターを正常に起動できない場合に使用する基本的なトラブルシューティング方法について説明します。

前提条件

Azure CLI からエラーを表示する

Azure CLI を使用してクラスターを起動すると、操作が失敗した場合にエラーが出力として記録されます。 コマンド、ユーザー入力、および操作の出力がコンソールでどのように表示されるかを次に Bash 示します。

$ az aks start --resource-group myResourceGroup --name MyManagedCluster

(VMExtensionProvisioningError) Unable to establish outbound connection from agents, please see https://video2.skills-academy.com/en-us/troubleshoot/azure/azure-kubernetes/error-code-outboundconnfailvmextensionerror and https://aka.ms/aks-required-ports-and-addresses for more information.  
Details: instance 3 has extension error details : {vmssCSE error messages : {vmssCSE exit status=50, output=AGE_SHA=sha-16fd35

これらのエラーには、多くの場合、クラスターの開始操作で問題が発生した内容の詳細な説明が含まれており、詳細を含む記事へのリンクが提供されます。 さらに、Azure CLI 操作によって生成されるエラーに基づいて、トラブルシューティングに関する記事を参照として使用できます。

Azure portalでエラーの詳細を表示する

Azure portalのエラーの詳細を表示するには、Azure アクティビティ ログを調べます。 Azure portalでアクティビティ ログの一覧を見つけるには、アクティビティ ログを検索します。 または、[ 通知 ] (ベル アイコン) を選択し、 アクティビティ ログで [その他のイベント] を選択します。

[アクティビティ ログ] ページのログの一覧には、[操作名] 列の値が [マネージド クラスターの開始] という名前の行エントリが含まれています。 列値 によって開始される 対応するイベントは、職場または学校アカウントの名前に設定されます。 操作が成功した場合は、[ 状態] 列の値に [Accepted]\(受け入れ済み\) と表示されます

失敗した開始操作を示す AKS クラスター アクティビティ ログ ブレードのスクリーンショット。

代わりにエラーが発生した場合はどうすればよいですか? その場合、[ マネージド クラスターの開始 ] 操作 の [状態] フィールドに [失敗] と表示されます。 クラスター コンポーネントを作成する操作とは異なり、ここでは、失敗した操作エントリを展開して、サブ操作エントリを確認する必要があります。 一般的なサブ操作名は、"監査" ポリシー アクションや 'auditIfNotExists' ポリシー アクションなどのポリシー アクションです。一部のサブ操作は、成功したことを示し続けます。

さらに調査するには、失敗したサブ操作のいずれかを選択します。 サイド ウィンドウが開き、サブ操作に関する詳細情報を確認できます。 [概要]、[JSON]、[変更履歴] などのフィールドの値のトラブルシューティングを行うことができます。 JSON フィールドには、エラーの出力テキストが JSON 形式で含まれており、通常、最も役立つ情報が提供されます。

開始操作が失敗した理由を示す AKS クラスター アクティビティ ログのサブ操作側ペインのスクリーンショット。

クラスター分析情報を表示する

クラスター分析情報を生成して、Azure portalの [問題の診断と解決] ブレードを使用してトラブルシューティングを行うこともできます。 この機能にアクセスするには、次の手順に従います。

  1. Azure portalでKubernetes サービスを検索して選択します。

  2. AKS クラスターの名前を選択します。

  3. AKS クラスター ページのナビゲーション ウィンドウで、[ 問題の診断と解決] を選択します。

  4. [ 問題の診断と解決 ] ページで、[ クラスター分析情報 ] リンクを選択します。 クラスター分析情報ツールはクラスターを分析し、[Cluster Insights] ページの [監視とソリューション] セクションでその結果の一覧を提供します。

  5. いずれかの結果を選択して、問題とその考えられる解決策に関する詳細情報を表示します。

Azure portalでリソースを表示する

Azure portalでは、クラスターの作成時に作成されたリソースを表示できます。 通常、これらのリソースは、MC_で始まるリソース グループ内 にあります。 マネージド クラスター リソース グループには、 MC_MyResourceGroup_MyManagedCluster_<location-code> などの名前が付く場合があります。 ただし、カスタムマネージド クラスター リソース グループを使用してクラスターを構築した場合、名前が異なる場合があります。

リソース グループを見つけるには、Azure portalで [リソース グループ] を検索して選択し、クラスターが作成されたリソース グループを選択します。 リソース リストは、リソース グループの [概要 ] ページに表示されます。

警告

MC_ リソース グループ内のリソースは変更しないことをお勧めします。 このアクションにより、AKS クラスターに望ましくない影響が生じる可能性があります。

仮想マシン スケール セットの状態を確認するには、リソース グループのリソース リスト内でスケール セット名を選択します。 aks-nodepool1-12345678-vmss に似た名前、仮想マシン スケール セットType 値がある場合があります。 スケール セットの状態はノード プールの [概要] ページの上部に表示され、詳細は Essentials 見出しに表示されます。 デプロイが失敗した場合、表示される状態は [失敗] です

すべてのリソースについて、詳細を確認して、デプロイが失敗した理由をよりよく理解できます。 スケール セットの場合は、[ 失敗した 状態] テキストを選択して、エラーの詳細を表示できます。 詳細は、 StatusLevelおよび Code 列を含む行にあります。 次の例は、列値の行を示しています。

Column 値の例
状態 プロビジョニングに失敗しました
レベル Error
コード ProvisioningState/failed/VMExtensionProvisioningError

行を選択すると、[ メッセージ ] フィールドが表示されます。 これには、そのエラーに関するさらに詳細な情報が含まれています。 たとえば、例の行の [メッセージ ] フィールドは、次のテキストで始まります。

拡張機能 'vmssCSE' を処理するときに、VM によってエラーが報告されました。 エラー メッセージ: "Enable failed: failed to execute command: exit status=50 [stdout] [stderr] [stderr] 0 0 0 --: この情報で終了したコマンドは、スケール セット内の VM が失敗し、終了状態 50 が生成されたと結論付けることができます。

Kubectl コマンドを使用する

クラスターのエラーのトラブルシューティングに役立つ別のオプションとして、「kubectl コマンド」と入力して、クラスターにデプロイされたリソースの詳細を取得します。 kubectl を使用するには、最初に AKS クラスターにサインインします。

az aks get-credentials --resource-group MyResourceGroup --name MyManagedCluster

障害の種類と発生したタイミングによっては、クラスターにサインインして詳細を取得できない場合があります。 ただし、一般に、クラスターが作成され、Azure portalに表示される場合は、サインインして kubectl コマンドを実行できるはずです。

クラスター ノードの表示 (kubectl get nodes)

ノードの状態を判断するための詳細を取得するには、 kubectl get nodes コマンドを入力してクラスター ノードを表示します。 この例では、クラスター内に報告するノードはありません。

$ kubectl get nodes

No resources found

システム名前空間のポッドを表示する (kubectl get pods)

kube-system 名前空間でポッドを表示することも、問題のトラブルシューティングに適した方法です。 このメソッドを使用すると、Kubernetes システム ポッドの状態を表示できます。 この例では、次のコマンドを kubectl get pods 入力します。

$ kubectl get pods -n kube-system
NAME                                  READY   STATUS    RESTARTS   AGE
coredns-845757d86-7xjqb               0/1     Pending   0          78m
coredns-autoscaler-5f85dc856b-mxkrj   0/1     Pending   0          77m
konnectivity-agent-67f7f5554f-nsw2g   0/1     Pending   0          77m
konnectivity-agent-8686cb54fd-xlsgk   0/1     Pending   0          65m
metrics-server-6bc97b47f7-dfhbr       0/1     Pending   0          77m

ポッドの状態を説明する (kubectl describe pod)

ポッドの状態を記述することで、構成の詳細と、ポッドで発生したすべてのイベントを表示できます。 kubectl describe pod コマンドを実行します。

$ kubectl describe pod coredns-845757d86-7xjqb -n kube-system
Name:                 coredns-845757d86-7xjqb
Namespace:            kube-system
Priority:             2000001000
Priority Class Name:  system-node-critical
Node:                 <none>
Labels:               k8s-app=kube-dns
                      kubernetes.io/cluster-service=true
                      pod-template-hash=845757d86
                      version=v20
...
Events:
  Type     Reason            Age                 From               Message
  ----     ------            ----                ----               -------
  Warning  FailedScheduling  24m (x1 over 25m)   default-scheduler  no nodes available to schedule pods
  Warning  FailedScheduling  29m (x57 over 84m)  default-scheduler  no nodes available to schedule pods

コマンド出力では、使用可能なノードがないため、ポッドをノードにデプロイできないことがわかります。

お問い合わせはこちらから

質問がある場合やヘルプが必要な場合は、サポート要求を作成するか、Azure コミュニティ サポートにお問い合わせください。 Azure フィードバック コミュニティに製品フィードバックを送信することもできます。