ノードをリセットしてクラスタを削除する

Google Distributed Cloud Virtual for Bare Metal クラスタのインストール中に、そのクラスタをホストするノードにバイナリと systemd サービスがインストールされ、それらのサービスがノード上のポートでリッスンを開始します。

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

このページでは、この特定のノードのクリーンアップ オペレーションを実施する方法と、クラスタを削除する方法について説明します。

削除方法の選択

クラスタの削除に使用する方法は、次の条件によって異なります。

  • クラスタの種類。
  • クラスタ全体を削除するのではなく特定のノードのみをクリーンアップする場合。
  • クラスタが作成された方法。

GKE on Bare Metal には、次の削除方法があります。

  • Google Cloud コンソールまたは Google Cloud CLI:

    • コンソールまたは gcloud CLI を使用して、Anthos On-Prem API によって管理されているユーザー クラスタを削除します。次のいずれかに該当する場合は、ユーザー クラスタが Anthos On-Prem API によって管理されています。

      • クラスタは、Google Cloud コンソールまたは gcloud CLI で作成されたため、クラスタを管理するように Anthos On-Prem API が自動的に構成されている。

      • クラスタが bmctl を使用して作成されたものの、Anthos On-Prem API で管理されるように構成されている。

  • bmctl:

    • bmctl reset nodes を使用して特定のノードをリセットします。
    • bmctl reset を使用して、Anthos On-Prem API で管理されていない管理クラスタ、ハイブリッド クラスタ、スタンドアロン クラスタ、ユーザー クラスタを削除します。

    bmctl を使用してノードをリセットする場合、またはクラスタを削除する場合、このコマンドではクラスタ構成ファイルが現在の作業ディレクトリにあることを想定しています。デフォルトでは、パスは次のようになります。

    bmctl-workspace/CLUSTER_NAME/CLUSTER_NAME.yaml

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

  • kubectl:

    • kubectl delete cluster を使用して、Anthos On-Prem API クラスタで管理されていないユーザー クラスタのみを削除します。他のクラスタタイプでは、このコマンドを実行しないでください。
    • なお、kubectl delete cluster を使用する場合、クラスタを削除した後は、クラスタが存在している名前空間も削除する必要があります。

クラスタを削除し、必要な構成の変更を行ったら、クラスタを再インストールできます。

セルフマネージド クラスタの削除

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

bmctl reset --cluster CLUSTER_NAME

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

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

Please check the logs at bmctl-workspace/example-cluster-1/log/reset-20221025-184705/reset.log
[2022-10-25 18:47:11+0000] Creating bootstrap cluster... OK
[2022-10-25 18:48:18+0000] Loading images... OK
[2022-10-25 18:48:18+0000] Waiting for reset jobs to finish...
[2022-10-25 18:48:28+0000] Operation reset in progress: 1       Completed: 0    Failed: 0
...
[2022-10-25 18:50:08+0000] Operation reset in progress: 0       Completed: 1    Failed: 0
[2022-10-25 18:50:08+0000] Flushing logs... OK
[2022-10-25 18:50:08+0000] Deleting GKE Hub member example-cluster-1 in project example-project-12345...
[2022-10-25 18:50:11+0000] Successfully deleted GKE Hub member example-cluster-1 in project example-project-12345
[2022-10-25 18:50:11+0000] Deleting bootstrap cluster... OK

クラスタの削除が完了したら、新しいクラスタを作成できます。さらに詳しい内容については、クラスタ作成の概要をご覧ください。

ユーザー クラスタの削除

ユーザー クラスタが Anthos On-Prem API によって管理されている場合は、コンソールまたは gcloud CLI を使用してクラスタを削除します。それ以外の場合は、bmctl または kubectl を使用してクラスタを削除します。

bmctl

bmctl または kubectl で作成された、Anthos On-Prem API に登録されていないユーザー クラスタは、bmctl を使用して削除できます。

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

bmctl reset --cluster USER_CLUSTER_NAME --admin-kubeconfig ADMIN_KUBECONFIG_PATH

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

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

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

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

Please check the logs at bmctl-workspace/example-cluster-1/log/reset-20221025-184705/reset.log
[2022-10-25 18:47:11+0000] Creating bootstrap cluster... OK
[2022-10-25 18:48:18+0000] Loading images... OK
[2022-10-25 18:48:18+0000] Waiting for reset jobs to finish...
[2022-10-25 18:48:28+0000] Operation reset in progress: 1       Completed: 0    Failed: 0
...
[2022-10-25 18:50:08+0000] Operation reset in progress: 0       Completed: 1    Failed: 0
[2022-10-25 18:50:08+0000] Flushing logs... OK
[2022-10-25 18:50:08+0000] Deleting GKE Hub member example-cluster-1 in project example-project-12345...
[2022-10-25 18:50:11+0000] Successfully deleted GKE Hub member example-cluster-1 in project example-project-12345
[2022-10-25 18:50:11+0000] Deleting bootstrap cluster... OK

