高可用安装
使用 ocboot 部署工具高可用安装 Cloudpods 服务,更符合生产环境的部署需求。
环境准备
注意事项:
- 操作系统需要是干净的版本,因为部署工具会重头搭建指定版本的 k3s 集群,所以确保系统没有安装 kubernetes, containerd 等容器管理工具,否则会出现冲突导致安装异常。
- 最低配置要求: CPU 8核, 内存 8GiB, 存储 200GiB。
- 虚拟机和服务使用的存储路径都在 /opt 目录下,所以理想环境下建议单独给 /opt 目录设置挂载点。
- 比如把 /dev/sdb1 单独分区做 ext4 然后通过 /etc/fstab 挂载到 /opt 目录。
根据 CPU 架构不同,支持的发行版也不一样,目前支持的发行版情况如下:
注:3.11、3.10等,表示 发行版 Release/3.11、Release/3.10。其余同理。
Operationg system and Arch | 3.11 | 3.10 |
---|---|---|
CentOS 7 2009 x86_64+aarch64 | ✅ | ✅ |
OpenEuler 22.03 LTS Sp3 x86_64+aarch64 | ✅ | ✅ |
Debian 11 x86_64+aarch64 | ✅ | ✅ |
Ubuntu 22.04 x86_64+aarch64 | ✅ | ✅ |
CentOS Stream8 x86_64 | ✅ | ✅ |
Rocky Linux 8.9 x86_64 | ✅ | ✅ |
OpencloudOS 8.8 x86_64 | ✅ | ✅ |
AlmaLinux 8.9 x86_64 | ✅ | ✅ |
AnolisOS 8.8 x86_64 | ✅ | ✅ |
假设准备好了 3 台 CentOS7 机器,以及 1 台 Mariadb/MySQL 的机器,规划如下:
role | ip | interface | note |
---|---|---|---|
k8s primary | 10.127.90.101 | eth0 | 第1个控制节点 |
k8s master 1 | 10.127.90.102 | eth0 | 第2个控制节点 |
k8s master 2 | 10.127.90.103 | eth0 | 第3个控制节点 |
k8s VIP | 10.127.190.10 | - | keepalived 使用的 vip ,会优先绑定在 3 个控制节点中的第一个 |
DB | 10.127.190.11 | - | 数据库独立节点 pswd="0neC1oudDB#", port=3306 |
其中 DB 的部署目前是不归 ocboot 部署工具管理的,需要提前手动部署。 建议使用 MariaDB 数据库,不要使用 MySQL 5.6及以下版本,防止出现索引长度 bug: Index column size too large. The maximum column size is 767 bytes. 的问题。各发行版对应 MariaDB 版本如下:
- Centos 7.6-7.9 Minimal(X86_64和ARM64) 默认安装MariaDB 5.5.68
- Debian 10-11(X86_64和ARM64) 默认安装MariaDB 10.3.1
- Kylin V10 sp2(X86_64和ARM64) 默 认安装MariaDB 10.3.4
另外高可用的数据库部署也可以参考文档:部署 Mariadb HA 环境 。
高可用集群 ntp 一致性
请在安装之前,确保各个待部署节点的时间一致,否则会出现在签发证书步骤失败。
如果是联网安装,可以参考下面的命令,确保集群内每台服务器都与互联网时间保持一致:
# 您可以选择更方便、可达的授时服务器
# 如果提示没有ntpdate 命令,请使用 os 对应的包管理器自行安装
# 例如在centos 上: yum install -y ntp && systemctl enable ntpd --now
$ ntpdate -u edu.ntp.org.cn && hwclock -w && ntpdate -u -q edu.ntp.org.cn
开始安装
下载部署工具
部署的工具代码在 https://github.com/yunionio/ocboot/release,选择对应的版本,把代码的 tar.gz 包下载下来。
$ wget https://github.com/yunionio/ocboot/archive/refs/tags/master-v3.11.8-2.tar.gz
$ tar xf master-v3.11.8-2.tar.gz
$ cd ocboot-master-v3.11.8-2
编写部署配置
# 设置 shell 环境变量
DB_IP="10.127.190.11"
DB_PORT=3306
DB_PSWD="0neC1oudDB#"
DB_USER=root
K8S_VIP=10.127.190.10
PRIMARY_INTERFACE="eth0"
PRIMARY_IP=10.127.90.101
MASTER_1_INTERFACE="eth0"
MASTER_1_IP=10.127.90.102
MASTER_2_INTERFACE="eth0"
MASTER_2_IP=10.127.90.103
# 生成 yaml 部署配置文件
cat > config-ha.yml <<EOF
# primary_master_node 表示运行 k8s 和 Cloudpods 服务的节点
primary_master_node:
# ssh login IP
hostname: $PRIMARY_IP
# 不使用本地登录方式
use_local: false
# ssh login user
user: root
# cloudpods version
onecloud_version: "v3.11.8"
# mariadb connection address
db_host: "$DB_IP"
# mariadb user
db_user: "$DB_USER"
# mariadb password
db_password: "$DB_PSWD"
# mariadb port
db_port: "$DB_PORT"
# 节点服务监听的地址,多网卡时可以指定对应网卡的地址
node_ip: "$PRIMARY_IP"
# 对应 Kubernetes calico 插件默认网卡选择规则
ip_autodetection_method: "can-reach=$PRIMARY_IP"
# K8s 控制节点的 IP,对应keepalived 监听的 VIP
controlplane_host: $K8S_VIP
# K8s 控制节点 apiserver 监听的端口
controlplane_port: "6443"
# 该节点作为 Cloudpods 私有云计算节点,如果不想让控制节点作为计算节点,可以设置为 false
as_host: true
# 虚拟机可作为 Cloudpods 内置私有云计算节点(默认为 false)。开启此项时,请确保 as_host: true
as_host_on_vm: true
# 产品版本,从 [Edge, CMP, FullStack] 选择一个,FullStack 会安装融合云,CMP 安装多云管理版本,Edge 安装私有云
product_version: 'Edge'
# 服务对应的镜像仓库,如果待部署的机器不在中国大陆,可以用 dockerhub 的镜像仓库:docker.io/yunion
image_repository: registry.cn-beijing.aliyuncs.com/yunion
# 启用高可用模式
high_availability: true
# 使用 minio 作为后端虚拟机镜像存储
enable_minio: true
ha_using_local_registry: false
# 计算节点默认网桥 br0 对应的网卡
host_networks: "$PRIMARY_INTERFACE/br0/$PRIMARY_IP"
master_nodes:
# 加入控制节点的 k8s vip
controlplane_host: $K8S_VIP
# 加入控制节点的 K8s apiserver 端口
controlplane_port: "6443"
# 作为 K8s 和 Cloudpods 控制节点
as_controller: true
# 该节点作为 Cloudpods 私有云计算节点,如果不想让控制节点作为计算节点,可以设置为 false
as_host: true
# 虚拟机可作为 Cloudpods 内置私有云计算节点(默认为 false)。开启此项时,请确保 as_host: true
as_host_on_vm: true
# 从 primary 节点同步 ntp 时间
ntpd_server: "$PRIMARY_IP"
# 启用高可用模式
high_availability: true
hosts:
- user: root
hostname: "$MASTER_1_IP"
# 计算节点默认网桥 br0 对应的网卡
host_networks: "$MASTER_1_INTERFACE/br0/$MASTER_1_IP"
- user: root
hostname: "$MASTER_2_IP"
# 计算节点默认网桥 br0 对应的网卡
host_networks: "$MASTER_2_INTERFACE/br0/$MASTER_2_IP"
EOF