クラスタノードをリセットする

クラスタのインストールが進行中の場合、そのクラスタをホストしているノードにバイナリと systemd サービスがインストールされ、サービスはノードのポートのリッスンを開始します。

ただし、クラスタのインストールが失敗した場合は、これらのバイナリとサービスをすべて削除する必要があります。つまり、クラスタのインストールを再試行できるように、ノードをリセットするか、完全にワイプする必要があります。この方法でノードがリセットされなければ、次にクラスタのインストールを試行するときに失敗します。

bmctl reset コマンドは、このようなノードのクリーンアップ オペレーションを実行します。この bmctl reset コマンドは、クラスタ全体またはクラスタの特定のノードで実行できます。このドキュメントでは、両方のモードでコマンドを実行する方法について説明します。

クラスタに bmctl reset コマンドを適用すると、クラスタのすべてのバイナリとサービスがワイプされるため、クラスタが削除されることに注意してください。

bmctl reset cluster でクラスタをリセットする

クラスタをリセットすると、そのクラスタは削除されます。クラスタが削除された後は、必要な構成の変更を行い、再インストールできます。

セルフマネージド クラスタをリセットする

管理クラスタ、ハイブリッド クラスタ、スタンドアロン クラスタをリセットするには、次のコマンドを実行します。

bmctl reset --cluster CLUSTER_NAME

このコマンドの CLUSTER_NAME は、リセットするクラスタの名前に置き換えます。

クラスタのリセットが完了すると、新しいクラスタを作成できます。さらに詳しい内容については、クラスタ作成の概要をご覧ください。

ユーザー クラスタをリセットする

ユーザー クラスタをリセットまたは削除するには、bmctl reset コマンドまたは kubectl delete コマンドを使用します。いずれの場合も、クラスタは削除されます。bmctl reset を使用することをおすすめします。

bmctl を使用したユーザー クラスタのリセットまたは削除

bmctl でユーザー クラスタをリセットまたは削除するには、次のコマンドを実行します。

bmctl reset --cluster CLUSTER_NAME --admin-kubeconfig ADMIN_KUBECONFIG_PATH

このコマンド内で、次のエントリをクラスタ環境に固有の情報に置き換えます。

  • CLUSTER_NAME: リセットするユーザー クラスタの名前。

  • ADMIN_KUBECONFIG_PATH: 関連する管理クラスタの kubeconfig ファイルへのパス。bmctl では、--admin-kubeconfig フラグのエイリアスとして --kubeconfig の使用がサポートされます。

kubectl を使用したユーザー クラスタの削除

kubectl を使用してユーザー クラスタを削除するには、まずクラスタ オブジェクトを削除してから、名前空間を削除する必要があります。そうしないと、マシンをリセットするためのジョブを作成できなくなり、削除プロセスが無期限に停止する可能性があります。

kubectl でユーザー クラスタを削除するには:

  1. 次のコマンドを実行して、クラスタ オブジェクトを削除します。

    kubectl delete cluster CLUSTER_NAME -n CLUSTER_NAMESPACE \
        --kubeconfig ADMIN_KUBECONFIG_PATH
    

    このコマンド内で、次のエントリをクラスタ環境に固有の情報に置き換えます。

    • CLUSTER_NAME: 削除するユーザー クラスタの名前。

    • CLUSTER_NAMESPACE: クラスタの名前空間。デフォルトでは、ベアメタル版 Anthos クラスタのクラスタ名前空間は、先頭に cluster- が付いたクラスタの名前です。たとえば、クラスタに test という名前を付けると、名前空間の名前は cluster-test のようになります。

    • ADMIN_KUBECONFIG_PATH: 関連する管理クラスタの kubeconfig ファイルへのパス。

  2. クラスタが正常に削除されたら、次のコマンドを実行して名前空間を削除します。

    kubectl delete namespace CLUSTER_NAMESPACE --kubeconfig ADMIN_KUBECONFIG_PATH
    

特定のクラスタノードをリセットする

クラスタの特定のノードをリセットする必要が生じる場合があります。たとえば、管理クラスタが削除されても、その管理クラスタで管理されているユーザー クラスタが残っている場合などです。この場合、管理クラスタは削除されているため、ユーザー クラスタ全体を削除できません。そのため、ユーザー クラスタのノードは個別にリセットする必要があります。

GCR サービス アカウントの JSON キーを使用してノードをリセットする

クラスタの個々のノードをリセットするには、次のコマンドを実行します。

bmctl reset nodes --addresses NODE_1_IP_ADDRESS,NODE_2_IP_ADDRESS \
    --ssh-key-private-path SSH_KEY_PATH \
    --gcr-service-account-key SERVICE_ACCOUNT_KEY_PATH \
    --login-user root

このコマンド内で、次のエントリをクラスタ環境に固有の情報に置き換えます。

  • NODE_1_IP_ADDRESS , NODE_2_IP_ADDRESS: 削除するノードの IP アドレスのカンマ区切りリスト。

  • SSH_KEY_PATH: SSH 秘密鍵のパス。

  • SERVICE_ACCOUNT_KEY_PATH: サービス アカウント キーを含む JSON ファイルへのパス。この鍵により、bmctl に Google Container Registry(GCR)からイメージを pull する権限が付与されます。サービス アカウント キーは、Google Cloud Console、gcloud CLI、serviceAccounts.keys.create() メソッド、いずれかのクライアント ライブラリを使用して作成できます。詳細については、サービス アカウント キーの作成と管理をご覧ください。サービス アカウント キーファイルを作成するもう 1 つの方法は、--create-service-accounts フラグを指定して create config コマンドを実行する方法です。このコマンドの詳細については、bmctl を使用したクラスタ構成の作成と管理をご覧ください。

クラスタの詳細のリセット

bmctl cluster reset コマンドからの出力は、次のサンプルのようになります。

bmctl reset --cluster cluster1
Creating bootstrap cluster... OK
Deleting GKE Hub member admin in project my-gcp-project...
Successfully deleted GKE Hub member admin in project my-gcp-project
Loading images... OK
Starting reset jobs...
Resetting: 1    Completed: 0    Failed: 0
...
Resetting: 0    Completed: 1    Failed: 0
Flushing logs... OK

リセット オペレーションで、bmctl はまず GKE Hub メンバーシップの登録を削除して、影響を受けるノードのクリーンアップを行います。リセット中、ストレージのマウントと anthos-system StorageClass からのデータも削除されます。

bmctl は、すべてのノードで kubeadm reset を実行し、クラスタ ネットワーキングに使用されているトンネル インターフェースを削除して、次のディレクトリを削除します。

  • /etc/kubernetes
  • /etc/cni/net.d
  • /root/.kube
  • /var/lib/kubelet

ロードバランサ ノードの場合、bmctl は次のアクションも実行します。

  • keepalived サービスと haproxy サービスを無効にします。
  • keepalivedhaproxy の構成ファイルを削除します。

bmctl reset コマンドは、クラスタ構成ファイルが現在の作業ディレクトリにあることを想定しています。デフォルトでは、パスは次のようになります: bmctl-workspace/CLUSTER_NAME/CLUSTER_NAME.yaml

クラスタの作成時に --workspace-dir フラグを使用して別のディレクトリを指定した場合は、クラスタのリセット時にそのフラグを使用して、その作業ディレクトリを指定する必要があります。