集群管理

KubeClipper 集群管理功能使用指南

创建集群

您可以通过向导式的页面创建 K8S 集群,并安装CNI、CSI等所需插件。也可以提前保存好集群模版,选择模版后快速创建集群。

创建集群准备工作

  1. 您需要准备充足的可用节点,如需添加节点,参见“添加节点”教程。

  2. 准备好需要部署的 K8S、CRI、calico、CSI 和其他插件的镜像或二进制文件,kubeclipper 提供了推荐的版本,您可以根据平台所处网络环境,选择在线 / 离线后,直接在页面上选取使用。您也可以将部署所需的镜像上传至自己的镜像仓库,并在部署时指定。更多安装配置,参考以下表格:

    页面配置配置包/镜像来源
    在线(公网环境)

    镜像仓库为空
    1. 配置包来源:从 kubeclipper.io 下载。


    2. 镜像拉取方式:镜像默认从官方镜像仓库拉取,如k8s镜像从 k8s.gcr.io 拉取、calico 从 docker.io 拉取。
    在线(公网环境)

    镜像仓库指定
    1. 配置包来源:从 kubeclipper.io 下载。


    2. 镜像拉取方式:从填写的镜像仓库拉取,组件将默认继承该仓库地址,请确保该仓库存在相关组件镜像;组件也会提供独立的镜像仓库参数,设置后组件镜像从该地址拉取。
    离线(内网环境)

    镜像仓库为空


    1. 配置包来源:从本地 kubeclipper 集群server节点下载,您可以使用 kcctl resource list 命令查看本地可用配置包,或使用 kcctl resource push 命令上传所需配置包。


    2. 镜像拉取方式:从本地 kubeclipper 集群server节点下载,下载后由CRI进行镜像导入。您可以使用 kcctl resource list 命令查看本地可用镜像包,或使用 kcctl resource push 命令上传所需镜像包。
    离线(内网环境)

    镜像仓库指定





    1. 配置包来源:从本地下载,您可以使用 kcctl resource list 命令查看本地可用配置包,或使用 kcctl resource push 命令上传所需配置包。


    2. 镜像拉取方式:从填写的镜像仓库拉取,组件将默认继承该仓库地址,请确保该仓库存在相关组件镜像;组件也会提供独立的镜像仓库参数,设置后组件镜像从该地址拉取。kubeclipper 提供 Docker Registry 方案,并使用 kcctl registry 命令行进行管理,您也可以使用其他自有镜像仓库。

创建单节点实验集群

  1. 点击“集群管理”>“集群”,进入集群列表页面,点击左上角“创建集群”按钮。

  2. 进入创建集群向导页面的“节点配置”页面。填写“集群名称”,如“test”,不需选择“集群模版”。选择一个可用节点,添加为控制节点,并在污点管理列表中,将 master 节点的污点移除。点击“下一步”按钮。

  1. 进入创建集群向导页面的“集群配置”页面。选择“离线安装”,“镜像仓库”不需填写,其他配置都可使用默认配置,点击“快速创建”按钮,跳转配置确认页面,点击“确认”按钮。

  2. 单节点的实验集群创建完成,您可以在集群详情页查看集群详情,也可以点击“查看日志”按钮,查看集群创建过程中的实时日志。

使用镜像仓库创建集群

如果创建的集群中包含较大的镜像,推荐您将所有镜像上传到特定的镜像仓库,创建集群会更快速更顺畅。

  1. 添加镜像仓库。点击“集群管理”>“镜像仓库”,进入镜像仓库列表页面,点击左上角“添加”按钮。在添加镜像仓库的弹窗中输入存放有镜像的仓库 IP 地址,点击“确定”按钮。

  2. 创建集群。点击“集群管理”>“集群”,进入集群列表页面,点击左上角“创建集群”按钮。按需配置集群节点,在“集群配置”页面的“镜像仓库”中,选择第一步添加的镜像仓库,根据需要完成集群其他配置后创建集群。

使用集群模版创建集群

您可以使用集群模版,简化集群创建流程。

  1. 添加模版。保存模版有两种方式,您可以在“集群管理”>“模版管理”页面,添加集群模版,以备创建集群时使用。也可以点击集群操作中的“更多”>“保存为模版”,将已存在的集群配置保存为模版,以便创建出和该集群同等配置的 K8S 集群。

  2. 创建集群。点击“集群管理”>“集群”,进入集群列表页面,点击左上角“创建集群”按钮,进入创建集群页面,填写“集群名称”,如“demo”,选择第一步中保存的集群模版,添加所需节点,点击右下角“快速创建”按钮,跳转至“配置确认”页面,核对模版信息无误后,点击“确认”按钮,创建集群。

