添加集群节点
本节介绍如何添加 KubeSphere 集群节点。
节点添加过程中将用到开源工具 KubeKey。有关 KubeKey 的更多信息,请访问 GitHub KubeKey 仓库。
| 说明 |
|---|
本节介绍的节点添加方式仅适用于 Kubernetes 通过 KubeKey 安装的场景。如果您的 Kubernetes 不是通过 KubeKey 安装,请参阅 Kubernetes 官方文档添加节点。 |
前提条件
-
集群节点的操作系统和版本须为 Ubuntu 16.04、Ubuntu 18.04、Ubuntu 20.04、Ubuntu 22.04、Debian 9、Debian 10、CentOS 7、CentOS Stream、RHEL 7、RHEL 8、SLES 15、openSUSE Leap 15 或 Kylin v10。多台服务器的操作系统可以不同。关于其它操作系统和版本支持,请咨询青云科技官方解决方案专家或交付服务专家。
-
为确保集群具有足够的计算和存储资源,建议新增节点配置至少 8 个 CPU 核心,16 GB 内存和 200 GB 磁盘空间。除此之外,建议在每台集群节点的 /var/lib/docker(对于 Docker)或 /var/lib/containerd(对于 containerd) 目录额外挂载至少 200 GB 磁盘空间用于存储容器运行时数据。
-
如果添加控制平面节点,您需要提前为集群配置高可用性。如果您使用负载均衡器,请确保负载均衡器监听所有控制平面节点的 6443 端口。有关更多信息,请参阅配置高可用性。
-
新增节点上已安装 socat、conntrack、tar、ebtables 和 ipset。
若 KubeSphere 为在线安装
若 KubeSphere 为在线安装,请按照以下步骤添加集群节点。
准备工作
您需要获取安装配置文件 config-sample.yaml 并将其传输到用于执行本节操作的集群节点。
| 警告 |
|---|
|
操作步骤
-
如果您访问 GitHub/Googleapis 受限,请登录任意集群节点,执行以下命令设置下载区域:
export KKZONE=cn -
执行以下命令下载 KubeKey 最新版本:
curl -sfL https://get-kk.kubesphere.io | sh -下载完成后当前目录下将生成 KubeKey 二进制文件 kk。
-
执行以下命令为 KubeKey 二进制文件 kk 添加执行权限:
sudo chmod +x kk -
将安装配置文件 config-sample.yaml 传输到当前目录。
-
执行以下命令编辑安装配置文件 config-sample.yaml:
vi config-sample.yaml -
在 config-sample.yaml 文件的 hosts 参数下设置新增节点的信息。
参数 描述 name
用户自定义的服务器名称。
address
服务器的 SSH 登录 IP 地址。
internalAddress
服务器在子网内部的 IP 地址。
port
服务器的 SSH 端口号。如果使用默认端口 22 可不设置此参数。
user
服务器的 SSH 登录用户名,该用户必须为 root 用户或其他具有 sudo 命令执行权限的用户。如果使用 root 用户可不设置此参数。
password
服务器的 SSH 登录密码。如果已经设置 privateKeyPath 可不设置此参数。
privateKeyPath
服务器的 SSH 登录密钥的路径。如果已经设置 password 可不设置此参数。
arch
服务器的硬件架构。如果服务器的硬件架构为 arm64,请将此参数设置为 arm64,否则请勿设置此参数。安装包默认仅支持所有集群节点都为 x86_64 或 arm64 架构的场景。如果某集群节点的硬件架构不完全相同,需针对具体情况进行技术评估,请咨询青云科技官方解决方案专家或交付服务专家。
警告 请勿修改原有节点的信息。否则,添加节点后集群可能会出现错误。
-
在 config-sample.yaml 文件的 roleGroups 参数下设置新增节点在集群中的角色。
参数 描述 etcd
安装 etcd 数据库的节点。请在此参数下设置集群控制平面节点。
control-plane
集群控制平面节点。如果您已经为集群配置了高可用性,您可以设置多个控制平面节点。
worker
集群工作节点。
registry
用于创建私有镜像服务的服务器。该服务器不会用作集群节点。 安装、升级 KubeSphere 时,如果集群节点无法连接互联网,需要在此参数下设置用于创建私有镜像服务的服务器。其他情况下请将此参数注释掉。
警告 请勿修改原有节点的角色。否则,添加节点后集群可能会出现错误。
-
如果新增控制平面节点并且当前集群未配置高可用性,在 config-sample.yaml 文件的 controlPlaneEndpoint 参数下设置高可用性信息。
参数 描述 internalLoadbalancer
本地负载均衡器的类型。如果使用本地负载均衡配置,请将此参数设置为 haproxy。否则,请将此参数注释掉。
domain
负载均衡器的内部访问域名。请将此参数设置为 lb.kubesphere.local。
address
负载均衡器的 IP 地址。如果使用本地负载均衡配置,请将此参数留空;如果使用专用负载均衡器,请将此参数设置为负载均衡器的 IP 地址;如果使用通用服务器作为负载均衡器,请将此参数设置为负载均衡器的浮动 IP 地址。
port
负载均衡器监听的端口号,即 apiserver 服务的端口号。请将此参数设置为 6443。
警告 -
如果当前集群已配置高可用性,请勿修改 config-sample.yaml 文件中的高可用性信息。否则,添加节点后集群可能会出现错误。
-
如果当前集群使用本地负载均衡实现高可用性,您不需要对集群高可用性进行任何操作;如果当前集群使用负载均衡器实现高可用性,您只需要设置负载均衡器监听所有控制平面节点的 6443 端口。有关更多信息,请参阅配置高可用性。
-
-
保存配置文件,执行以下命令开始添加节点:
./kk add nodes -f config-sample.yaml -
执行以下命令查看当前集群的节点:
kubectl get node如果显示新增节点的信息,则表明节点添加成功。
若 KubeSphere 为离线安装
若 KubeSphere 使用 Web Installer 离线安装,请按照以下步骤添加集群节点。
| 说明 |
|---|
暂不支持在 Web Installer 页面添加节点。 |
准备工作
登录部署节点,进入离线包目录,获取节点信息和安装配置文件,用于后续执行 kk 命令。
cd offline
| 注意 |
|---|
后续步骤必须在离线包解压后的目录(如 |
一、获取节点信息: kkv4-inventory.yaml
-
获取节点信息文件。
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
-
安装
jq。在 Ubuntu 操作系统上,执行以下安装命令:
sudo apt install jq如果部署节点使用其他操作系统,请将 apt 替换为操作系统对应的软件包管理工具。
-
获取安装集群时的配置文件
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" } } } }
操作步骤
-
在
部署节点,进入离线包解压后的目录(如 offline),添加新增节点的信息到kkv4-inventory.yaml文件。cd offlinevi kkv4-inventory.yaml在
spec.host字段中的原有节点信息后,加入将要添加的节点信息。示例如下:spec: hosts: scan-cqxbav3: # 原有节点 connector: host: 172.16.0.4 password: "" port: "22" user: "root" internal_ipv4: 172.16.0.4 kubernetes: custom_labels: {} node1: # 新增节点的名称 connector: # 节点连接信息 host: 172.16.0.5 # 节点的 ssh 连接地址 password: "" # 节点的 ssh 连接密码 private_key_content: "" # 节点 ssh 连接的密钥内容 port: "" # 节点的 ssh 连接端口 user: "" # 节点的 ssh 连接用户 internal_ipv4: 172.16.0.5 # 节点内部通信的 IP kubernetes: custom_labels: {} # 为节点设置的自定义 label在
spec.groups字段中对应节点角色下的hosts中加入新增节点的名称。示例如下: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 - node1 # 新增节点的名称 vars: null nfs: hosts: [] vars: null-
spec.groups.etcd: 将新增节点作为 etcd 节点。暂不支持。 -
spec.groups.kube_control_plane: 将新增节点作为 Kubernetes 集群的控制平面节点。 -
spec.groups.worker: 将新增节点作为 Kubernetes 集群的工作节点。
-
-
使用
kkv4-inventory.yaml和kkv4-config.json添加节点。需将 <nodename1> <nodename2> 替换为 kkv4-inventory.yaml 中添加的节点名称。
./kk add nodes <nodename1> <nodename2> -i kkv4-inventory.yaml -c kkv4-config.json如果显示如下信息,则表明节点添加成功。
回显示例:
[Playbook default/add-nodes-p44cg] finish. total: 229,success: 219,ignored: 10,failed: 0 -
登录
集群节点,执行以下命令查看当前集群的节点:kubectl get node如果显示新增节点的信息,也表明节点添加成功。