简介:本文将剖析Rainbond集群的安装和运维的原理,使用户基本了解Rainbond的安装机制和运维重点,以便用户搭建小型Rainbond集群。
本文将剖析Rainbond集群的安装和运维的原理,使用户基本了解Rainbond的安装机制和运维重点,以便用户搭建小型Rainbond集群。
1.Rainbond集群节点概述
1.1节点分类
1.2节点布署主要服务组件概述
1.3节点规划
一个完整的Rainbond集群中必须包含manage、gateway、compute角色的节点和暂不作为Rainbond安装支持的储存节点,其实三种属性可以在同一个节点上组成单节点的Rainbond集群。安装Rainbond之前须要依照企业自身需求合理的规划估算资源,这儿主要是指化学机或虚拟机节点。
从上文中列出的主要Rainbond服务组件来综合剖析ubuntu离线安装软件,管理节点的合理规划是关键。
Rainbond的主要数据储存组件是:
按照Etcd集群成立特点,其必须布署为1,3,5质数节点。
Mysql数据库的布署模式主要有主从、多主等模式,
Prometheus具有单机自治特点,因而每一个Rbd-monitor节点都是独立的数据采集和储存,基本上可以觉得多节点数据是一致的。
Rainbond安装脚本对Etcd,Rbd-monitor做了较好的手动安装支持,对于Mysql数据库,我们更建议用户独立安装Mysql数据库并提供给Rainbond安装脚本。管理节点其他的组件基本上可以觉得是无状态的,或有状态的组件都自身实现了良好的工作节点改选。对布署节点数无关键要求。为此我们推荐的管理节点数目是3个及以上。
网段节点处理流量入口,每一个Rainbond节点目前都独立提供了所有访问策略的支持,因而下层可以采用4层负载均衡策略或VIP策略,为此我们推荐的节点数目是2个及以上。
估算节点提供估算负载,节点越多,集群估算容量越大,因而估算节点的规划取决于集群须要运行的应用数目,随时可以降低或下线节点。为此我们推荐的节点数目是2个及以上。
2.安装原理说明
Rainbond-Ansible项目是Rainbond子项目之一,提供Rainbond集群方便的安装支持,采用Ansible手动化布署框架实现。其具有安装简单、工作原理简单、模块化、生态建立等特性。
初期我们采用了SaltStack实现,其工作模式复杂,不透明的节点通信机制。Rainbond安装过程受限于SaltStack的稳定性,因而我们从5.0版本后对安装脚本进行了重塑。
2.1安装脚本结构
. ├── 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 # 安装包版本
2.2ansible-playbook各角色剧本
2.3安装脚本布署流程
2.3.1集群初始化
集群初始化包括三个重要步骤,安装脚本获取、安装环境建立和第一个节点的安装。
./grctl init 各种参数
grctlinit命令从github库房获取指定版本的ansible代码,假如离线安装没有此步骤。
grctlinit命令按照用户指定的参数和默认值生成ansibleglobal.sh全局配置文件。
这儿的参数主要是指定Rainbond集群在储存、网络、安装模式等关键参数。
单一节点的安装按照传入role角色属性,传递属性给主安装脚本setup.sh
主安装脚本在进行本地节点系统优化过后调用ansible-playbook使用setup.yml剧本进行第一个节点布署
剧本主要依据master主机组的role进行配置装机(系统优化、组件布署)
2.3.2compute、gateway节点扩容安装
传入须要安装的role角色属性(compute,gateway),传递给主安装脚本setup.sh主安装脚本在进行远程节点系统优化过后调用ansible-playbook使用角色对应的剧本进行布署剧本主要依据主机组所使用的role进行配置装机(系统优化、组件布署)
3.集群安装流程
graph LR subgraph 初始化过程 id1(grctl)==>id2(setup.sh) id2(setup.sh)==>id3(ansible-playbook) end
3.1grctlinit初始化过程
grctlinit命令首先获取安装包,之后按照传入的参数以通配符对的形式转换为shell脚本变量,以全局变量的方法对后续操作进行参数的传递,后续步骤读取全局变量,达到安装过程中对可变诱因的掌控。
在未来的版本中ubuntu离线安装软件,grctl命令行进一步控制ansible的主机列表,确切的为ansible提供集群主机序列。
3.2shell初始化过程
grctl命令完成参数配置后调用安装脚本/opt/rainbond/rainbond-ansible/setup.sh进行第一个节点初始化。
脚本首先会对操作系统进行优化。这儿是安装过程使用网路的主要点linux cp,在线安装模式下,操作系统的更新和配置,安装包的下载通过网路进行。离线安装模式下使用事先打算的本地安装源对操作系统进行基础环境安装,之后使用事先下载好的安装包。后续的节点安装过程将不再使用网路。
最后会调阅ansible-play使用setup.yml剧本进行初始化安装。
3.3ansible-playbook初始化过程
ansible-playbook使用setup.yml进行初始化,首先会找到当前主机所在的主机组红旗 linux,然后按照role的设定到不同的组件文件夹中按照pre_task->roles->tasks->post-tasks的次序依次执行文件夹下边的main.yml达到组件安装的作用