部署高可用 KubeClipper

快速部署高可用、生产就绪的 KubeClipper 集群

对于初次接触 KubeClipper,建议部署 AIO 环境,快速上手体验 KubeClipper 提供的功能特性。 对于想将 KubeClipper 应用到生成环境,那么本文档或许对您有所帮助。

概述

根据 KubeClipper 架构设计可知,KubeClipper 有以下 4 个核心组件:

  • kc-server:主要包括 APISERVER 、控制器、静态资源服务以及内置消息队列等,kc-server 通过消息队列(支持外置)与 kc-agent 通信;kc-server 之间无主从关系,且相互独立;通常部署在独立的节点,从而对外提供稳定可靠的服务。
  • kc-agent:主要包括任务处理器,负责接收 kc-server 投递的任务,并反馈任务处理结果;通常部署在需要安装 kubernetes 的节点,是一个超轻量级的服务进程。
  • kc-etcd:kc-server 的后端数据库,跟随 kc-server 部署在同一节点上。
  • kc-dashboard:图形化管理界面,跟随 kc-server 部署在同一节点。 综上,我们将部署 kc-server 的节点称为 server,部署 kc-agent 的节点称为 agent。

那么部署高可用 KubeClipper 集群的关键点,就在于如何规划部署 server 节点同时保证 kc-etcd 的高可用。 通常来看,对于部署高可用的分布式应用集群,基本建议节点至少 3 个;同样对于 KubeClipper,3 个节点能保证 kc-server 在其中 2 个节点宕机后依旧可以提供服务,同时能保证 kc-etcd 不会出现脑裂异常。

以上简单介绍了 KubeClipper 架构以及核心组件,是为了更好的理解该如何部署高可用 KubeClipper 集群,从而引出关于对服务器节点规划以及硬件配置要求的思考。

推荐配置

KubeClipper 作为一个极轻量的 Kubernetes 多集群全生命周期管理工具,本身不会占用太多资源

server 节点

  • 数量:3 个及以上
  • 硬件要求:CPU >= 2 核,内存 >= 2GB,硬盘 >= 20GB
  • 系统:CentOS 7.x / Ubuntu 18.04 / Ubuntu 20.04

agent 节点

  • 数量:任意
  • 硬件要求:依据实际需求而定
  • 系统:CentOS 7.x / Ubuntu 18.04 / Ubuntu 20.04

从安装 kcctl 开始

kcctl 是 KubeClipper 提供的命令行工具,它支持快速部署 KubeClipper 集群以及大部分 Kuberneters 集群管理功能,用以简化运维工作。

安装 kcctl:

  1. # 默认安装最新发行版
  2. curl -sfL https://oss.kubeclipper.io/get-kubeclipper.sh | bash -
  3. # 安装指定版本
  4. curl -sfL https://oss.kubeclipper.io/get-kubeclipper.sh | KC_VERSION=v1.3.1 bash -
  5. # 如果您在中国,您可以在安装时指定 KC_REGION 环境变量,此时我们会使用 registry.aliyuncs.com/google_containers 代替 k8s.gcr.io
  6. # 这对于在线安装 k8s 集群非常有用
  7. curl -sfL https://oss.kubeclipper.io/get-kubeclipper.sh | KC_REGION=cn bash -

安装成功后,会输出安装版本以及安装路径等信息。

您也可以在 GitHub Release Page 下载指定的 kcctl 版本

验证安装:

  1. kcctl version -o json
  2. kcctl version:
  3. {
  4. "major": "1",
  5. "minor": "3",
  6. "gitVersion": "v1.3.1",
  7. "gitCommit": "5f19dcf78d3a9dc2d1035a779152fa993e0553df",
  8. "gitTreeState": "clean",
  9. "buildDate": "2022-12-02T10:12:36Z",
  10. "goVersion": "go1.19.2",
  11. "compiler": "gc",
  12. "platform": "linux/amd64"
  13. }
  14. # 查看帮助文档
  15. kcctl -h

了解 kcctl deploy 命令

kcctl deploy 命令是专门用于部署 KubeClipper 集群,更多示例以及参数解释请执行 kcctl deploy -h

