このページでは、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_NAME
と TIMESTAMP
は、クラスタの名前と対応するシステムの時刻に置き換えます。
ブートストラップ クラスタから直接ログを取得するには、クラスタの作成やアップグレード中に次のコマンドを実行します。
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
へのパスを指定します。このファイルはワークスペース ディレクトリにあります。
- デフォルトでは、管理クラスタ、ハイブリッド クラスタ、スタンドアロン クラスタのアップグレードにはブートストラップ クラスタが使用されます。ブートストラップ クラスタの使用時にアップグレードの進行状況をモニタリングするには、ブートストラップ クラスタの kubeconfig ファイル
出力の 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
)を指定します。
- ブートストラップ クラスタが管理、ハイブリッド、スタンドアロンのアップグレードに使用される場合は、ブートストラップ クラスタの kubeconfig ファイル(
次の出力例は、現在アップグレード中のノードに 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
)を指定します。
- ブートストラップ クラスタが管理、ハイブリッド、スタンドアロンのアップグレードに使用される場合は、ブートストラップ クラスタの kubeconfig ファイル(
ドレインされたノードのステータスは、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 が停止してもアップグレードは続行されます。