集群配置指南

节点配置步骤

在节点配置页面,您可以对节点进行以下配置:

  • 区域:集群所属区域,添加节点时可为节点指定物理的或逻辑的区域,使用该区域下节点创建的 K8S 集群也属于该区域,不支持使用跨区域的多个节点创建集群。

  • 控制节点:为集群指定奇数个的控制节点,生产环境一般使用3个控制节点以实现高可用。

  • 工作节点:根据业务规模,为新集群添加工作节点。

  • 污点管理:您可以为已添加的节点配置污点,kubeclipper 会自动为控制节点添加不允许调度(noschedule)的污点,您也可以根据需要进行更改。

  • 节点标签:您可以根据需要为已添加的集群节点配置标签。

您可以按业务需要配置所需节点。如果需要创建非高可用的实验集群,也可以仅添加一个控制节点,并将控制节点自动添加的污点移除,详细操作参见“创建单节点实验集群”。

集群配置步骤

在集群配置页面,您可以对集群进行以下配置:

  • 安装方式和镜像仓库:
页面配置配置包/镜像来源
在线(公网环境)

镜像仓库为空
1. 配置包来源:从 kubeclipper.io 下载。


2. 镜像拉取方式:镜像默认从官方镜像仓库拉取,如k8s镜像从 k8s.gcr.io 拉取、calico 从 docker.io 拉取。
在线(公网环境)

镜像仓库指定
1. 配置包来源:从 kubeclipper.io 下载。


2. 镜像拉取方式:从填写的镜像仓库拉取,组件将默认继承该仓库地址,请确保该仓库存在相关组件镜像;组件也会提供独立的镜像仓库参数,设置后组件镜像从该地址拉取。
离线(内网环境)

镜像仓库为空
1. 配置包来源:从本地 kubeclipper 集群server节点下载,您可以使用 kcctl resource list 命令查看本地可用配置包,或使用 kcctl resource push 命令上传所需配置包。


2. 镜像拉取方式:从本地 kubeclipper 集群server节点下载,下载后由CRI进行镜像导入。您可以使用 kcctl resource list 命令查看本地可用镜像包,或使用 kcctl resource push 命令上传所需镜像包。
离线(内网环境)

镜像仓库指定





1. 配置包来源:从本地下载,您可以使用 kcctl resource list 命令查看本地可用配置包,或使用 kcctl resource push 命令上传所需配置包。


2. 镜像拉取方式:从填写的镜像仓库拉取,组件将默认继承该仓库地址,请确保该仓库存在相关组件镜像;组件也会提供独立的镜像仓库参数,设置后组件镜像从该地址拉取。kubeclipper 提供 Docker Registry 方案,并使用 kcctl registry 命令行进行管理,您也可以使用其他自有镜像仓库。
  • K8S版本:指定集群K8S版本。当您选择离线安装的时候,可以从当前环境中配置包的K8S版本中选择;当您选择在线安装的时候,可以从 kubeclipper 官方推荐的版本中选择。

  • ETCD数据目录:可指定ETCD 数据目录,默认为/var/lib/etcd。

  • CertSANs:k8s 集群 ca 证书签名的 ip 或者域名,可填写多个。

  • 容器运行时:根据指定 K8S 版本,K8S 版本在 v1.20.0 之前,容器运行时默认 docker,之后默认 containerd;v1.24.0 之后不支持 docker。

  • 容器运行时版本:指定containerd / docker版本。与 K8S 相同,当您选择离线安装的时候,可以从当前环境中配置包的版本中选择;当您选择在线安装的时候,可以从 kubeclipper 官方推荐的版本中选择。

  • Containerd 数据目录:可填写config.toml 配置中的 root dir,默认为/var/lib/containerd。

  • Docker数据目录:可填写daemon.json 配置中的 root dir,默认为/var/lib/docker。

  • Containerd 镜像仓库:存放containerd镜像的仓库地址,config.toml 配置中的 registry.mirrors,可填写多个。

  • Docker镜像仓库:存放docker镜像的仓库地址,daemon.json 配置中的 insecure registry,可填写多个。

  • DNS 域名:k8s 集群的域名,默认为cluster.local。

  • Worker 负载 IP:用于 worker 节点到多master的负载均衡,单一master不需要设置。

  • 外部访问IP:可以填写一个浮动 IP 给用户访问,可为空。

CNI配置

当前版本仅支持Calico作为集群CNI。

Calico将用户设置的pod cidr分为若干个block(网段),根据业务需求动态的分配给需要的节点,并在节点中通过 bgp peer维护集群节点的路由表。

