简介: 本文将解读Rainbond集群的安装和运维的原理,使用户基本了解Rainbond的安装机制和运维重点,便于用户搭建大型Rainbond集群。
本文将解读Rainbond集群的安装和运维的原理,使用户基本了解Rainbond的安装机制和运维重点,便于用户搭建大型Rainbond集群。
属性 | 类型 | 说明 |
---|---|---|
manage | 管理节点 | 集结平台自身组件,提供应用构建、调度、管理等功能,提供数据中心基础服务与API接口,充当控制集群的角色。 |
gateway | 网关节点 | 集群内应用被外网访问的流量入口和负载均衡器,提供HTTP, HTTPs路由, TCP/UDP服务, 负载均衡器, 高级路由(A/B测试, 灰度发布)等功能 |
compute | 计算节点 | 提供应用运行的计算资源,N个计算节点组成计算资源池供给管理节点灵活调度。 |
角色 | 组件 | 说明 |
---|---|---|
rbd-dns | 提供本地dns服务,服务于集群内应用的DNS解析。 | |
etcd | 管理节点etcd | |
kube-controller-manager | Kubernetes管理组件之一, Pod编排器 | |
rbd-webcli | 提供应用web方式进入容器命令行的服务 | |
nfs_server | 远程存储挂载 | |
rbd-hub | 基于Docker Registry封装,提供Docker镜像存储服务,服务于数据中心内部 | |
kube-scheduler | Kubernetes管理组件之一,Pod调度器 | |
docker | 应用容器引擎 | |
rbd-mq | 消息队列服务 | |
calico | 集群SDN服务,为应用提供网络支持 | |
rbd-chaos | 应用构建服务,提供源码,Docker镜像等方式持续构建应用。 | |
rbd-worker | 应用运行控制器 | |
kube-apiserver | Kubernetes管理组件之一, 提供API服务 | |
rbd-eventlog | Rainbond 事件处理与日志汇聚服务 | |
rbd-monitor | Rainbond 监控管理服务,基于Prometheus封装 | |
rbd-api | Rainbond API服务,数据中心控制层面的入口。 | |
rbd-db | Rainbond 数据库服务,支持MySQL,Tidb与CockroachDB | |
rbd-app-ui | 应用控制台web服务 | |
rbd-repo | 源码构建仓库服务,基于Artifactory OSS封装 | |
node | Rainbond 集群和节点控制器服务 | |
etcd-proxy | 计算节点etcd-proxy | |
rbd-dns | Rainbond内部dns服务,与管理节点DNS服务共同对当前节点的应用提供DNS解析 | |
kubelet | Kubernetes 计算负载节点组件 | |
docker | 应用容器引擎 | |
calico | 集群SDN服务,为应用提供网络支持 | |
node | Rainbond节点控制器,提供服务守护、自动运维、日志收集、服务发现等服务。 | |
网关节点 | docker | 应用容器引擎 |
calico | 集群SDN服务,为应用提供网络支持 | |
rbd-dns | Rainbond内部dns服务,可作为集群dns服务使用 | |
rbd-gateway |
一个完整的Rainbond集群中必须包含manage、gateway、compute角色的节点和暂不作为Rainbond安装支持的存储节点,当然三种属性可以在同一个节点上组成单节点的Rainbond集群。安装Rainbond之前需要根据企业自身需求合理的规划计算资源,这里主要是指物理机或虚拟机节点。
从上文中列举的主要Rainbond服务组件来综合分析,管理节点的合理规划是关键。
Rainbond的主要数据存储组件是:
根据Etcd集群组建特性,其必须部署为1,3,5奇数节点。
Mysql数据库的部署模式主要有主从、多主等模式,
Prometheus具有单机自治特性,因此每一个Rbd-monitor节点都是独立的数据采集和存储,基本上可以认为多节点数据是一致的。
Rainbond安装脚本对Etcd,Rbd-monitor做了较好的自动安装支持,对于Mysql数据库,我们更建议用户独立安装Mysql数据库并提供给Rainbond安装脚本。管理节点其他的组件基本上可以认为是无状态的,或有状态的组件都自身实现了良好的工作节点选举。对部署节点数无关键要求。因此我们推荐的管理节点数量是3个及以上。
网关节点处理流量入口,每一个Rainbond节点目前都独立提供了所有访问策略的支持,因此上层可以采用4层负载均衡策略或VIP策略,因此我们推荐的节点数量是2个及以上。
计算节点提供计算负载,节点越多,集群计算容量越大,因此计算节点的规划取决于集群需要运行的应用数量,随时可以增加或下线节点。因此我们推荐的节点数量是2个及以上。
Rainbond-Ansible 项目是Rainbond子项目之一,提供Rainbond集群便捷的安装支持,采用Ansible自动化部署框架实现。其具有安装简单、工作原理简单、模块化、生态完善等特点。
早期我们采用了SaltStack 实现,其工作模式复杂,不透明的节点通信机制。Rainbond安装过程受限于SaltStack的稳定性,因此我们从5.0版本后对安装脚本进行了重构。
.
├── callback_plugins # 任务失败时打印帮助消息回调插件
│ └── help.py # 回调插件示例
├── hack # 部署本地资源文件目录
│ ├── chinaos # 操作系统的安装包源
│ │ ├── CentOS-Base.repo # CentOS的源
│ │ ├── centos-release # CentOS的全局配置
│ │ ├── sources.list # Ubuntu的源
│ │ ├── ubuntu-lsb-release # Ubuntu的版本配置
│ │ └── ubuntu-release # Ubuntu的全局配置
│ ├── docker # Docker部署资源文件目录
│ │ ├── get-docker.sh # 快速部署Docker脚本
│ │ └── rainspray.list # 快速部署Docker的Ubuntu源
│ ├── files # 好雨工具包
│ │ ├── bin # grctl的二进制文件
│ │ ├── health # 健康监测脚本
│ │ ├── ssh # ssh配置脚本
│ │ └── ssl # 好雨加密证书
│ ├── manifests # 应用配置文件
│ │ ├── dashboard # 仪表盘-配置
│ │ ├── efk # efk-配置
│ │ ├── es-cluster # es集群-配置
│ │ ├── heapster # heapster-配置
│ │ ├── ingress # ingress-配置
│ │ ├── jenkins # jenkins-配置
│ │ ├── metrics-server # metrics-配置
│ │ ├── prometheus # prometheus-配置
│ │ └── storage # storage-配置
│ ├── step # Ansible安装步骤剧本
│ │ ├── 00.prepare.yml # 安装前检测
│ │ ├── 01.docker.yml # docker-配置
│ │ ├── 02.image.yml # image-配置
│ │ ├── 10.etcd.yml # etcd-配置
│ │ ├── 11.kube-master.yml # kube-master-配置
│ │ ├── 12.kube-worker.yml # kube-worker-配置
│ │ ├── 13.network.yml # network-配置
│ │ ├── 20.db.yml # database-配置
│ │ ├── 21.storage.yml # storage-配置
│ │ ├── 22.lb.yml # lb-配置
│ │ ├── 23.node.yml # node-配置
│ │ └── 90.setup.yml # setup-配置
│ ├── thirdparty # 第三方服务对接
│ │ ├── addmaster.yml # 增加master-role
│ │ ├── addnode.yml # 增加node-role
│ │ └── setup.yaml # 配置安装
│ ├── tools # 工具包目录
│ │ ├── get_images.sh # 拉取docker镜像
│ │ ├── update-domain.sh # 更换域名
│ │ └── yc-ssh-key-copy.sh # 批量部署服务器ssh-key
│ ├── upgrade # 升级配置目录
│ │ └── upgrade.yml # 升级配置文件
│ ├── vagrant # vagrant服务配置目录
│ │ ├── README.md # 说明文件
│ │ ├── Vagrantfile # ruby获取系统信息
│ │ ├── install.sh # 安装文件
│ │ └── setup.sh # 配置文件
│ └── windows # windows节点配置目录
│ ├── cni # 配置文件目录
│ ├── scripts # 脚本目录
│ │ ├── helper.psm1 # 帮助信息脚本
│ │ ├── hns.psm1 # hns配置脚本
│ │ ├── start-flannel. # 开启flannel脚本
│ │ ├── start-kubelet. # 开始kubelet脚本
│ │ └── start-node.ps1 # 开始node服务脚本
│ ├── README.md # 说明文件
│ ├── daemon.json # 域名配置
│ ├── net-conf.json # 网络配置
│ └── win.yaml # Windows配置
├── inventory # Ansible剧本执行主机
│ ├── hosts.all # 主机模版
│ └── hosts.master # 主机模版
├── log # 日志文件目录
├── offline # 离线安装配置文件目录
│ ├── image # 离线包制作脚本目录
│ │ ├── download.sh # 缓存docker离线镜像脚本
│ │ ├── image.txt # rainbond镜像列表
│ │ ├── load.sh # 加载离线缓存镜像包脚本
│ │ └── offimage.sh # 压缩理想缓存镜像包脚本
│ └── pkgs # 离线包存储目录
│ ├── Dockerfile.centos # 构建离线CentOS镜像
│ ├── Makefile # 构建离线CentOS镜像
│ ├── README.md # 说明文档
│ ├── download.centos # 创建本地CentOS源
│ └── rbd.repo # Centos源
├── scripts # 部署脚本存放目录
│ ├── installer # 安装脚本目录
│ │ ├── default.sh # 默认网络配置脚本
│ │ ├── functions.sh # 安装的示例库脚本
│ │ └── global.sh.example # 全局变量示例脚本
│ ├── op # 网络配置目录
│ │ ├── README.md # 说明文件
│ │ ├── lb.sh # 配置lb服务脚本
│ │ └── network.sh # 配置网络脚本
│ ├── upgrade # 升级脚本目录
│ │ └── upgrade.sh # 升级脚本文件
│ ├── yaml # 网络配置剧本目录
│ │ ├── init_network.yaml # 初始化网络剧本
│ │ └── reset_network.yaml # 重置网络剧本
│ └── node.sh # 用于管理节点脚本
├── test # 测试剧本语法脚本目录
│ ├── hosts.ini # 主机配置信息
│ ├── k8s-master.role.1.j2 # k8s-master配置信息
│ ├── k8s-worker.role.1.j2 # k8s-worker配置信息
│ ├── kubelet.sh.1.j2 # kubelet配置信息
│ └── test.sh # 检测Ansible剧本语法脚本
├── roles # Ansible部署规则配置文件目录
│ ├── bootstrap # bootstrap服务规则配置
│ ├── db # database服务规则配置
│ ├── docker # docker服务规则配置
│ ├── etcd # etcd服务规则配置
│ ├── k8s # k8s服务规则配置
│ ├── lb # lb服务规则配置
│ ├── monitor # monitor服务规则配置
│ ├── network_plugin # network_plugin服务规则配置
│ ├── node # node服务规则配置
│ ├── prepare # prepare服务规则配置
│ ├── rainvar # rainvar服务规则配置
│ ├── storage # storage服务规则配置
│ ├── thirdparty # thirdparty服务规则配置
│ └── upgrade # upgrade服务规则配置
├── docs # 说明文档文件夹
├── CHANGELOG.md # 版本迭代说明
├── Dockerfile # 创建rainbond-ansible的Ubuntu镜像源
├── LICENSE # 开发协议
├── Makefile # 语法检测配置
├── README.md # 说明文件
├── addmaster.yml # 增加master节点剧本
├── addnode.yml # 增加node节点剧本
├── ansible.cfg # Ansible程序配置优化
├── lb.yml # 增加lb节点剧本
├── setup.sh # 主安装脚本入口
├── setup.yml # Ansible本地安装剧本
├── upgrade.yml # Ansible升级剧本
└── version # 安装包版本
角色 | 剧本 | 说明 |
---|---|---|
manage | rainvar | 初始化私有数据中心的一些默认配置(数据库、端口、安装路径、安装版本等) |
bootstrap | 对本节点的内核进行优化(tcp_tw_recycle、core.somaxconn、syncookies、file-max等) | |
prepare | 对本节点安装条件进行检查(系统版本、CPU、内存、磁盘、内核等) | |
storage/nfs/client | 以nfs方式挂载本节点的存储卷 | |
storage/nas | 以nas方式挂载本节点的存储卷 | |
storage/gfs | 以gfs方式挂载本节点的存储卷 | |
docker/install | 在本节点上安装Docker服务 | |
k8s/manage | 在本节点上安装k8s服务的管理端 | |
etcd/manage | 在本节点上安装etcd服务的管理端 | |
gateway | 在本节点上安装负载均衡组件 | |
monitor | 在本节点上安装监控组件 | |
network_plugin/calico | 切换docker网络为calico | |
network_plugin/flannel | 切换docker网络为flannel | |
node/exm | 安装基础依赖包(python-pip、ansible) | |
node/core | 在本节点安装node核心组件 | |
gateway | rainvar | 初始化私有数据中心的一些默认配置(数据库、端口、安装路径、安装版本等) |
bootstrap | 对本节点的内核进行优化(tcp_tw_recycle、core.somaxconn、syncookies、file-max等) | |
prepare | 对本节点安装条件进行检查(系统版本、CPU、内存、磁盘、内核等) | |
storage/nfs/client | 以nfs方式挂载本节点的存储卷 | |
storage/nas | 以nas方式挂载本节点的存储卷 | |
storage/gfs | 以gfs方式挂载本节点的存储卷 | |
docker/install | 在本节点上安装Docker服务 | |
network_plugin/calico | 切换docker网络为calico | |
network_plugin/flannel | 切换docker网络为flannel | |
gateway | 在本节点上安装负载均衡组件 | |
node/exlb | 在本节点安装node负载组件 | |
compute | rainvar | 初始化私有数据中心的一些默认配置(数据库、端口、安装路径、安装版本等) |
bootstrap | 对本节点的内核进行优化(tcp_tw_recycle、core.somaxconn、syncookies、file-max等) | |
prepare | 对本节点安装条件进行检查(系统版本、CPU、内存、磁盘、内核等) | |
storage/nfs/client | 以nfs方式挂载本节点的存储卷 | |
storage/nas | 以nas方式挂载本节点的存储卷 | |
storage/gfs | 以gfs方式挂载本节点的存储卷 | |
docker/install | 在本节点上安装Docker服务 | |
k8s/compute | 在本节点上安装k8s服务的客户端 | |
etcd/compute | 在本节点上安装etcd服务的客户端 | |
network_plugin/calico | 切换docker网络为calico | |
network_plugin/flannel | 切换docker网络为flannel | |
gateway | 在本节点上安装负载均衡组件 | |
node/core | 在本节点安装node核心组件 |
2.3.1 集群初始化
集群初始化包括三个重要步骤,安装脚本获取、安装环境构建和第一个节点的安装。
./grctl init 各种参数
grctl init 命令从github仓库获取指定版本的ansible代码,如果离线安装没有此步骤。
grctl init 命令根据用户指定的参数和默认值生成ansible global.sh 全局配置文件。
主要配置:
这里的参数主要是指定Rainbond集群在存储、网络、安装模式等关键参数。
单一节点的安装根据传入role角色属性,传递属性给主安装脚本setup.sh
主安装脚本在进行本地节点系统优化之后调用ansible-playbook使用setup.yml
剧本进行第一个节点部署
剧本主要根据master主机组的role进行配置装机(系统优化、组件部署)
2.3.2 compute、gateway节点扩容安装
setup.sh
主安装脚本在进行远程节点系统优化之后调用ansible-playbook使用角色对应的剧本进行部署
addmaster.yml
addnode.yml
gateway.yml
剧本主要根据主机组所使用的role进行配置装机(系统优化、组件部署)
graph LR
subgraph 初始化过程
id1(grctl)==>id2(setup.sh)
id2(setup.sh)==>id3(ansible-playbook)
end
grctl init
命令首先获取安装包,然后根据传入的参数以键值对的方式转换为shell脚本变量,以全局变量的方式对后续操作进行参数的传递,后续步骤读取全局变量,达到安装过程中对可变因素的掌控。
在未来的版本中,grctl命令行进一步控制ansible的主机列表,准确的为ansible提供集群主机序列。
grctl 命令完成参数配置后调用安装脚本/opt/rainbond/rainbond-ansible/setup.sh
进行第一个节点初始化。
脚本首先会对操作系统进行优化。这里是安装过程使用网络的主要点,在线安装模式下,操作系统的更新和配置,安装包的下载通过网络进行。离线安装模式下使用事先准备的本地安装源对操作系统进行基础环境安装,然后使用事先下载好的安装包。后续的节点安装过程将不再使用网络。
最后会调取ansible-play使用setup.yml
剧本进行初始化安装。
ansible-playbook使用setup.yml
进行初始化,首先会找到当前主机所在的主机组,之后根据role的设定到不同的组件文件夹中根据pre_task -> roles -> tasks -> post-tasks 的顺序依次执行文件夹下面的main.yml
达到组件安装的作用
本文作者: Rainbond开发者:魏美龙
原文出处:阿里云大学开发者社区