常用参数简介

  • –server: server 节点 IP,例如 192.168.10.10,192.168.10.11,多个 IP 以逗号隔开。
  • –agent: agent 节点 IP,例如 192.168.10.10,192.168.10.11,多个 IP 以逗号隔开。
  • –pk-file: ssh 免密登录私钥,推荐在命令行使用免密登录。
  • –user: ssh 登录用户名,默认为 root。
  • –passwd: ssh 登录密码,不推荐在命令行使用密码登录。
  • –pkg: 安装包路径,支持本地路径以及在线链接;获取在线安装包链接规则:https://oss.kubeclipper.io/release/{KC\_VERSION}/kc-{GOARCH}.tar.gz 。KC_VERSION 为 Release Version 默认设置当前 kcctl 对应版本,GOARCH 为 amd64 或 arm64,默认设置当前 kcctl 的编译架构。
  • –ip-detect: 节点 ip 发现规则,支持多种规则,例如指定网卡名称等,对于多网卡节点非常有用,默认为 “first-found”。

了解完 kcctl deploy 的基础使用,那么接下来就开始部署 KubeClipper 集群吧。

使用 kcctl 部署 KubeClipper

我们推荐在多节点安装场景中,将涉及到的服务器节点都统一设置免密登录,避免密码明文泄露。

私钥方式部署 3 server 节点:

  1. kcctl deploy --pk-file=~/.ssh/id_rsa \
  2. --server SERVER_IPS \
  3. --pkg https://oss.kubeclipper.io/release/{KC_VERSION}/kc-{GOARCH}.tar.gz

私钥方式部署 3 server + 3 agent 节点,指定 pkg:

  1. kcctl deploy --pk-file=~/.ssh/id_rsa \
  2. --server SERVER_IPS \
  3. --agent AGENT_IPS \
  4. --pkg https://oss.kubeclipper.io/release/{KC_VERSION}/kc-{GOARCH}.tar.gz

私钥方式部署 3 server + 3 agent 节点,未指定 pkg,默认与 kcctl 安装版本一致(推荐):

  1. kcctl deploy --pk-file=~/.ssh/id_rsa \
  2. --server SERVER_IPS \
  3. --agent AGENT_IPS

私钥方式部署 3 server + 3 agent 节点,指定 etcd 端口,默认端口为 client-12379 | peer-12380 | metrics-12381:

  1. kcctl deploy --pk-file=~/.ssh/id_rsa \
  2. --server SERVER_IPS \
  3. --agent AGENT_IPS \
  4. --etcd-port 12379 --etcd-peer-port 12380 --etcd-metric-port 12381

参数输入示例:
SERVER_IPS: 192.168.10.20,192.168.10.21
AGENT_IPS: 192.168.10.30,192.168.10.31
KC_VERSION: KubeClipper 的 release version,查看 GitHub Release Page 获取
GOARCH:系统架构,amd64 (又名 x84_64),arm64(又名 aarch64)

kcctl deploy 支持多种参数,能够满足您对部署 KubeClipper 集群的特定需求,更多功能等您探索。
在执行 kcctl deploy 命令后,命令会检测您的环境是否符合安装要求,会将警告信息、安装进度等同步输出到控制台,最后在安装成功后会打印如下 KubeClipper banner:

  1. _ __ _ _____ _ _
  2. | | / / | | / __ \ (_)
  3. | |/ / _ _| |__ ___| / \/ |_ _ __ _ __ ___ _ __
  4. | \| | | | '_ \ / _ \ | | | | '_ \| '_ \ / _ \ '__|
  5. | |\ \ |_| | |_) | __/ \__/\ | | |_) | |_) | __/ |
  6. \_| \_/\__,_|_.__/ \___|\____/_|_| .__/| .__/ \___|_|
  7. | | | |
  8. |_| |_|

系统默认管理账号:admin / Thinkbig1

登录控制台: 打开浏览器,访问 http://SERVER_IP (通过任意一个 Server 节点均可访问)即可进入 KubeClipper 控制台

console

登录命令行:

  1. kcctl login -H http://SERVER_IP -u admin -p Thinkbig1

大多数 kcctl 命令都依赖登录状态,因此最好在执行 cli 命令时提前登录。

使用 kcctl 添加 agent 节点到 KubeClipper

当前 kcctl join 命令仅支持添加 agent 节点,后续会逐步支持添加 server 节点。 新加入的 agent 节点也应该统一设置免密登录,且私钥相同。

Join agent 节点:

  1. kcctl join --agent=AGENT_IPS

使用 kcctl 从 KubeClipper 中删除 agent 节点

当前 kcctl drain 命令仅支持删除 agent 节点,后续会逐步支持删除 server 节点。

Drain agent 节点:

  1. kcctl drain --agent=AGENT_IPS
  2. # 强制 drain 节点,忽略错误
  3. kcctl drain --agent=AGENT_IPS --force

如果您发现根据本文档无法成功部署 KubeClipper,请移步 KubeClipper Github Issue,提出您的意见或反馈。