Anthos clusters on Azure のトラブルシューティング
Anthos clusters on Azure の作成時や使用時に問題が発生した場合は、このトラブルシューティング手順を使用してください。
クラスタの作成に失敗する
クラスタを作成するリクエストを行うと、Anthos clusters on Azure では一連のプリフライト テストを実行してそのリクエストが検証されます。クラスタの作成に失敗した場合は、このプリフライト テストのいずれかが失敗したか、クラスタを作成するプロセス自体のステップが完了しなかった可能性があります。
プリフライト テストが失敗すると、クラスタはリソースを作成せず、エラーに関する情報を直接返します。たとえば、invalid%%%name
という名前のクラスタを作成しようとすると、有効なクラスタ名のプリフライト テストは失敗し、リクエストは次のエラーを返します。
ERROR: (gcloud.container.azure.clusters.create) INVALID_ARGUMENT: must be
between 3-40 characters, valid characters are /[a-z][0-9]-/, should start with a
letter, and end with a letter or a number: "invalid%%%name",
field: azure_cluster_id
プリフライト テストに合格した後、クラスタの作成に失敗する場合もあります。これは、クラスタの作成開始から数分後(Anthos clusters on Azure が Google Cloud と Azure にリソースを作成した後)に発生する可能性があります。この場合は、状態が ERROR
に設定された Azure リソースが Google Cloud プロジェクト内に存在します。
クラスタの状態を表示するには、以下を実行します。
gcloud container azure clusters describe `CLUSTER_NAME` \
--location `GOOGLE_CLOUD_LOCATION` \
--format "value(state)"
次のように置き換えます。
- CLUSTER_NAME: 状態のクエリを実行するクラスタの名前。
- GOOGLE_CLOUD_LOCATION: この Azure クラスタを管理する Google Cloud リージョンの名前。
ERROR
状態のクラスタの詳細を取得するには、次のコマンドを実行します。
gcloud container azure operations describe `OPERATION_ID`
OPERATION_ID は、クラスタを作成したオペレーションの ID に置き換えます。クラスタ作成リクエストのオペレーション ID がない場合は、次のコマンドで取得できます。
gcloud container azure operations list
タイムスタンプまたは関連情報を使用して、対象のクラスタ作成オペレーションを特定します。
kubectl を使用してクラスタに接続できない
このセクションでは、kubectl
コマンドライン ツールを使用してクラスタに接続する際の問題を診断するヒントをいくつか説明します。
サーバーにリソースがない
クラスタに実行中のノードプールがない場合や、Connect ゲートウェイがノードプールに接続できない場合は、error: the server doesn't have a resource type "services"
などのエラーが発生することがあります。ノードプールのステータスを確認するには、次のコマンドを実行します。
gcloud container azure node-pools list \
--cluster-name CLUSTER_NAME \
--location LOCATION
以下を置き換えます。
CLUSTER_NAME
: クラスタの名前LOCATION
: クラスタを管理する Google Cloud のロケーション
出力には、クラスタのノードプールのステータスが含まれます。ノードプールが表示されない場合は、ノードプールを作成してください。
Connect ゲートウェイのトラブルシューティング
お使いのユーザー名にクラスタに対する管理者アクセス権がない場合は、次のエラーが発生します。
Error from server (Forbidden): users "administrator@example.com" is forbidden:
User "system:serviceaccount:gke-connect:connect-agent-sa" cannot impersonate
resource "users" in API group "" at the cluster scope
追加のユーザーを構成するには、クラスタの作成時に --admin-users
フラグを渡します。
Connect ゲートウェイを使用していてクラスタに接続できない場合は、次の手順をお試しください。
クラスタの承認されたユーザーを取得します。
gcloud container azure clusters describe CLUSTER_NAME \ --format 'value(authorization.admin_users)'
CLUSTER_NAME
をクラスタ名で置き換えます。出力には、クラスタに対する管理者権限があるユーザー名が含まれます。 次に例を示します。
{'username': 'administrator@example.com'}
Google Cloud CLI で現在認証されているユーザー名を取得します。
gcloud config get-value account
出力には、Google Cloud CLI で認証されたアカウントが含まれます。
gcloud containers azure clusters describe
とgcloud config get-value account
の出力が一致しない場合は、gcloud auth login
を実行し、クラスタに対する管理者権限を持つユーザーとして認証を行います。
kubectl コマンドが応答しない
kubectl
コマンドが応答しない、またはタイムアウトする場合、最も一般的な理由は、ノードプールがまだ作成されていないことです。デフォルトで Anthos clusters on Azure は、インターネットに接続可能なエンドポイントとして Connect ゲートウェイを使用する kubeconfig
ファイルを生成します。これが機能するには、クラスタのノードプールで gke-connect-agent
Deployment が実行されている必要があります。
この場合の詳細な診断情報を確認するには、次のコマンドを実行します。
kubectl cluster-info -v=9
動作しているノードプールがない場合、connectgateway.googleapis.com
へのリクエストは 404 cannot find active connections for cluster
エラーで失敗します。
kubectl exec、attach、port-forward コマンドが失敗する
Connect ゲートウェイを使用しているときに、kubectl exec
、kubectl attach
、kubectl port-forward
コマンドがメッセージ「error: unable to upgrade connection
」で失敗することがあります。これは、Connect ゲートウェイを Kubernetes API Server エンドポイントとして使用する場合の制限事項です。
この問題を回避するには、kubeconfig
を使用してクラスタのプライベート エンドポイントを指定します。プライベート エンドポイントを介してクラスタにアクセスする手順については、kubectl 用のクラスタ アクセスを構成するをご覧ください。
kubectl の一般的なトラブルシューティング
Connect ゲートウェイを使用する場合:
Google Cloud プロジェクトで Connect ゲートウェイが有効になっていることを確認します。
gcloud services enable connectgateway.googleapis.com
1 つ以上の Linux ノードプールが実行されていることを確認します。
gke-connect-agent
が実行されていることを確認します。詳細については、接続のトラブルシューティングをご覧ください。
API エラー
Kubernetes 1.22 では、一部の API が非推奨になり、置き換えられます。クラスタをバージョン 1.22 以降にアップグレードした場合、非推奨 API のいずれかに対するアプリケーションからの呼び出しはすべて失敗します。
解決策
アプリケーションをアップグレードして、非推奨の API 呼び出しを新しいものに置き換えます。