本节介绍如何删除 KubeSphere 集群节点。

节点删除过程中将用到开源工具 KubeKey。有关 KubeKey 的更多信息,请访问 GitHub KubeKey 仓库

说明

本节介绍的节点删除方式仅适用于 Kubernetes 通过 KubeKey 安装的场景。如果您的 Kubernetes 不是通过 KubeKey 安装,请参阅 Kubernetes 官方文档删除节点。

警告
  • 请勿删除控制平面节点,否则集群将出现错误。

  • 请确保节点删除后,集群中剩余的资源仍然足够运行现有的业务。否则,节点删除后可能会出现业务中断。

若 KubeSphere 为在线安装

若 KubeSphere 为在线安装,请按照以下步骤删除集群节点。

准备工作

您需要获取安装配置文件 config-sample.yaml 并将其传输到用于执行本节操作的集群节点。

警告

如果您无法获取安装配置文件 config-sample.yaml,您需要参阅在线安装 KubeSphere 重新创建 config-sample.yaml 文件。重新创建该文件时,请务必确保文件中的集群信息与集群的当前实际情况一致。否则,删除节点后集群可能会出现错误。

操作步骤

  1. 如果您访问 GitHub/Googleapis 受限,请登录任意集群节点,执行以下命令设置下载区域:

    export KKZONE=cn
  2. 执行以下命令下载 KubeKey 最新版本:

    curl -sfL https://get-kk.kubesphere.io | sh -

    下载完成后当前目录下将生成 KubeKey 二进制文件 kk

  3. 执行以下命令为 KubeKey 二进制文件 kk 添加执行权限:

    sudo chmod +x kk
  4. 执行以下命令查看需要删除的节点的名称:

    kubectl get node
  5. 执行以下命令将需要删除的节点上运行的容器组驱逐到其他节点(将 <nodename> 替换为需要删除的节点的名称):

    kubectl drain <nodename>
  6. 将安装配置文件 config-sample.yaml 传输到当前目录。

  7. 执行以下命令开始删除节点:

     ./kk delete node <nodename> -f config-sample.yaml
  8. 执行以下命令查看当前集群节点:

    kubectl get node

    如果没有显示已删除节点的信息,则表明节点删除成功。

若 KubeSphere 为离线安装

若 KubeSphere 使用 Web Installer 离线安装,请按照以下步骤删除集群节点。

说明

暂不支持在 Web Installer 页面删除节点。

准备工作

登录部署节点,进入离线包目录,获取节点信息和安装配置文件,用于后续执行 kk 命令。

cd offline
注意

后续步骤必须在离线包解压后的目录(如 offline)中执行,否则会导致操作失败。

一、获取节点信息: kkv4-inventory.yaml

  1. 获取节点信息文件。

    cp kubekey/runtime/kubekey.kubesphere.io/v1/inventories/default/default.yaml kkv4-inventory.yaml

    节点信息示例如下:

    apiVersion: kubekey.kubesphere.io/v1
    kind: Inventory
    metadata:
      name: default
      namespace: default
    spec:
      groups:
        etcd:
          hosts:
          - scan-cqxbav3
          vars: null
        image_registry:
          hosts: []
          vars: null
        k8s_cluster:
          groups:
          - kube_control_plane
          - kube_worker
          hosts: null
          vars: null
        kube_control_plane:
          hosts:
          - scan-cqxbav3
          vars: null
        kube_worker:
          hosts:
          - scan-cqxbav3
          vars: null
        nfs:
          hosts: []
          vars: null
      hosts:
        scan-cqxbav3:
          connector:
            host: 172.16.0.4
            password: ""
            port: "22"
            user: root
          internal_ipv4: 172.16.0.4
          kubernetes:
            custom_labels: {}
      vars: null
    status: {}

二、获取安装配置文件: kkv4-config.json

  1. 安装 jq

    在 Ubuntu 操作系统上,执行以下安装命令:

    sudo apt install jq

    如果部署节点使用其他操作系统,请将 apt 替换为操作系统对应的软件包管理工具。

  2. 获取安装集群时的配置文件 kkv4-config.json

    cd schema/config.json | jq '{spec: .["kubernetes.json"]}' > kkv4-config.json

    配置信息示例:

    {
      "spec": {
        "kubernetes": {
          "cluster_name": "cluster-01",
          "kube_version": "v1.33.3",
          "control_plane_endpoint": {
            "host": "lb.kubesphere.local",
            "port": 6443,
            "type": "local"
          }
        },
        "cri": {
          "container_manager": "containerd"
        },
        "cni": {
          "type": "calico",
          "max_pods": 110,
          "service_cidr": "10.233.0.0/18",
          "pod_cidr": "10.233.64.0/18",
          "ipv4_mask_size": 24,
          "ipv6_mask_size": 64
        },
        "image_registry": {
          "auth": {
            "registry": "dockerhub.kubekey.local",
            "username": "admin",
            "password": "Harbor12345",
            "insecure": true
          }
        },
        "storage_class": {
          "local": {
            "enabled": true,
            "default": true,
            "path": "/var/openebs/local"
          }
        }
      }
    }

操作步骤

  1. 登录集群节点,执行以下命令查看需要删除的节点的名称:

    kubectl get node
  2. 将需要删除的节点上运行的容器组驱逐到其他节点(将 <nodename> 替换为需要删除的节点的名称):

    kubectl drain <nodename>
  3. 部署节点,进入离线包解压后的目录(如 offline),使用 kkv4-inventory.yamlkkv4-config.json 删除节点。

    cd offline
    ./kk delete nodes <nodename> -i kkv4-inventory.yaml -c kkv4-config.json
    说明

    暂不支持删除 etcd 节点。

    如果显示如下信息,则表明节点删除成功。

    回显示例:

    [Playbook default/delete-nodes-qpmzs] finish. total: 74,success: 68,ignored: 6,failed: 0
  4. 集群节点上,执行以下命令查看当前集群的节点:

    kubectl get node

    如果没有显示已删除节点的信息,也表明节点删除成功。