クラスタのインストールまたはアップグレードに関する問題のトラブルシューティング

このページでは、GKE on Bare Metal のインストールまたはアップグレードで問題が発生した場合のトラブルシューティング情報について説明します。

ブートストラップ クラスタの問題

GKE on Bare Metal クラスタは、クラスタを作成またはアップグレードするときに、Docker の Kubernetes(kind)クラスタをデプロイして、クラスタの作成またはアップグレードに必要な Kubernetes コントローラを一時的にホストします。この一時的なクラスタは、ブートストラップ クラスタと呼ばれます。

インストール時、デプロイに kind クラスタがすでに存在する場合、GKE on Bare Metal は既存の kind クラスタを削除します。削除は、インストールまたはアップグレードが成功した場合にのみ行われます。成功後も既存の kind クラスタを保持するには、bmctl--keep-bootstrap-cluster フラグを使用します。

GKE on Bare Metal は、ブートストラップ クラスタの構成ファイルを WORKSPACE_DIR/.kindkubeconfig の下に作成します。ブートストラップ クラスタへの接続は、クラスタの作成とアップグレード中のみ可能です。

ブートストラップ クラスタは、イメージを pull するために Docker リポジトリにアクセスする必要があります。非公開レジストリを使用しない場合は、レジストリがデフォルトで Container Registry に設定されます。クラスタの作成中、bmctl が次のファイルを作成します。

  • bmctl-workspace/config.json: レジストリ アクセス用の Google Cloud サービス アカウントの認証情報が含まれます。この認証情報は、クラスタ構成ファイルの gcrKeyPath フィールドから取得されます。

  • bmctl-workspace/config.toml: kind クラスタ内の containerd 構成が含まれます。

ブートストラップ クラスタのデバッグ

ブートストラップ クラスタをデバッグするには、次の手順に沿って行います。

  • クラスタの作成やアップグレード中に、ブートストラップ クラスタに接続します。
  • ブートストラップ クラスタのログを取得します。

bmctl の実行に使用するマシンのログは、次のフォルダにあります。

  • bmctl-workspace/CLUSTER_NAME/log/create-cluster-TIMESTAMP/bootstrap-cluster/
  • bmctl-workspace/CLUSTER_NAME/log/upgrade-cluster-TIMESTAMP/bootstrap-cluster/

CLUSTER_NAMETIMESTAMP は、クラスタの名前と対応するシステムの時刻に置き換えます。

ブートストラップ クラスタから直接ログを取得するには、クラスタの作成やアップグレード中に次のコマンドを実行します。

docker exec -it bmctl-control-plane bash

このコマンドにより、ブートストラップ クラスタで実行される bmctl コントロール プレーン コンテナ内のターミナルが開かれます。

kubelet ログと containerd ログを検査するには、次のコマンドを使用して、出力でエラーや警告を探します。

journalctl -u kubelet
journalctl -u containerd

クラスタ アップグレードの問題

GKE on Bare Metal をアップグレードすると、進行状況をモニタリングし、クラスタとノードのステータスを確認できます。次のガイダンスは、アップグレードが正常に行われているか、問題が発生しているかを判断するのに役立ちます。

アップグレードの進行状況をモニタリングする

アップグレード プロセス中のクラスタのステータスを表示するには、kubectl describe cluster コマンドを使用します。

kubectl describe cluster CLUSTER_NAME \
    --namespace CLUSTER_NAMESPACE \
    --kubeconfig ADMIN_KUBECONFIG

次の値を置き換えます。

  • CLUSTER_NAME: クラスタの名前。
  • CLUSTER_NAMESPACE: クラスタの名前空間。
  • ADMIN_KUBECONFIG: 管理者 kubeconfig ファイル。
    • デフォルトでは、管理クラスタ、ハイブリッド クラスタ、スタンドアロン クラスタのアップグレードにはブートストラップ クラスタが使用されます。ブートストラップ クラスタの使用時にアップグレードの進行状況をモニタリングするには、ブートストラップ クラスタの kubeconfig ファイル .kindkubeconfig へのパスを指定します。このファイルはワークスペース ディレクトリにあります。

