クラスタの再起動と削除

このトピックでは、ワークロード クラスタをシャットダウンして再起動する方法と、削除する方法について説明します。

ワークロード クラスタのシャットダウンと再起動

ネットワークのメンテナンスのための計画的な停止や、計画的なネットワーク ダウンタイムに対応するために、ワークロード クラスタのシャットダウンと再起動が必要になる場合があります。

前提条件

  • すべてのネットワークのすべてのクラスタ ノードの DHCP リースと予約の時間は、計画的な停止時間よりも長くする必要があります。
    • これにより、再起動後もノードは同じアドレスを保持します。これは必須です。
  • jq がローカルにインストールされています。
  • NSX Manager をバックアップします

手順

  1. 次のコマンドを実行して、etcd データベースに関する情報を収集します。

    kubectl --kubeconfig /etc/kubernetes/admin.conf get pods `kubectl --kubeconfig /etc/kubernetes/admin.conf  get pods -A | grep etc | awk '{print $2}'` -n kube-system  -o=jsonpath='{.spec.containers[0].command}' | jq
    

    出力例:

    [
      "etcd",
      "--advertise-client-urls=https://192.168.7.154:2379",
      "--cert-file=/etc/kubernetes/pki/etcd/server.crt",
      "--client-cert-auth=true",
      "--data-dir=/var/lib/etcd",
      "--initial-advertise-peer-urls=https://192.168.7.154:2380",
      "--initial-cluster=workload-vsphere-tkg2-control-plane-fk5hw=https://192.168.7.154:2380",
      "--key-file=/etc/kubernetes/pki/etcd/server.key",
      "--listen-client-urls=https://127.0.0.1:2379,https://192.168.7.154:2379",
      "--listen-metrics-urls=http://127.0.0.1:2381",
      "--listen-peer-urls=https://192.168.7.154:2380",
      "--name=workload-vsphere-tkg2-control-plane-fk5hw",
      "--peer-cert-file=/etc/kubernetes/pki/etcd/peer.crt",
      "--peer-client-cert-auth=true",
      "--peer-key-file=/etc/kubernetes/pki/etcd/peer.key",
      "--peer-trusted-ca-file=/etc/kubernetes/pki/etcd/ca.crt",
      "--snapshot-count=10000",
      "--trusted-ca-file=/etc/kubernetes/pki/etcd/ca.crt"
    ]
    
  2. 各制御プレーン ノードに対して以下を実行します。

    1. ssh コマンドを実行してノードにログインします。

    2. 次のコマンドを実行して、etcdctl 実行ファイルを見つけます。

      find / -type f -name "*etcdctl*" -print
      

      出力例:

       /run/containerd/io.containerd.runtime.v1.linux/k8s.io/823581f975804b65048f4babe2015a95cfa7ed6f767073796afe47b9d03299fb/rootfs/usr/local/bin/etcdctl`
       /var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/19/fs/usr/local/bin/etcdctl
      
    3. etcd バックアップ ファイルを作成して確認します。

      1. 次のコマンドを実行します。

        ETCD-EXE snapshot save LOCAL-BACKUP --endpoints=ENDPOINTS --cacert=CA --cert=CERT --key=KEY
        

        ここで、

        • ETCD-EXE は、etcdctl 実行ファイルへのローカル パスです。
        • LOCAL-BACKUP は、バックアップ先のローカル ファイルです(例:/tmp/etcdBackup1.db)。
        • ENDPOINTSCACERT、および KEYは、上記で記録された --advertise-client-urls--peer-trusted-ca-file--cert-file、および --key-file の値です。

        例:

        /var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/19/fs/usr/local/bin/etcdctl snapshot save /tmp/etcdBackup1.db \
         --endpoints=https://192.168.7.154:2379 \
         --cacert=/etc/kubernetes/pki/etcd/ca.crt \
         --cert=/etc/kubernetes/pki/etcd/server.crt \
         --key=/etc/kubernetes/pki/etcd/server.key
        
        1. バックアップ ファイルが作成されたことを確認します。

          ls -l  LOCAL-BACKUP
          
        2. ファイルからスナップショットを生成して、バックアップの内容を確認します。

          ETCD-EXE --write-out=table snapshot status LOCAL-BACKUP
          
  3. ブートストラップ マシンから、次のコマンド シーケンスを実行してクラスタ情報を収集し、ファイルに保存します。

      tanzu cluster list -A > CLUSTER-INFO-1
      kubectl config get-contexts >> CLUSTER-INFO-1
      kubectl config use-context tkg-mgmt-vsphere-20211111074850-admin@tkg-mgmt-vsphere-20211111074850 >> CLUSTER-INFO-1
      kubectl get nodes -o wide >> CLUSTER-INFO-1
      kubectl config use-context mycluster1-admin@mycluster1 >> CLUSTER-INFO-1
      kubectl get nodes -o wide >> CLUSTER-INFO-1
      cat CLUSTER-INFO-1
    

    ここで、CLUSTER-INFO-1 は情報を保存するためのローカル テキスト ファイルです(例:/tmp/SaveClusterInfo1.txt)。

  4. ワーカー ノード上のすべてのアプリケーションをドレインします。

  5. vCenter Server 上のすべての仮想マシンを次の順序で停止します。

    1. 管理クラスタ制御プレーン ノードをシャットダウンします。
    2. 管理クラスタ ワーカー ノードをシャットダウンします。
    3. ワークロード クラスタ制御プレーン ノードをシャットダウンします。
    4. ワークロード クラスタ ワーカー ノードをシャットダウンします。
  6. vCenter Server 上のすべての仮想マシンを次の順序で再起動します。

    1. ワークロード クラスタ制御プレーン ノードを起動します。
    2. ワークロード クラスタ ワーカー ノードを起動します。
    3. 管理クラスタ制御プレーン ノードを起動します。
    4. 管理クラスタ ワーカー ノードを起動します。
  7. 次のコマンド シーケンスを実行してクラスタ情報を収集し、ファイルに保存します。

    tanzu cluster list -A --include-management-cluster -A > CLUSTER-INFO-2
    kubectl config get-contexts >> CLUSTER-INFO-2
    kubectl config use-context tkg-mgmt-vsphere-20211111074850-admin@tkg-mgmt-vsphere-20211111074850 >> CLUSTER-INFO-2
    kubectl get nodes -o wide >> CLUSTER-INFO-2
    kubectl config use-context mycluster1-admin@mycluster1 >> CLUSTER-INFO-2
    kubectl get nodes -o wide >> CLUSTER-INFO-2
    cat CLUSTER-INFO-2
    

    ここで、CLUSTER-INFO-2 は情報を保存するための異なるローカル テキスト ファイルです(例:/tmp/SaveClusterInfo2.txt)。

  8. 2 つのクラスタ情報ファイルを比較して、同じクラスタ情報を持っていることを確認します。次に例を示します。

    sdiff /tmp/SaveClusterInfo1.txt /tmp/SaveClusterInfo2.txt
    

ワークロード クラスタの削除

ワークロード クラスタを削除するには、tanzu cluster delete コマンドを実行します。クラスタの内容とクラウド インフラストラクチャによっては、クラスタ自体を削除する前に、クラスタ内のボリュームとサービスの削除が必要になる場合があります。

重要

ワークロード クラスタは明示的に削除する必要があります。管理クラスタ内の名前空間を削除してワークロード クラスタを削除することはできません。

  1. クラスタを一覧表示します。

    Tanzu CLI の現在のログイン コンテキスト内のすべてのワークロード クラスタを一覧表示するには、tanzu cluster list -A コマンドを実行します。

    tanzu cluster list -A
    
  2. ボリュームおよびサービスを削除します。

    削除するクラスタにパーシステント ボリュームまたはロード バランサやデータベースなどのサービスが含まれている場合は、クラスタ自体を削除する前にそれらを手動で削除する必要がある場合があります。事前に削除する必要があるものは、クラウド インフラストラクチャによって異なります。

    vSphere
    インフラストラクチャが vSphere の場合は、次の手順を実行します。

    サービス タイプ LoadBalancer の削除

    クラスタ内のサービス タイプ LoadBalancer (Service) を削除するには:

    1. kubectl をクラスタのコンテキストに設定します。

      kubectl config set-context my-cluster@user
      
    2. クラスタのサービス リストを取得します。

      kubectl get service
      
    3. 各サービス タイプ LoadBalancer を削除します。

      kubectl delete service <my-svc>
      

    パーシステント ボリュームとパーシステント ボリュームの要求の削除

    クラスタ内のパーシステント ボリューム (PV) およびパーシステント ボリュームの要求 (PVC) オブジェクトを削除するには:

    1. kubectl config set-context my-cluster@user を実行して、kubectl をクラスタのコンテキストに設定します。

    2. kubectl get pvc を実行して、クラスタのパーシステント ボリュームの要求 (PVC) を取得します。

    3. 各 PVC に対して以下を実行します。

      1. kubectl describe pvc <my-pvc> を実行して、バインドされている PV を特定します。PV は、コマンド出力に Volume として表示されます(Status: Bound の後)。

      2. kubectl describe pv <my-pv> を実行して、バインドされた PV Reclaim PolicyRetain または Delete かどうかを判断します。

      3. kubectl delete pvc <my-pvc> を実行して PVC を削除します。

      4. PV 再利用ポリシーが Retain の場合は、kubectl delete pv <my-pvc> を実行し、クラウド ポータルにログインして PV オブジェクトを削除します。たとえば、[データストア ペイン] > [監視] > [クラウド ネイティブ ストレージ] > [コンテナ ボリューム] から vSphere CNS ボリュームを削除します。vSphere CNS の詳細については、「vSphere での Cloud ネイティブ ストレージの使用開始」を参照してください。

    Amazon Web Services (AWS)
    インフラストラクチャが AWS の場合は、次の手順を実行します。
    • ロード バランサ:クラスタの VPC 内のアプリケーションまたはネットワーク ロード バランサ(ALB または NLB)。従来のロード バランサ (ELB v1) ではありません。AWS ユーザー インターフェイスでこれらのリソースを削除するか、kubectl delete コマンドを実行します。
    • その他のサービス:RDS や VPC など、クラスタの VPC 内のサブネットおよび AWS によってバッキングされたサービス、および次のような関連リソース。

      • VPC:[VPC ダッシュボード (VPC Dashboard)] > [Virtual Private Cloud] > [該当の VPC (Your VPCs)] で削除します。
      • RDS: [RDS ダッシュボード (RDS Dashboard)] > [データベース (Databases)] で削除します。
      • サブネット:[VPC ダッシュボード (VPC Dashboard)] > [Virtual Private Cloud] > [サブネット (Subnets)] で削除します。
      • ルート テーブル:[VPC ダッシュボード (VPC Dashboard)] > [Virtual Private Cloud] > [ルート テーブル (Route Tables)] で削除します。
      • インターネット ゲートウェイ[VPC ダッシュボード (VPC Dashboard)] > [Virtual Private Cloud] > [インターネット ゲートウェイ (Internet Gateways)] で削除します。
      • 弾性 IP アドレス:[VPC ダッシュボード (VPC Dashboard)] > [Virtual Private Cloud] > [弾性 IP アドレス (Elastic IPs)] で削除します。
      • NAT ゲートウェイ:[VPC ダッシュボード (VPC Dashboard)] > [Virtual Private Cloud] > [NAT ゲートウェイ (NAT Gateways)] で削除します。
      • ネットワーク ACL:[VPC ダッシュボード (VPC Dashboard)] > [セキュリティ (Security)] > [ネットワーク ACL (Network ACLs)] で削除します。
      • セキュリティ グループ:[VPC ダッシュボード (VPC Dashboard)] > [セキュリティ (Security)] > [セキュリティ グループ (Security Groups)] で削除します。

      上記のように AWS ユーザー インターフェイスでこれらのリソースを削除するか、aws CLI を実行します。

    • パーシステント ボリュームおよびパーシステント ボリュームの要求:次の「パーシステント ボリュームの要求とパーシステント ボリュームの削除」の説明に従って、kubectl delete コマンドを使用してこれらのリソースを削除します。

    Azure
    インフラストラクチャが Azure の場合、アクションは必要ありません。

    クラスタを削除すると、TKG によってクラスタのリソース グループに作成されたものすべてが削除されます。

  3. 必要に応じて、Velero のドキュメントの「Cluster Migration」および「Resource Filtering」の説明に従って Velero を使用するなどして、クラスタからワークロードを移行します。

  4. クラスタを削除します。

    クラスタを削除するには、tanzu cluster delete を実行します。

    tanzu cluster delete my-cluster
    

    クラスタが default 名前空間以外の名前空間で実行されている場合は、--namespace オプションを指定してそのクラスタを削除する必要があります。

    tanzu cluster delete my-cluster --namespace=my-namespace
    

    tanzu cluster delete を実行するときに yes/no 検証手順をスキップするには、--yes オプションを指定します。

    tanzu cluster delete my-cluster --namespace=my-namespace --yes
    

    AWS でクラスタを削除するには、AWS_REGION 変数をクラスタが実行されているリージョンに設定する必要があります。「AWS アカウントの認証情報の構成」で説明しているように、ローカル環境または認証情報プロファイルで AWS_REGION を設定できます。別のリージョンのクラスタを削除するには、tanzu cluster delete コマンドの先頭に設定を追加します。

    AWS_REGION=eu-west-1 tanzu cluster delete my-cluster
    
重要

Tanzu Kubernetes Grid 操作の実行中は、コンテキストを変更したり、.kube-tkg/config ファイルを編集したりしないでください。

check-circle-line exclamation-circle-line close-line
Scroll to top icon