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

GKE on Bare Metal クラスタをインストールすると、そのクラスタをホストしているノードにバイナリ サービスと systemd サービスがインストールされ、サービスによるノード上のポートのリッスンが開始されます。

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

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

削除方法の選択

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

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

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

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

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

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

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

  • bmctl:

    • bmctl reset nodes を使用して特定のノードをリセットします。
    • bmctl reset を使用して、次のクラスタタイプを削除します。

      • 管理クラスタ、ハイブリッド クラスタ、スタンドアロン クラスタ(セルフマネージド クラスタと呼ばれます)。これには、GKE On-Prem API で管理される管理クラスタが含まれます。
      • GKE On-Prem API で管理されていないユーザー クラスタ。

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

    bmctl-workspace/CLUSTER_NAME/CLUSTER_NAME.yaml

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

  • kubectl:

    • GKE On-Prem API クラスタで管理されていないユーザー クラスタのみを削除するには、kubectl delete cluster を使用します。他のクラスタタイプでは、このコマンドを実行しないでください。
    • なお、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

このコマンドは、クラスタを削除するだけでなく、クラスタ メンバーもフリートから削除します。

GKE On-Prem API で管理される管理クラスタの場合は、Google Cloud にある API のリソースも削除する必要があります。そうしないと、そのクラスタが、Google Cloud コンソールの [GKE クラスタ] ページに表示されます。管理クラスタの GKE On-Prem API リソースは、次のコマンドを使用して削除します。

gcloud container bare-metal admin-clusters unenroll CLUSTER_NAME \
    --project=FLEET_HOST_PROJECT_ID \
    --location=REGION \
    --ignore-errors

以下を置き換えます。

  • FLEET_HOST_PROJECT_ID: 管理クラスタがメンバーであったフリートのプロジェクト ID。

  • REGION: GKE On-Prem API がクラスタ メタデータを保存する Google Cloud リージョン。

--ignore-errors フラグを使用すると、ベアメタルの管理クラスタ リソースの登録解除中にエラーが発生した場合でも、登録解除は成功します。

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

ユーザー クラスタの削除

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

bmctl

bmctl または kubectl で作成された、GKE 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 で作成された、GKE 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
    

コンソール

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

  1. コンソールで、Google Kubernetes Engine クラスタの概要ページに移動します。

    GKE クラスタに移動

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

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

  4. クラスタのリストで、削除するクラスタを見つけます。[種類] が [外部] の場合は、クラスタが bmctl を使用して作成され、GKE On-Prem API に登録されていないことを示します。この場合は、[bmctl] タブまたは [kubectl] タブの手順に沿ってクラスタを削除します。

    [ステータス] 列のアイコンが問題を示している場合は、[gcloud CLI] タブの手順に沿ってクラスタを削除します。削除コマンドに --ignore-errors フラグを追加する必要があります。

  5. 削除するクラスタの名前をクリックします。

  6. [詳細] パネルで、ウィンドウの上部にある [削除] をクリックします。

  7. 確認のメッセージが表示されたら、クラスタの名前を入力して [削除] をクリックします。

gcloud CLI

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

他のフラグの詳細については、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 の構成ファイルが削除されます。