例如:容器的地址池:172.25.0.0/16,动态分配的网段池: 172.25.0.0 - 172.25.255.192 (172.25.0.0/26 即 10 个比特位),动态分配的网段数: 1023,每个网段的pod数量为: 61 (193-254),总pod数量为1023 * 61 = 62403,相对最大节点数(按照200业务pod为基准值):312。

目前不建议大于50个节点的集群,大于50个节点的集群建议手动配置route reflection,用来优化集群中的节点的路由表维护的稳定性。

使用Calico作为集群CNI,您需要进行以下配置:

  • Calico 模式:支持5种网络模式:

    • Overlay-IPIP-All: 使用 IP-in-IP 技术打通不同节点的 pod 的网络,通常这样的方式使用在底层平台是 iaas 的环境之中,当然如果你底层网路环境直接是物理设备的也完全可以使用只不过效率和灵活度都会大打折扣,需要注意的是你需要确认底层网络环境(underlay)是支持 IPIP 协议的.(使用overlay的网络方式对网络性能造成一定的影响)。

    • Overlay-Vxlan-All: 使用 IP-in-IP 技术打通不同节点的 pod 的网络,通常这样的方式使用在底层平台是 iaas 的环境之中,当然如果你底层网路环境直接是物理设备的也完全可以使用只不过效率和灵活度都会大打折扣,他理论上可以在任何的网络环境上运行,通常在底层环境不支持 IPIP 协议的时候我们会使用他.(使用overlay的网络方式对网络性能造成一定的影响)。

    • BGP: 使用 IP-in-IP 技术打通不同节点的 pod 的网络,通常这样的方式使用在裸机的环境上,当然底 Iaas 平台支持 BGP 的话也是可以使用的,这种模式下 pod 的 ip 通信是通过 集群中的各个节点中互相交换路由表来完成 pod 之间的通信的,如果你需要手动打通多个集群之间的 pod 网络需要注意你分配的地址断不应该有冲突。

    • Overaly-IPIP-Cross-Subnet: 使用 IP-in-IP 技术打通不同节点的 pod 的网络,通常这样的方式使用在底层平台是 iaas 的环境之中,需要注意的是你需要确认底层网络环境(underlay)是支持 IPIP 协议的.和 Overlay-IPIP-All 的不同之处在于,如果 2 个不同节点但在同一个网段中的上 pod 互相通信时是通过路由表,这样可以提高在不同节点但在同一个网段中的上 pod 互相通信时的效率。

    • Overaly-Vxlan-Cross-Subnet: 和 Overaly-IPIP-Cross-Subnet 逻辑相似不再做重复的解释。

  • IP版本:可指定IP版本为IPV4或IPV4 IPV6双栈。

  • 服务子网:填写service子网CIDR,v4默认为:10.96.0.0/16,v6默认为fd03::/112,注意Service网络不得与任何主机网络重叠。

  • Pod CIDR:填写pod子网CIDR,v4默认:172.25.0.0/24,v6默认为fd05::/120,注意Pod 网络不得与任何主机网络重叠。

  • pod网路的底层:

    • first-found(默认):程序会根据ipfamily(v4或v6)遍历所有的有效的ip地址(local,loop back,docker bridge等会被自动排除)通常如果是多网卡时会排除默认网关以外的网卡的ip作为节点之间的路由地址。

    • can-reach:通过检查域名或者ip的可达性来设置节点之间的路由地址。

    • interface:根据正则表达式获取所有满足的网卡设备名称并返回第一个满足表达式网卡的地址作为节点之间的路由地址。

  • MTU:为Calico环境配置最大传输单元(MTU),建议不大于1440,默认为1440,详情见 Configure MTU to maximize network performance

存储配置

Kubeclipper当前版本内置了 NFS、Ceph 两种外接存储类型。

  • 对接NFS存储

对接NFS类型的外接存储,您需要设置以下内容:

字段作用说明填写说明/可选项
服务地址ServerAddr,NFS的服务地址必填
共享路径SharedPath,NFS的服务挂载路径必填
存储类StorageClassName,存储类的名称默认为 nfs-sc,可自定义名称,不可与集群其他存储类重复
回收策略ReclaimPolicy,VPC回收策略删除 Delete / 保留 Retain
删除后归档ArchiveOnDelete,是否在删除后归档PVC是 / 否
挂载选项MountOptions,NFS 的 options 参数,如nfsvers=4.1选填,可填写多个
副本数Replicas,NFS provisioner副本数默认为1

