重新启动和删除集群

本主题介绍了如何关闭和重新启动工作负载集群以及如何删除它们。

关闭并重新启动工作负载集群

您可能需要关闭并重新启动工作负载集群,以适应网络维护或计划内网络停机的计划中断。

必备条件

  • 所有网络上所有集群节点的 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
        • ENDPOINTSCACERTKEY 是上述记录的 --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 上的所有虚拟机:

    1. 关闭管理集群控制平面节点。
    2. 关闭管理集群工作节点。
    3. 关闭工作负载集群控制平面节点。
    4. 关闭工作负载集群工作节点。
  6. 按以下顺序重新启动 vCenter 上的所有虚拟机:

    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. 比较这两个集群信息文件以验证它们是否具有相同的集群信息,例如:

    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(服务),请执行以下操作:

    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 对象。例如,从数据存储窗格 > 监控 (Monitor) > 云原生存储 (Cloud Native Storage) > 容器 (Container Volumes)中删除 vSphere CNS 卷。有关 vSphere CNS 的详细信息,请参见 VMware Cloud 原生存储入门

    Amazon Web Services (AWS)
    如果您的基础架构为 AWS,请执行以下操作。
    • 负载均衡器:集群的 VPC 中的应用程序或网络负载均衡器(ALB 或 NLB),但不是经典负载均衡器 (ELB v1)。在 AWS UI 中或使用 kubectl delete 命令删除这些资源。
    • 其他服务:集群的 VPC 中的任何子网和 AWS 支持的服务(如 RDS 或 VPC)以及相关资源,例如:

      • 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)下删除。
      • Internet 网关:在 Internet 网关下删除 VPC 仪表板 (VPC Dashboard) > Virtual Private Cloud > Internet 网关 (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 UI 中如上所述或使用 aws CLI 删除这些资源。

    • 持久卷和持久卷声明:如下面的删除持久卷声明和持久卷中所述,使用 kubectl delete 命令删除这些资源。

    Azure
    如果您的基础架构是 Azure,则无需执行任何操作。

    删除集群将删除 TKG 在集群的资源组中创建的所有内容。

  3. 如果需要,将工作负载迁移出集群,例如使用 Velero,如 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_REGION,如配置 AWS 帐户凭据中所述。要删除不同区域中的集群,请在 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