kubectl

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

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

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

    kubectl delete cluster USER_CLUSTER_NAME -n USER_CLUSTER_NAMESPACE \
        --kubeconfig ADMIN_KUBECONFIG_PATH
    

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

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

    • USER_CLUSTER_NAMESPACE: クラスタの名前空間。デフォルトでは GKE on Bare Metal のクラスタ名前空間は、先頭に cluster- が付いたクラスタの名前です。たとえば、クラスタに test という名前を付けると、名前空間の名前は cluster-test のようになります。

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

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

    kubectl delete namespace USER_CLUSTER_NAMESPACE --kubeconfig ADMIN_KUBECONFIG_PATH
    

コンソール

ユーザー クラスタが Anthos On-Prem API によって管理されている場合は、次の手順でクラスタを削除します。

  1. コンソールで [GKE Enterprise クラスタ] ページに移動します。

    GKE Enterprise の [クラスタ] ページに移動

  2. ユーザー クラスタが存在する Google Cloud プロジェクトを選択します。

  3. クラスタのリストで、削除するクラスタをクリックします。

  4. [詳細] パネルで、[タイプ] が [Anthos(ベアメタル: ユーザー)] の場合は、次の手順に沿ってクラスタを削除します。

    1. [詳細] パネルで、[詳細を表示] をクリックします。

    2. ウィンドウの上部にある [削除] をクリックします。

    3. 確認のメッセージが表示されたら、もう一度 [削除] をクリックします。

    [種類] が [外部] の場合は、クラスタがコマンドライン ツールを使用して作成され、Anthos On-Prem API で管理されていないことを示します。この場合は、bmctl または kubectl を使用してクラスタを削除します。

gcloud CLI

ユーザー クラスタが Anthos On-Prem API によって管理されている場合は、gcloud CLI がインストールされている PC で、次の手順に沿ってクラスタを削除します。

  1. 自分の Google アカウントでログインします。

    gcloud auth login
    
  2. コンポーネントを更新します。

    gcloud components update
    
  3. クラスタのリストを取得して、削除コマンドで正しいクラスタ名が指定されていることを確認します。

    gcloud container bare-metal clusters list \
      --project=FLEET_HOST_PROJECT_ID \
      --location=LOCATION
    

    以下を置き換えます。

    • FLEET_HOST_PROJECT_ID: クラスタが作成されたプロジェクトの ID。

    • LOCATION: ユーザー クラスタに関連付けられた Google Cloud のロケーション。

    出力は次のようになります。

    NAME                      LOCATION    VERSION         ADMIN_CLUSTER            STATE
    example-user-cluster-1a   us-west1    1.14.11          example-admin-cluster-1  RUNNING
    
  4. 次のコマンドを実行してクラスタを削除します。

    gcloud container bare-metal clusters delete USER_CLUSTER_NAME \
      --project=FLEET_HOST_PROJECT_ID \
      --location=LOCATION \
      --force \
      --allow-missing
    

    以下を置き換えます。

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

    • FLEET_HOST_PROJECT_ID: クラスタが作成されたプロジェクトの ID。

    • LOCATION: ユーザー クラスタに関連付けられた Google Cloud のロケーション。

    --force フラグを使用すると、ノードプールを持つクラスタを削除できます。--force フラグを使用せずに、まず ノードプールを削除 してから、クラスタを削除する必要があります。

    --allow-missing フラグは、標準の Google API フラグです。このフラグを指定すると、クラスタが見つからない場合にコマンドは成功を返します。

    コマンドから「failed connecting to the cluster's control plane」というテキストを含むエラーが返された場合は、管理クラスタ、Connect Agent、またはオンプレミス環境のいずれかに接続の問題があることを示しています。 Connect Agent に関する問題のトラブルシューティングについては、Connect Agent のログの収集をご覧ください。

    • たとえば、ネットワークの問題など、接続の問題が一時的なものである場合は、しばらく待ってからコマンドを再試行します。

    • 管理クラスタが削除されたことがわかっている場合、あるいは管理者またはユーザー クラスタのノードマシンがシャットダウンまたはオフラインになった場合「は、--ignore-errors フラグを指定してコマンドを再試行します。

      また、クラスタが bmctl または kubectl を使用して削除され、Anthos On-Prem API リソースが Google Cloud に残っている場合は、--ignore-errors を含める必要があります。そのような場合は、Google Cloud コンソールの [Anthos クラスタ] ページに、クラスタが異常な状態で表示され続ける現象が見られます。

他のフラグの詳細については、gcloud CLI リファレンスをご覧ください。

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

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

ノードをリセットするには、Google Container Registry(GCR)への読み取りアクセス権を持つサービス アカウントが必要です。bmctl コマンドは、このサービス アカウントの JSON キーファイルを引数と想定しています。クラスタの個々のノードをリセットするには、次のコマンドを実行します。

bmctl reset nodes --addresses NODE_1_IP_ADDRESS,NODE_2_IP_ADDRESS \
    --ssh-private-key-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 秘密鍵のパス。 これは、リセットの際にノードとの SSH 接続を確立するための鍵です。

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

クラスタ削除の詳細

削除の際に、クラスタのフリート メンバーシップ登録、ストレージ マウント、anthos-system StorageClass のデータが削除されます。

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

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

ロードバランサ ノードの場合:

  • keepalived サービスと haproxy サービスが削除されます。
  • keepalivedhaproxy の構成ファイルが削除されます。