Google は、Google Distributed Cloud に接続されたハードウェアをリモートでモニタリングし、メンテナンスします。このため、Google エンジニアは Distributed Cloud 接続ハードウェアへの Secure Shell(SSH)アクセス権を持っています。Google が問題を検出すると、Google のエンジニアからお客様に連絡して、トラブルシューティングと解決を行います。問題をご自身で特定した場合は、直ちに Google サポートにお問い合わせのうえ、診断と解決を依頼してください。
Distributed Cloud コネクテッド マシンの接続
このセクションでは、Cloud Monitoring の指標エクスプローラ機能を使用して、Distributed Cloud に接続されたマシンのインターネットと Google Cloud の接続を確認する方法について説明します。
この手順では、次の Monitoring 指標を使用します。
Machine Connected(
/machine/connected): マシンが Google Cloudに接続されているかどうかを示します。ネットワーク接続(
/machine/network/connectivity): マシンのプライマリ ネットワーク インターフェースにインターネット接続があるかどうかを示します。
このセクションの手順を完了するには、次の前提条件を満たす必要があります。
- Google Cloud コンソールと Distributed Cloud に接続された Google Cloud プロジェクトへのアクセス権。
- Monitoring 指標を表示できる Monitoring 閲覧者 IAM ロール。
- (省略可)返される結果をフィルタリングするための、ターゲットの Distributed Cloud コネクテッド マシンの
machine_id値。
Metrics Explorer を使用してマシンの接続を検証する
Metrics Explorer に移動します。
Google Cloud コンソールで、[モニタリング] セクションに移動します。
左側のナビゲーション ツリーで、[Metrics Explorer] をクリックします。
ターゲット リソースタイプを選択します。
[Metrics Explorer] ページで、[クエリ] ページに移動します。
検索バーを使用して、マシン リソースタイプを検索します。完全なリソース識別子
edgecontainer.googleapis.com/Machineを使用することもできます。返された結果で、[マシン] リソースタイプをクリックします。
マシンが Google Cloudに接続されていることを確認します。
[指標] セクションで、
connected値を検索します。[マシン接続] 指標を選択します。完全なパスは
edgecontainer.googleapis.com/machine/connectedです。(省略可)[フィルタ] セクションを使用して、ターゲットの
machine_id値でフィルタします。表示された時間グラフで、[正常] の線が 100% のままになっていることを確認します。この値が 0% または [Unhealthy] になった場合、マシンは示された時間に Google Cloud との接続を失っています。
マシンのインターネット接続を検証します。
[指標] セクションで、
connectivity値を検索します。[ネットワーク接続] 指標を選択します。完全なパスは
edgecontainer.googleapis.com/machine/network/connectivityです。(省略可)[フィルタ] セクションを使用して、ターゲットの
machine_id値でフィルタします。表示された時間グラフで、[正常] の線が 100% のままになっていることを確認します。この値が 0% Unhealthy になった場合、マシンは示された時間にインターネット接続を失っています。
検証結果を理解する
次の表に、Metrics Explorer から返される結果を示します。
| マシンの状態 | 診断 | 解決策 |
|---|---|---|
| 正常 「マシン接続」指標の値が 1「ネットワーク接続」指標の値が 1 |
通常のオペレーション。 | なし |
| 切断 「マシン接続」指標の値は 0「ネットワーク接続」指標の値は 1 |
マシンはインターネットに接続されているが、 Google Cloudに接続できない。 | Google サービスと API エンドポイントの [ファイアウォール ルール](distributed-cloud/connected/latest/docs/requirements#connected_management_and_monitoring_traffic)を確認します。Distributed Cloud 接続エージェントがマシンで実行されていることを確認します。 |
| 分離 「マシン接続」指標の値は 0「ネットワーク接続」指標の値は 0 |
マシンがインターネットに接続されていない。 | 電源ケーブルとネットワーク ケーブル、ローカル ネットワーク構成、マシンの LED ステータスを確認します。VLAN とルーティングの構成を確認します。 |
| 断続的 「マシン接続」指標の値が 0 と 1 の間で交互に変化する「ネットワーク接続」指標の値が 0 と 1 の間で交互に変化する |
ネットワーク接続が不安定である、パケットロスが発生している、レイテンシが過剰である。 | ローカル ネットワークで輻輳やハードウェアの障害が発生していないか確認します。 |
いずれかの指標で 0 の値が継続的に確認される場合は、表に記載されているトラブルシューティングの手順に沿って問題を解決してください。問題が解決しない場合は、影響を受けるマシンの machine_id 値と停止のタイムスタンプを添えて、Google サポートにお問い合わせください。
仮想マシンが Pending 状態のままになる
次のいずれかの状況が発生すると、仮想マシン ワークロードが Pending 状態で停止し、ノードでスケジュール設定に失敗する可能性があります。
- Distributed Cloud Connected は、リクエストされたリソース(CPU 時間、メモリ、ディスク容量など)を仮想マシンに割り当てることができません。
- 仮想マシンの構成に障害があります。
- 仮想マシンのストレージに障害が発生しています。
- ターゲット ノードが汚染されています。
この問題を解決するには、次の操作を行います。
クラスタの認証情報を取得するの説明に沿って、クラスタの認証情報を取得します。
影響を受けた仮想マシンに関する情報を取得します。
kubectl describe virtualmachine VM_NAME -n NAMESPACE
次のように置き換えます。
VM_NAME: ターゲット仮想マシンの名前。NAMESPACE: ターゲット仮想マシンの Namespace。
このコマンドでは、次のような出力が返されます。
Status: ... State: Pending ... Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal SuccessfulCreate 15m virtualmachine-controller Created virtual machine my-stuck-vm Warning DiskProvisioningFailed 14m virtualmachine-controller Failed to provision disk: DataVolume my-stuck-vm-data-disk not ready Warning PVCNotBound 14m virtualmachine-controller PersistentVolumeClaim my-stuck-vm-data-disk is in phase Pending Warning VMINotCreated 10m virtualmachine-controller VirtualMachineInstance cannot be created: dependencies not readyコマンドの出力には、リソースの制約、スケジューリングの失敗、ストレージ障害などの問題を示すメッセージが含まれています。
出力で、次のセクションで説明するように、スケジューリングの失敗の原因を特定します。
リソースの不足
CPU、メモリ、ディスク容量などのリソースが不足していることを示すメッセージが表示されることがあります。次に例を示します。
5/8 nodes are available: 3 Insufficient memory, 3 Insufficient CPU.
この問題を解決するには、影響を受ける仮想マシンとノードでスケジュールされている他のワークロードに割り当てられているリソースを確認し、ビジネスニーズに応じて次の操作を行います。
- ノードでスケジュールされている他のワークロードをスケールダウンする。
- 影響を受ける仮想マシンに割り当てられているリソースの量を減らします。
- 影響を受けるクラスタにマシンを追加します。
taint を追加したノード
ターゲット ノードが汚染されていることを示すメッセージが表示されることがあります。次に例を示します。
5/8 nodes are available: 3 node(s) had taint {<taint-key>:<taint-value>}, that the pod didn't tolerate.
この問題を解決するには、次の操作を行います。
次のコマンドを使用して、ノードの taint を確認します。
kubectl get nodes -o custom-columns=NAME:.metadata.name,TAINTS:.spec.taints
このコマンドでは、次のような出力が返されます。
NAME TAINTS node-name-1 [map[effect:PreferNoSchedule key:node-role.kubernetes.io/master] map[effect:PreferNoSchedule key:node-role.kubernetes.io/control-plane]] node-name-2 <none>次のいずれかを行います。
- 予期しない taint がある場合は、taint と toleration の説明に沿って削除します。
- 想定される taint については、taint と toleration で説明されているように、対応する toleration を仮想マシンの構成に追加します。
ストレージの障害
仮想マシンのストレージに障害があることを示すメッセージが表示されることがあります。次に例を示します。
5/8 nodes are available: 3 node(s) had volume node affinity conflict, 3 node(s) had unbound immediate PersistentVolumeClaims.
このメッセージは、対応する永続ボリュームがターゲット ノードにマウントされていないことを示している可能性があります。
この問題を解決するには、次の操作を行います。
次のコマンドを使用して、影響を受ける仮想マシンの Namespace 内の永続ボリューム クレーム(PVC)のステータスを取得します。
kubectl get pvc -n NAMESPACE
NAMESPACEは、ターゲット Namespace の名前に置き換えます。このコマンドでは、次のような出力が返されます。
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE windows-robin-disk-0 Bound pvc-b1a1d264-84bf-4e58-857d-f37f629d5082 25Gi RWX robin-block-immediate 30h windows-robin-disk-1 Bound pvc-0130b9a8-7fed-4df0-8226-d79273792a16 25Gi RWX robin-block-immediate 30h windows-robin-vm-0-restored-windows-robin-disk-0 Pending gce-pd-gkebackup-in 26m対応する PVC のステータスが
Boundであることを確認します。ステータスがPendingの場合、ストレージ サブシステムはボリュームのプロビジョニングに失敗しています。このような場合は、ストレージ サブシステムの構成をトラブルシューティングし、適切なStorageClassが利用可能であることを確認する必要があります。