NFS类型的存储默认可对接多个,点击下方“继续添加”按钮,可以添加多个NFS存储,注意存储类名称不可重复。

设置完外接存储后,下方卡片会显示您已经开启的存储,您可以选择一个存储类作为默认存储,对于未指定特定StorageClass 的 PVC ,会直接使用默认的存储类。

集群操作日志查看

在集群详情页面,点击“操作日志”标签页,可以查看集群操作日志列表。点击操作日志右侧“查看日志”按钮,可以在弹窗中查看全部步骤和节点的详细日志。点击左侧步骤名称,可查看执行步骤详细的日志输出。

在集群操作执行过程中,点击查看日志,您可以实时查看到日志更新来跟踪操作执行情况。对于执行失败的任务,您也可以通过查看日志,找到红色圆点标注的执行步骤和节点,快速定位错误,排查操作失败原因。

访问集群 kubectl

您可以访问运行中集群的 kubectl,点击集群操作中的“更多”>“连接终端”,就可以在集群 kuebectl 弹窗中执行 kubectl 命令行操作。

集群插件管理

除了在创建集群时安装插件,您也可以为运行中的集群安装存储和其他自定义插件。以安装存储插件为例,点击集群操作中的“更多”>“添加存储项”按钮,进入添加存储项页面,可以为集群安装 NFS 或Ceph 类型的存储插件,安装配置与创建集群中的配置相同。

对于已安装的插件,您可以在集群详情页查看插件信息。可以点击插件卡片右上角的“保存为模版”按钮,将插件信息保存为模版,以便为其他集群使用。也可以点击插件卡片右上角的“移除”按钮,卸载集群插件。

集群节点管理

在集群详情页的“节点”列表页面,您可以查看当前集群中的节点列表,节点的规格、状态和角色信息。

添加集群节点

当集群负载较高时,您可以通过为集群添加节点来达到主动扩容的目的,添加新的“节点”不会影响现有的业务的运行。

在集群详情页的节点列表标签页下,点击左侧的“添加节点”按钮,在弹窗中选择可用节点,设置节点标签,点击“确认”按钮。当前版本仅支持添加工作节点。

移除集群节点

在集群详情页的节点列表标签页下,您可以点击节点右侧的 “移除”按钮移除节点。当前版本仅支持移除工作节点。

注意:移除集群节点,您需要注意生产中的安全问题,避免应用发生中断。

集群版本升级

当集群版本不满足需要,您可以为集群升级 K8S 版本。与创建集群一样,您需要准备好集群版本所需配置包和目标版本的 K8S 镜像并上传至指定位置,详情参见“创建集群准备工作”。

点击集群操作的“更多”>“集群升级”按钮,在集群升级弹窗中选择安装方式和镜像仓库,选择升级的目标版本,升级的安装方式和 K8S 版本的配置与创建集群相同,详情参见“集群配置指南”。

集群升级可以跨小版本,但不支持略过次版本的升级,如您可以从v1.20.2升级到v1.20.13,或由v1.20.x升级到v1.21.x,但不支持从v1.20.x升级到v1.22.x。对于1.23.x版本,暂不支持升级到1.24.x版本。

升级集群操作可能需要较长时间,您可以在集群详情页面查看操作日志,跟踪集群升级状态。

集群备份与恢复

KubeClipper 对 k8s 集群的备份主要为备份 ETCD 数据库数据,以及 k8s 的资源对象备份,如 namespace,deployment、configMap。对资源自身产生的文件和数据不做备份,例如对集群中运行的 mysql pod,该 mysql pod 产生的数据和文件,不会为之备份,同理,文件类的 pv 对象下的文件,也不做备份,仅仅备份 pv 这个对象。KubeClipper 提供的备份功能是热备份,备份期间不影响集群的使用。KubeClipper 虽然不反对在集群 “繁忙期” 备份,但也强烈不赞成在集群 “繁忙期” 备份。

创建备份点

执行备份之前,您需要先为集群设置备份点,即设置备份文件的存储位置。备份点的存储类型可以是FS 存储或 S3 存储,下面以节点本地存储、NFS 存储和 MINIO 存储为例:

节点本地存储**(仅适用单节点实验集群):**

  1. 创建存储目录。连接集群 master 节点终端(可参见连接节点终端),使用 mkdir 命令,在 master 节点中创建“/root/backup”目录。

  2. 创建备份点。点击“集群管理”>“备份点”,进入备份点列表页,点击右上角“创建”按钮,在创建备份点弹窗中,输入“备份点名称”,如“local”,选择“存储类型”为“FS”,填写“备份路径”,如“/root/backup”。

  3. 设置集群备份点。创建集群时,在“集群配置”页面选择“备份点”为“local”,或者编辑已有集群,在编辑集群弹窗中的“备份点”中选择“local”。

