您好,登錄后才能下訂單哦!
本篇內容主要講解“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
根據Etcd集群組建特性,其必須部署為1,3,5奇數節點。
Mysql
Mysql數據庫的部署模式主要有主從、多主等模式,
Rbd-monitor(Prometheus)
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核心組件 |
集群初始化包括三個重要步驟,安裝腳本獲取、安裝環境構建和第一個節點的安裝。
./grctl init 各種參數
安裝腳本獲取
grctl init 命令從github倉庫獲取指定版本的ansible代碼,如果離線安裝沒有此步驟。
安裝環境構建
grctl init 命令根據用戶指定的參數和默認值生成ansible global.sh 全局配置文件。
這里的參數主要是指定Rainbond集群在存儲、網絡、安裝模式等關鍵參數。
INSTALL_TYPE # 安裝類型(離線/聯網)
DEPLOY_TYPE # 節點類型
DOMAIN # 域名
VERSION # 版本
STORAGE # 存儲類型
STORAGE_ARGS # 掛載參數
NETWORK_TYPE # 網絡類型
ROLE # 第一個節點角色(默認manage、gateway、compute)
配置文件: /opt/rainbond/rainbond-ansible/scripts/installer/global.sh
主要配置:
第一個節點安裝
單一節點的安裝根據傳入role角色屬性,傳遞屬性給主安裝腳本setup.sh
主安裝腳本在進行本地節點系統優化之后調用ansible-playbook使用setup.yml
劇本進行第一個節點部署
劇本主要根據master主機組的role進行配置裝機(系統優化、組件部署)
傳入需要安裝的role角色屬性(compute,gateway),傳遞給主安裝腳本setup.sh
主安裝腳本在進行遠程節點系統優化之后調用ansible-playbook使用角色對應的劇本進行部署
manage 角色屬性調用 addmaster.yml
compute 角色屬性調用 addnode.yml
gateway 角色屬性調用 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
達到組件安裝的作用
grctl node add --host <計算節點主機名> --iip <計算節點內網ip> --root-pass <計算節點root密碼> --role gateway,compute
指定新增節點的主機名、內網地址、連接密碼、角色
, grctl命令行首先將節點數據加入集群元數據。通過grctl node list
命令即可查詢節點狀態。
使用grctl node install host-uuid
命令安裝節點,grclt從API中讀取相應的主機信息傳遞給node.sh
腳本進行節點的安裝。
node.sh
在script/node.sh
中,主要獲取以下幾個參數:
node_role # 新增節點的角色
node_hostname # 新增節點的主機名
node_ip # 新增節點的網絡地址
login_type # 新增節點的登陸方式
login_key # 新增節點的連接密碼
node_uuid # 新增節點的uuid
node.sh
腳本首先會判斷node_role
中傳遞的角色屬性,循環角色屬性判斷inventory/hosts
中相應的主機組中是否存在對應的主機,沒有根據不同的角色屬性加入到相應的主機組中進行裝機,在維護inventory/hosts
之后會進行連接檢測通過login_type、login_key、node_uuid、node_ip、node_hostname
參數進行主機連接檢測、通過之后會調用ansible-playbook -i inventory/hosts -e $node_role role.yml
進行不同角色的裝機:
在5.1.6版本中hosts文件的維護將移交到grctl命令行工具中,根據集群節點狀態實時生成。
addmaster.yml # master role
addnode.yml # compute role
gateway.yml # gateway role
-i 指定裝機主機
-e 將grctl
傳遞給setup.sh
的node_role
參數傳遞給ansible-playbook
生成對應的node組件角色配置文件
role.yml 不同角色對應不同的yml配置文件
Rainbond集群安裝的所有組件有兩種運行方式: node組件和docker組件是直接二進制運行,其他組件全部采用容器化運行。兩種運行方式都是直接采用systemd守護進程進行守護。因此能夠安裝Rainbond的操作系統必須具有systemd。
在集群自動化運維的需求下,我們需要對節點(特別是計算節點)進行實時全面的健康檢查,以確認節點是否可用。這個工作由node服務進行,它會根據/opt/rainbond/conf
目錄下配置對當前節點的配置檢查項進行監控,如果出現故障匯報到集群管理端,如果是計算節點則會由集群管理端決策是否暫時禁止調度或下線該節點。
graph LR subgraph 服務運維流程 id1(systemd)==>id2(node.service) id2(node.service)==>id3(健康檢測) id2(node.service)==>id4(守護進程) end
在集群初始化完成之后ansible會在/etc/systemd/system/node.service
目錄下生成node.service
的配置文件,node
服務在systemd
中以守護進程方式啟動運行。
node服務啟動后將讀取/opt/rainbond/conf
目錄下的配置生成每一個需要啟動服務的systemd配置文件并調用systemctl工具啟動服務。
配置文件分為需求啟動服務和只是健康檢查項目,比如以下配置:
- name: rbd-mq endpoints: - name: MQ_ENDPOINTS protocol: http port: 6301 health: name: rbd-mq model: http address: 127.0.0.1:6301/health max_errors_num: 3 time_interval: 5 after: - docker type: simple pre_start: docker rm rbd-mq start: >- docker run --name rbd-mq --network host -i goodrain.me/rbd-mq:V5.1-dev --log-level=debug --etcd-endpoints=${ETCD_ENDPOINTS} --hostIP=192.168.195.1 stop: docker stop rbd-mq restart_policy: always restart_sec: 10
該文件配置了rbd-mq服務的啟動方式、健康檢查方式和服務注冊信息。
每一個安裝服務的健康檢查配置見文檔: 詳細配置
若某項檢查項目標識為不健康狀態,當前節點將被標識為不健康狀態。
對于不健康的節點Rainbond提供兩級自動處理機制:
檢測到異常的服務一段時間依然未恢復(取決于配置的時間段)將自動重啟服務。
若計算節點被標注為不健康,節點控制器將會自動將其禁止應用調度直到節點恢復健康。
配置文件: /opt/rainbond/conf/health.yaml
name # 需要檢測的服務名稱
model # 以什么方式檢測(tcp/http/cmd)
address # 被檢測服務的地址
max_errors_num # 最大錯誤次數
time_interval # 每次檢測次數
目前檢測方式有3種
cmd # 使用腳本或者命令行
tcp # 使用ip:port模式
http # 使用http協議檢測
根據整個集群節點的健康檢查機制,用戶在管理節點通過grctl cluster
命令即可查詢整個集群的故障點,或使用監控報警系統及時發現集群故障。當集群某個節點出現問題時首先定位故障的服務,并查看其運行日志處理故障。如果有未完善的健康檢測項目,用戶可以通過上訴節點健康檢測配置方式自定義檢測項目。
端口被占用無法安裝
Rainbond是一個完整的PaaS平臺解決方案,所以強烈建議使用干凈的物理機或虛擬機安裝Rainbond。 Rainbond網關節點直接承接應用訪問流量,因此其默認占用80\443等關鍵端口。另外Rainbond安裝Ansible默認使用的SSH端口是22,嚴格運維時需要設置。
數據庫安裝初始化失敗
Rainbond 5.1.5及之前版本默認安裝的mysql數據庫版本是mariadb 10,其所需的內存資源是較大的。如果你的機器資源有限很大可能導致安裝失敗。后續的版本中我們將默認安裝的數據庫版本升級到Mysql 5.7系列。
高可用安裝怎么做
本文主要描述了整個安裝原理,因此你閱讀本文應該可以總結出Rainbond高可用安裝的關鍵,我們近期也會再次更新高可用安裝操作指南。
Rainbond能否安裝在Mac或Windows系統
Rainbond計算節點可以支持Windows操作系統來運行Windows應用,目前Windows的支持是企業版功能之一,因此開源安裝腳本暫不支持Windows 節點的快速安裝。Mac操作系統不適合安裝Rainbond。開發者可以將部分組件運行在Mac下運行開發。
到此,相信大家對“Rainbond集群安裝方法和運維原理是什么”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。