出力の Status セクションを確認します。ここには、クラスタのアップグレード ステータスの集計が表示されます。クラスタがエラーを報告した場合は、次のセクションを使用して問題のトラブルシューティングを行います。

ノードの準備状況の確認

アップグレード プロセス中にクラスタ内のノードのステータスを表示するには、kubectl get nodes コマンドを使用します。

kubectl get nodes --kubeconfig KUBECONFIG

ノードでアップグレード プロセスが正常に完了したかどうかを確認するには、コマンド レスポンスの VERSION 列と AGE 列を確認します。VERSION は、クラスタの Kubernetes バージョンです。特定の GKE on Bare Metal バージョンを確認するには、バージョン サポート ポリシーの表をご覧ください。

ノードに NOT READY が表示されている場合は、ノードを接続して kubelet のステータスを確認します。

systemctl status kubelet

kubelet のログを確認することもできます。

journalctl -u kubelet

kubelet のステータスとログの出力を確認し、ノードに問題がある理由を示すメッセージを探します。

現在アップグレード中のノードを確認する

クラスタ内の現在アップグレード中のノードを確認するには、kubectl get baremetalmachines コマンドを使用します。

kubectl get baremetalmachines --namespace CLUSTER_NAMESPACE \
  --kubeconfig ADMIN_KUBECONFIG

次の値を置き換えます。

  • CLUSTER_NAMESPACE: クラスタの名前空間。
  • ADMIN_KUBECONFIG: 管理者 kubeconfig ファイル。
    • ブートストラップ クラスタが管理、ハイブリッド、スタンドアロンのアップグレードに使用される場合は、ブートストラップ クラスタの kubeconfig ファイル(bmctl-workspace/.kindkubeconfig)を指定します。

次の出力例は、現在アップグレード中のノードに DESIRED ABM VERSION とは異なる ABM VERSION があることを示しています。

NAME         CLUSTER    READY   INSTANCEID               MACHINE      ABM VERSION   DESIRED ABM VERSION
10.200.0.2   cluster1   true    baremetal://10.200.0.2   10.200.0.2   1.13.0        1.14.0
10.200.0.3   cluster1   true    baremetal://10.200.0.3   10.200.0.3   1.13.0        1.13.0

現在ドレインされているノードを確認する

アップグレード プロセス中は、ノードが Pod をドレインし、ノードが正常にアップグレードされるまでスケジューリングが無効になります。現在 Pod をドレインしているノードを確認するには、kubectl get nodes コマンドを使用します。

kubectl get nodes --kubeconfig USER_CLUSTER_KUBECONFIG | grep "SchedulingDisabled"

USER_CLUSTER_KUBECONFIG は、ユーザー クラスタ kubeconfig ファイルのパスに置き換えます。

STATUS 列は grep を使用してフィルタリングされ、SchedulingDisabled を報告するノードのみを表示します。このステータスは、ノードがドレインされていることを示します。

管理クラスタからノードのステータスを確認することもできます。

kubectl get baremetalmachines -n CLUSTER_NAMESPACE \
  --kubeconfig ADMIN_KUBECONFIG

次の値を置き換えます。

  • CLUSTER_NAMESPACE: クラスタの名前空間。
  • ADMIN_KUBECONFIG: 管理者 kubeconfig ファイル。
    • ブートストラップ クラスタが管理、ハイブリッド、スタンドアロンのアップグレードに使用される場合は、ブートストラップ クラスタの kubeconfig ファイル(bmctl-workspace/.kindkubeconfig)を指定します。

ドレインされたノードのステータスは、MAINTENANCE 列に表示されます。

ノードが長期間ドレインされている理由を確認する

前のセクションのいずれかの方法で、kubectl get nodes コマンドを使用してドレインされたノードを特定します。追加の詳細を表示するには、kubectl get pods コマンドを使用して、このノード名をフィルタリングします。

kubectl get pods --all-namespaces -o wide --field-selector spec.nodeName=NODE_NAME

NODE_NAME は、ドレインするノードの名前に置き換えます。出力は現在停止している、またはドレインが遅い Pod のリストを返します。ノードのドレイン プロセスに 20 分以上かかると、Pod が停止してもアップグレードは続行されます。