注意:使用本地节点存储备份文件,不需要引入外部存储,缺点是如果本地节点遭到破坏,备份文件也会丢失,所以强烈不赞成在生产环境中使用。

NFS:

  1. 准备 NFS 存储。准备一台 NFS 服务,并在 NFS 服务器上创建一个用于存放备份文件的目录,如 “/data/kubeclipper/cluster-backups”。

  2. 挂载存储目录。连接集群 master 节点终端(可参见连接节点终端),使用 mkdir 命令,在每个 master 节点中创建“/data/kubeclipper/cluster-backups”目录,并 mount 到 NFS 服务器的 /data/kubeclipper/cluster-backups 目录即可,命令示例:mount -t nfs { NFS_IP }:/data/kubeclipper/cluster-backups /opt/kubeclipper/cluster-backups -o proto=tcp -o nolock。

  3. 创建备份点。点击“集群管理”>“备份点”,进入备份点列表页,点击右上角“创建”按钮,在创建备份点弹窗中,输入“备份点名称”,如“nfs”,选择“存储类型”为“FS”,填写“备份路径”为“/opt/kubeclipper/cluster-backups”。

  4. 设置集群备份点。创建集群时,在“集群配置”页面选择“备份点”为“nfs”,或者编辑已有集群,在编辑集群弹窗中的“备份点”中选择“nfs”。

MINIO:

  1. 准备 MINIO 存储。搭建 MINIO 服务,部署过程参考官网 https://docs.min.io/docs/minio-quickstart-guide.html,也可以使用已有 MINIO 服务。

  2. 创建备份点。点击“集群管理”>“备份点”,进入备份点列表页,点击右上角“创建”按钮,在创建备份点弹窗中,输入“备份点名称”,如“minio”,选择“存储类型”为“S3”,填写“bucket 名称”,如 “kubeclipper-backups”,该 bucket 将由 kubeclipper 自动创建,“Endpoint”中填写第一步 MINIO 存储服务的 ip 和端口号,填写服务用户名和密码,点击“确定”按钮。

  3. 设置集群备份点。创建集群时,在“集群配置”页面选择“备份点”为“minio”,或者编辑已有集群,在编辑集群弹窗中的“备份点”中选择“minio”。

您可以在“集群管理”的“备份点”页面查看所有备份点列表和详细信息,并执行以下操作:

  • 编辑:编辑备份点描述,和 S3 类型备份点的用户名/密码。

  • 删除:删除备份点,备份点下存在备份文件的,不允许删除。

集群备份

您可以点击集群操作中的“更多”>“集群备份”按钮,备份集群 ETCD 数据。

您可以在集群详情页面的备份标签页下,查看当前集群的所有备份文件,还可以对备份执行以下操作:

  • 编辑:编辑备份描述。

  • 恢复:执行集群恢复操作,将集群恢复至指定备份状态。

  • 删除:删除指定备份文件。

定时备份

您也可以为集群创建定时备份,点击集群操作中的“更多”>“定时备份”按钮,在定时备份弹窗中,输入定时备份名称、执行类型(重复执行/仅执行一次)和执行时间,并为重复执行的定时备份设置有效备份个数,点击“确认”按钮。

kubeClipper 会在您设置的执行时间为集群执行备份任务,备份文件会自动命名为“集群名称-定时备份名称-随机码”,对于重复执行的定时备份,kubeClipper 会在该定时任务下的备份文件超过有效备份个数时,自动删除超出个数的较晚的备份文件。

定时备份添加完成后,可以在集群详情页的“定时备份”标签页查看定时备份信息,也可以在“备份”标签页查看定时备份产生的备份文件。

对于定时备份任务,您还可以执行以下操作:

  • 编辑:编辑定时备份任务执行时间,和重复执行的定时备份的有效备份个数。

  • 启用/禁用:禁用的定时备份任务将暂时停止执行。

  • 删除:删除定时备份任务。

集群备份恢复

如果您在集群正常运行期间执行恢复操作,则 KubeClipper 将对该集群进行覆盖式恢复,就是备份文件里面的 etcd 数据,覆盖现有的数据。

您可以在集群详情页的备份标签页下,点击备份右侧的 “恢复”按钮;或点击集群操作中的“更多”>“恢复集群”按钮,在恢复集群弹窗中选择需要恢复的备份,可以将当前集群恢复至指定备份状态。

注意:集群升级后,将无法再恢复到升级前版本的备份。