diff --git a/install/v3/install-ha.assets/kuboard-ha-kubeconfig.png b/install/v3/install-ha.assets/kuboard-ha-kubeconfig.png new file mode 100644 index 00000000..c15ab72f Binary files /dev/null and b/install/v3/install-ha.assets/kuboard-ha-kubeconfig.png differ diff --git a/install/v3/install-ha.md b/install/v3/install-ha.md index b3b1d792..881dfe9c 100644 --- a/install/v3/install-ha.md +++ b/install/v3/install-ha.md @@ -55,9 +55,265 @@ Kuboard 高可用部署模式下,以集群的方式部署 Kuboard 实例,如
-Kuboard 高可用部署模式目前只提供给付费用户,[点击此处了解付费用户权益](/support/)。请扫描下面的微信二维码咨询: +安装步骤描述如下:
+ +### 安装 ETCD 集群 + +本文使用 binary 的方式安装 ETCD 集群,您可以参考 [etcd.io](https://etcd.io/docs/v3.5/tutorials/how-to-setup-cluster/) 了解其他部署 etcd 集群的方式。 + +ETCD 集群需要三台机器才能搭建,假设我们用于安装 ETCD 集群的节点信息如下: + +| 机器名称 | IP地址 | +| ------- | ------- | +| etcd1 | 10.99.16.11 | +| etcd2 | 10.99.16.12 | +| etcd3 | 10.99.16.13 | + +本章节后面的部分描述了如何在这三个节点上安装 `etcd` 集群,shell 脚本的第一行注释标注了您应该在哪台机器上执行该指令。 + +* 设置机器信息 + + ```sh + # 在 etcd1 节点上执行: + hostnamectl set-hostname etcd1 + + # 在 etcd2 节点上执行: + hostnamectl set-hostname etcd2 + + # 在 etcd3 节点上执行: + hostnamectl set-hostname etcd3 + +* 下载并解压缩 `etcd` + + ```sh + # 在每一个 etcd 节点上执行如下命令,安装 etcd + cd ~ + rm -rf etcd-v3.5.6-linux-amd64.tar.gz + rm -rf etcd-v3.5.6-linux-amd64 + curl -OL https://github.com/etcd-io/etcd/releases/download/v3.5.6/etcd-v3.5.6-linux-amd64.tar.gz + tar -xvf etcd-v3.5.6-linux-amd64.tar.gz + cd etcd-v3.5.6-linux-amd64 + cp etcdctl /usr/local/bin/ + cp etcd /usr/local/bin/ + etcd --version + etcdctl version + ``` + +* 配置 `etcd` 集群 + + ```sh + # 在每一个 etcd 节点上执行如下命令 + cat << EOF > /etc/systemd/system/etcd.service + [Unit] + Description=etcd + After=network.target + + [Service] + Type=notify + User=root + EnvironmentFile=/etc/etcd.env + ExecStart=/usr/local/bin/etcd + NotifyAccess=all + Restart=always + RestartSec=10s + LimitNOFILE=40000 + + [Install] + WantedBy=multi-user.target + EOF + + cat << EOF > /tmp/etcd-hosts.txt + etcd1 10.99.16.11 + etcd2 10.99.16.12 + etcd3 10.99.16.13 + EOF + + #获取本机 IP 地址 + this_ip=$(cat /tmp/etcd-hosts.txt | grep $(hostname) | awk '{print $2}') + etcd1_ip=$(cat /tmp/etcd-hosts.txt | grep etcd1 | awk '{print $2}') + etcd2_ip=$(cat /tmp/etcd-hosts.txt | grep etcd2 | awk '{print $2}') + etcd3_ip=$(cat /tmp/etcd-hosts.txt | grep etcd3 | awk '{print $2}') + etcd_cluster_token="kuboard_etcd_cluster_token" + + cat << EOF > /etc/etcd.env + # Environment file for etcd v3.5.6 + ETCD_DATA_DIR=/var/lib/etcd + ETCD_ADVERTISE_CLIENT_URLS=http://${this_ip}:2379 + ETCD_INITIAL_ADVERTISE_PEER_URLS=http://${this_ip}:2380 + ETCD_INITIAL_CLUSTER_STATE=new + ETCD_METRICS=basic + ETCD_LISTEN_CLIENT_URLS=http://${this_ip}:2379,http://127.0.0.1:2379 + ETCD_ELECTION_TIMEOUT=5000 + ETCD_HEARTBEAT_INTERVAL=250 + ETCD_INITIAL_CLUSTER_TOKEN=${etcd_cluster_token} + ETCD_LISTEN_PEER_URLS=http://${this_ip}:2380 + ETCD_NAME=$(hostname) + ETCD_PROXY=off + ETCD_INITIAL_CLUSTER=etcd1=http://${etcd1_ip}:2380,etcd2=http://${etcd2_ip}:2380,etcd3=http://${etcd3_ip}:2380 + ETCD_AUTO_COMPACTION_RETENTION=8 + ETCD_SNAPSHOT_COUNT=10000 + + # CLI settings + ETCDCTL_ENDPOINTS=http://127.0.0.1:2379 + + # ETCD 3.5.x issue + # https://groups.google.com/a/kubernetes.io/g/dev/c/B7gJs88XtQc/m/rSgNOzV2BwAJ?utm_medium=email&utm_source=footer + ETCD_EXPERIMENTAL_INITIAL_CORRUPT_CHECK=True + EOF + ``` + +* 初始化 `etcd` 集群 + + ```sh + systemctl daemon-reload + systemctl start etcd + ``` + +* 检查 `etcd` 集群状态 + + ```sh + etcdctl member list --write-out=table + # 输出结果中所有节点的状态为 started,说明集群启动成功 + ``` +* 修改 `etcd` 集群参数 + + ```sh + sed -i 's/ETCD_INITIAL_CLUSTER_STATE=new/ETCD_INITIAL_CLUSTER_STATE=existing/g' /etc/etcd.env + systemctl daemon-reload + systemctl enable etcd + systemctl restart etcd + ``` + +### 安装 `questdb` + +Kuboard 使用 QuestDB 存储审计日志,当前 `questdb` 只支持单机版本。假设用于安装 `questdb` 的机器信息如下 + +| 机器名称 | IP地址 | +| ------- | ------- | +| questdb | 10.99.16.16 | + +本章节描述了如何安装 `questdb`,关于 `questdb` 更多的信息,请参考 [questdb.io](https://questdb.io/docs/get-started/binaries/)。 + + +* 下载并解压缩 `questdb` + ```sh + cd ~ + curl -OL https://github.com/questdb/questdb/releases/download/6.6.1/questdb-6.6.1-rt-linux-amd64.tar.gz + tar -xvf questdb-6.6.1-rt-linux-amd64.tar.gz + ``` + +* 启动 questdb + + ```sh + cd ~/questdb-6.6.1-rt-linux-amd64/bin + ./questdb.sh start + ./questdb.sh status + ``` + + ::: tip 停止 `questdb` + ```sh + ./questdb.sh stop + ``` + +* 检查 `questdb` 启动状态 + + 在浏览器打开 `http://10.99.16.16:9000`,将显示 questdb 的 web 控制台。 + +### 安装 kuboard + +安装高可用的 kuboard 需要至少两台服务器,以及负载均衡服务,假设这两台服务器以及负载均衡服务的信息如下: + +| 机器名称 | IP地址 | Web端口 | AgentServer端口 | +| ------- | ------- | -------- | -------- | +| 负载均衡 | 10.99.16.20 | 80 | N/A | +| kuboard-1 | 10.99.16.21 | 80 | 10081 | +| kuboard-2 | 10.99.16.22 | 80 | 10081 | + +本章节后面的部分描述了如何安装 kuboard,shell 脚本的第一行注释标注了您应该在哪台机器上执行该指令。 + +* 安装 `docker` + + 在 kuboard-1 节点以及 kuboard-2 节点上执行如下 shell 脚本。(如果您已经安装了 docker engine,请忽略此步骤。) + ```sh + # 在 kuboard-1 节点以及 kuboard-2 节点上执行如下 shell 脚本 + curl -fsSL https://get.docker.com -o get-docker.sh + DRY_RUN=1 sudo sh ./get-docker.sh + ``` + +* 启动 `kuboard` + + 在 kuboard-1 节点以及 kuboard-2 节点上执行如下 shell 脚本 + ```sh + # 在 kuboard-1 节点以及 kuboard-2 节点上执行如下 shell 脚本 + etcd1_ip=10.99.16.11 + etcd2_ip=10.99.16.12 + etcd3_ip=10.99.16.13 + questdb_ip=10.99.16.16 + kuboard_1_ip=10.99.16.21 + kuboard_2_ip=10.99.16.22 + loadbalancer_ip=10.99.16.20 + sudo docker run -d \ + --restart=unless-stopped \ + --name=kuboard \ + -p 80:80/tcp \ + -p 10081:10081/tcp \ + -e KUBOARD_SSO_CLIENT_SECRET="7e5514b1a1c70c779c7a32b9" \ + -e KUBOARD_ENDPOINT="http://${loadbalancer_ip}:80" \ + -e KUBOARD_AGENT_SERVER_TCP_PORT="10081" \ + -e KUBOARD_AGENT_ENDPOINT="${kuboard_1_ip}:10081,${kuboard_2_ip}:10081" \ + -e KUBOARD_ETCD_ENDPOINTS="${etcd1_ip}:2379,${etcd2_ip}:2379,${etcd3_ip}:2379" \ + -e KUBOARD_QUEST_DB_URI="postgresql://admin:quest@${questdb_ip}:8812/qdb" \ + -v /root/kuboard-data:/data \ + eipwork/kuboard:v3 + # 也可以使用镜像 swr.cn-east-2.myhuaweicloud.com/kuboard/kuboard:v3,可以更快地完成镜像下载。 + ``` + +* 配置 `负载均衡` + + 请参考您所使用 `负载均衡` 服务的文档,将 `10.99.16.20:80` 转发到 `10.99.16.21:80` 以及 `10.99.16.22:80`。 + +* 打开 `kuboard` 界面 + + 您可以使用如下三个地址中的任何一个打开 kuboard 界面: + * http://10.99.16.20 + * http://10.99.16.21 + * http://10.99.16.22 + + 使用默认用户名 `admin`,密码 `Kuboard123` 登录 kuboard 界面。 + +### 以高可用方式导入 k8s 集群到 kuboard + +假设您以高可用的方式安装 `kubernetes` 集群,这意味着您至少有 2 个或以上的 `k8s-apiserver`,假设 `k8s-apiserver` 的信息如下: + +| 节点名称 | apiserver 地址 | +| ------- | ---------------- | +| master-1 | https://10.99.15.11:6443 | +| master-2 | https://10.99.15.12:6443 | +| master-3 | https://10.99.15.13:6443 | + +#### 以 kubeconfig 的方式导入 + +如下图所示,以 kubeconfig 方式导入集群时,APIServer 地址应该填写为: +`https://10.99.15.11:6443,https://10.99.15.12:6443,https://10.99.15.13:6443`- -