Skip to content

对工作集群的控制节点扩容

本文将以一个单控制节点的工作集群为例,介绍如何手动为工作集群的控制节点进行扩容,以实现自建工作集群的高可用。

Note

  • 推荐在界面创建工作集群时即开启高可用模式,手动扩容工作集群的控制节点存在一定的操作风险,请谨慎操作。
  • 当工作集群的首个控制节点故障或异常时,如果您想替换或重新接入首个控制节点, 请参考替换工作集群的首个控制节点

前提条件

  • 已经通过 AI 算力中心平台创建好一个工作集群,可参考文档创建工作集群
  • 工作集群的被纳管集群存在当前平台中,并且状态运行正常。

Note

被纳管集群:在界面创建集群时指定的用来管理当前集群,并为当前集群提供 kubernetes 版本升级、节点扩缩容、卸载、操作记录等能力的集群。

修改主机清单文件

  1. 登录到容器管理平台,进入需要进行控制节点扩容的集群概览页面,在 基本信息 处,找到当前集群的 被纳管集群 , 点击被纳管集群的名称,进入被纳管集群的概览界面。

    找到被纳管集群

  2. 在被纳管集群的概览界面,点击 控制台,打开云终端控制台,并执行如下命令,找到待扩容工作集群的主机清单文件。

    kubectl get cm -n kubean-system ${ClusterName}-hosts-conf -oyaml
    

    ${ClusterName}:为待扩容工作集群的名称。

    控制台

  3. 参考下方示例修改主机清单文件,新增控制节点信息。

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: tanghai-dev-hosts-conf
      namespace: kubean-system
    data:
      hosts.yml: |
        all:
          hosts:
            node1:
              ip: 10.6.175.10 
              access_ip: 10.6.175.10
              ansible_host: 10.6.175.10 
              ansible_connection: ssh
              ansible_user: root
              ansible_password: password01
          children:
            kube_control_plane:
              hosts:
                node1:
            kube_node:
              hosts:
                node1:
            etcd:
              hosts:
                node1:
            k8s_cluster:
              children:
                kube_control_plane:
                kube_node:
            calico_rr:
              hosts: {}
    ......
    
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: tanghai-dev-hosts-conf
      namespace: kubean-system
    data:
      hosts.yml: |
        all:
          hosts:
            node1: # 原集群中已存在的主节点
              ip: 10.6.175.10
              access_ip: 10.6.175.10 
              ansible_host: 10.6.175.10
              ansible_connection: ssh
              ansible_user: root
              ansible_password: password01
            node2: # 集群扩容待新增的控制节点
              ip: 10.6.175.20
              access_ip: 10.6.175.20
              ansible_host: 10.6.175.20
              ansible_connection: ssh
              ansible_user: root
              ansible_password: password01
            node3: # 集群扩容待新增的控制节点
              ip: 10.6.175.30 
              access_ip: 10.6.175.30
              ansible_host: 10.6.175.30 
              ansible_connection: ssh
              ansible_user: root
              ansible_password: password01
          children:
            kube_control_plane:
              hosts: # 集群中的控制节点组
                node1:
                node2: # 新增控制节点 node2 内容 
                node3: # 新增控制节点 node3 内容 
            kube_node:
              hosts: # 集群中的工作节点组
                node1:
                node2: # 新增控制节点 node2 内容 
                node3: # 新增控制节点 node3 内容 
            etcd:
              hosts: # 集群中的 ETCD 节点组
                node1:
                node2: # 新增控制节点 node2 内容 
                node3: # 新增控制节点 node3 内容 
            k8s_cluster:
              children:
                kube_control_plane:
                kube_node:
            calico_rr:
              hosts: {}
    

新增 ClusterOperation.yml 扩容任务

使用基于下面的 ClusterOperation.yml 模板,新增一个集群控制节点扩容任务 scale-master-node-ops.yaml

ClusterOperation.yml
apiVersion: kubean.io/v1alpha1
kind: ClusterOperation
metadata:
  name: cluster1-online-install-ops
spec:
  cluster: ${cluster-name} # (1)!
  image: ghcr.m.daocloud.io/kubean-io/spray-job:v0.18.0 # (2)!
  actionType: playbook
  action: cluster.yml # (3)!
  extraArgs: --limit=etcd,kube_control_plane -e ignore_assert_errors=yes
  preHook:
    - actionType: playbook
      action: ping.yml
    - actionType: playbook
      action: disable-firewalld.yml
    - actionType: playbook
      action: enable-repo.yml  # (4)!
      extraArgs: | # 如果是离线环境,需要添加 enable-repo.yml,并且 extraArgs 参数填写相关 OS 的正确 repo_list
        -e "{repo_list: ['http://172.30.41.0:9000/kubean/centos/\$releasever/os/\$basearch','http://172.30.41.0:9000/kubean/centos-iso/\$releasever/os/\$basearch']}"
  postHook:
    - actionType: playbook
      action: upgrade-cluster.yml
      extraArgs: --limit=etcd,kube_control_plane -e ignore_assert_errors=yes
    - actionType: playbook
      action: kubeconfig.yml
    - actionType: playbook
      action: cluster-info.yml
  1. 指定 cluster name
  2. 指定 kubean 任务运行的镜像,镜像地址要与之前执行部署时的 job 其内镜像保持一致
  3. 如果一次性添加 Master(etcd)节点超过(包含)三个,需在 cluster.yaml 追加额外参数 -e etcd_retries=10 以增大 etcd node join 重试次数
  4. 离线环境下需要添加此 yaml,并且设置正确的 repo-list(安装操作系统软件包),以下参数值仅供参考

然后创建并部署 scale-master-node-ops.yaml。

vi scale-master-node-ops.yaml
kubectl apply -f scale-master-node-ops.yaml -n kubean-system

执行完上述步骤,执行如下命令进行验证:

kubectl get node