在 Rainbond 上使用 Curve 雲原生存儲
Curve 是網易主導自研的現代化存儲系統, 目前支持文件存儲(CurveFS)和塊存儲(CurveBS)。
CurveBS 的核心應用場景主要包括:
- 虛擬機/容器的性能型、混合型、容量型雲盤或持久化卷,以及物理機的遠程存儲盤
- 高性能存算分離架構:基於RDMA+SPDK的高性能低時延架構,支撐MySQL、kafka等各類數據庫、中間件的存算分離部署架構,提升實例交付效率和資源利用率
CurveFS 的核心應用場景主要包括:
- AI訓練(含機器學習等)場景下的高性價比存儲
- 大數據場景下的冷熱數據自動化分層存儲
- 公有云上高性價比的共享文件存儲:可用於AI、大數據、文件共享等業務場景
- 混合雲存儲:熱數據存儲在本地IDC,冷數據存儲在公有云
使用 CurveAdm 部署 CurveFS
CurveAdm 是 Curve 團隊為提高系統易用性而設計的工具,其主要用於快速部署和運維 CurveBS/CurveFS 集羣。主要特性:
- 快速部署 CurveBS/CurveFS 集羣
- 容器化服務
- 運維 CurveBS/CurveFS 集羣
- 同時管理多個集羣
- 一鍵升級
- 錯誤精確定位
安裝 CurveAdm
bash -c "$(curl -fsSL http://curveadm.nos-eastchina1.126.net/script/install.sh)"
主機列表
主機模塊用來統一管理用户主機,以減少用户在各配置文件中重複填寫主機 SSH
連接相關配置。我們需導入部署集羣和客户端所需的機器列表,以便在之後的各類配置文件中填寫部署服務的主機名。
這裏採用一台服務器,做單節點集羣。
配置免密登陸
生成密鑰並配置服務器免密登陸
# 一直回車即可
ssh-keygen
# 使用 ssh-copy-id 配置
ssh-copy-id [email protected]
# 驗證免密
ssh [email protected]
# 無需輸入密碼登陸成功即可
導入主機列表
準備主機列表文件 hosts.yaml
$ vim hosts.yaml
global:
user: root # ssh 免密登陸用户名
ssh_port: 22 # ssh 端口
private_key_file: /root/.ssh/id_rsa # 密鑰路徑
hosts:
- host: curve
hostname: 172.31.98.243
導入主機列表
$ curveadm hosts commit hosts.yaml
查看主機列表
$ curveadm hosts ls
準備集羣拓撲文件
CurveFS 支持單機部署和高可用部署,這裏我們採用單機部署驗證。
創建 topology.yaml
文件,只需修改 target: curve
,其他都默認即可。
$ vim topology.yaml
kind: curvefs
global:
report_usage: true
data_dir: ${home}/curvefs/data/${service_role}${service_host_sequence}
log_dir: ${home}/curvefs/logs/${service_role}${service_host_sequence}
container_image: opencurvedocker/curvefs:v2.4
variable:
home: /tmp
target: curve
etcd_services:
config:
listen.ip: ${service_host}
listen.port: 2380${service_host_sequence} # 23800,23801,23802
listen.client_port: 2379${service_host_sequence} # 23790,23791,23792
deploy:
- host: ${target}
- host: ${target}
- host: ${target}
mds_services:
config:
listen.ip: ${service_host}
listen.port: 670${service_host_sequence} # 6700,6701,6702
listen.dummy_port: 770${service_host_sequence} # 7700,7701,7702
deploy:
- host: ${target}
- host: ${target}
- host: ${target}
metaserver_services:
config:
listen.ip: ${service_host}
listen.port: 680${service_host_sequence} # 6800,6801,6802
listen.external_port: 780${service_host_sequence} # 7800,7801,7802
global.enable_external_server: true
metaserver.loglevel: 0
braft.raft_sync: false
deploy:
- host: ${target}
- host: ${target}
- host: ${target}
config:
metaserver.loglevel: 0
部署集羣
添加 my-cluster
集羣,並指定集羣拓撲文件
curveadm cluster add my-cluster -f topology.yaml
切換 my-cluster
集羣為當前管理集羣
curveadm cluster checkout my-cluster
開始部署集羣
$ curveadm deploy
......
Cluster 'my-cluster' successfully deployed ^_^.
終端出現 Cluster 'my-cluster' successfully deployed ^_^.
即部署成功。
查看集羣運行情況
$ curveadm status
Get Service Status: [OK]
cluster name : my-cluster
cluster kind : curvefs
cluster mds addr : 192.168.3.81:6700,192.168.3.81:6701,192.168.3.81:6702
cluster mds leader: 192.168.3.81:6702 / 7f5b7443c563
Id Role Host Replicas Container Id Status
-- ---- ---- -------- ------------ ------
6ae9ac1ae448 etcd curve 1/1 d3ecb4e81318 Up 17 minutes
c45e2f0b9266 etcd curve 1/1 8ce9befa54b8 Up 17 minutes
6c6bde442a04 etcd curve 1/1 cbf093c6605f Up 17 minutes
9516d8f5d9ae mds curve 1/1 f338ec63c493 Up 17 minutes
fe2bf5d8a072 mds curve 1/1 b423c3351256 Up 17 minutes
7f5b7443c563 mds curve 1/1 7ad99cee6b61 Up 17 minutes
e6fe68d23220 metaserver curve 1/1 d4a8662d4ed2 Up 17 minutes
b2b4dbabd7bf metaserver curve 1/1 65d7475e0bc4 Up 17 minutes
426ac76e28f9 metaserver curve 1/1 f413efeeb5c9 Up 17 minutes
部署 Rainbond
Rainbond
是一個雲原生應用管理平台,使用簡單,不需要懂容器、Kubernetes和底層複雜技術,支持管理多個Kubernetes集羣,和管理企業應用全生命週期。
可以通過一條命令快速安裝 Rainbond 單機版。
curl -o install.sh http://get.rainbond.com && bash ./install.sh
執行完上述腳本後,耐心等待 3-5 分鐘,可以看到如下日誌輸出,表示 Rainbond 已啟動完成。
INFO: Rainbond started successfully, Please pass http://$EIP:7070 Access Rainbond
部署 MinIO
由於目前 CurveFS 只支持 S3 作為後端存儲,CurveBS 後端即將支持。 所以我們需要部署一個 MinIO 對象存儲。
通過 Rainbond 開源應用商店一鍵部署單機版 MinIO 或者集羣版 MinIO。進入到 Rainbond 的 平台管理 -> 應用市場,在開源應用商店中搜索 minio
進行一鍵安裝。
部署完成後,通過 Rainbond 提供的域名訪問 MinIO 控制枱,默認用户密碼 minio/minio123456
。然後需要創建一個 Bucket 供 CurveFS 使用。
部署 CurveFS-CSI
- 前提:Rainbond 版本要在 v5.13+
通過 Rainbond 開源應用商店一鍵部署,進入到 Rainbond 的 平台管理 -> 應用市場,在開源應用商店中搜索 curve-csi
進行一鍵安裝。
由於 CurveFS-CSI 沒有 Rainbond 應用模型類的組件,都屬於 k8s 資源類型,可在 應用視圖內 -> k8s資源 下看到。
安裝完成後,需要修改 curvefs-csi-cluster-role-binding
和 curvefs-csi-role-binding
的 namespace 為當前團隊的 namespace,如當前團隊 namespace 為 dev
,如下:
# curvefs-csi-role-binding
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: curvefs-csi-role-binding
......
subjects:
- kind: ServiceAccount
name: curvefs-csi-service-account
namespace: dev # changed
# curvefs-csi-cluster-role-binding
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: curvefs-csi-cluster-role-binding
......
subjects:
- kind: ServiceAccount
name: curvefs-csi-service-account
namespace: dev # changed
創建 storageclass
資源,同樣在 應用視圖內 -> k8s資源 -> 添加:
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: curvefs-sc
provisioner: csi.curvefs.com
allowVolumeExpansion: false
reclaimPolicy: Delete
parameters:
mdsAddr: "172.31.98.243:6700,172.31.98.243:6701,172.31.98.243:6702"
fsType: "s3"
s3Endpoint: "http://9000.grda6567.1frt0lmq.b836cf.grapps.cn"
s3AccessKey: "minio"
s3SecretKey: "minio123456"
s3Bucket: "curve"
-
mdsAddr:通過
curveadm status
命令獲取。$ curveadm status ...... cluster mds addr : 172.31.98.243:6700,172.31.98.243:6701,172.31.98.243:6702
-
s3Endpoint:填寫 MinIO 組件的 9000 端口對外服務域名。
-
s3AccessKey:MinIO 訪問 Key,填 root 用户或生成 AccessKey。
-
s3SecretKey:MinIO 密鑰 Key,填 root 密碼或生成 SecretKey。
-
s3Bucket:MinIO 桶名稱。
在 Rainbond 上使用 CurveFS
通過鏡像創建一個 Nginx 組件,在 組件 -> 其他設置 修改組件部署類型為 有狀態服務
。在 Rainbond 上只有 有狀態服務 可以使用自定義存儲,無狀態服務使用默認的共享存儲。
進入到 組件 -> 存儲 添加存儲,選擇類型為 curvefs-sc
,保存並重啟組件。
等待組件啟動完成後,進入組件的 Web 終端內,測試寫入數據。
然後進入到 MinIO 桶內查看,數據已寫入。
未來規劃
Rainbond 社區未來會使用 Curve 雲原生存儲作為 Rainbond 底層的共享存儲,為用户提供更好、更簡單的雲原生應用管理平台和雲原生存儲,共同推進開源社區生態以及給用户提供一體化的解決方案。
- 在 Rainbond 上使用 Curve 雲原生存儲
- 雲原生落地實踐:山西數智時代基於 Rainbond 實現智慧景區
- 使用流水線插件實現持續集成、持續部署
- 如何建設私有云原生 Serverless 平台
- 基於 Rainbond 的 Pipeline(流水線)插件
- 10分鐘學會使用 Loki 日誌聚合系統
- 讓遠程成為本地,微服務後端開發的福音
- 讓遠程成為本地,微服務後端開發的福音
- 10分鐘在 Rainbond 上部署 mall 電商項目
- 一站式雲原生體驗|龍蜥雲原生ACNS Rainbond
- 雲原生技術在離線交付場景中的實踐
- 簡單易用的監控告警系統 | HertzBeat 在 Rainbond 上的使用分享
- 微服務開發平台 Spring Cloud Blade 部署實踐
- 不懂 Kubernetes 實現雲原生是什麼體驗?
- 乾貨分享|使用 Istio 實現灰度發佈
- 乾貨分享|使用 Istio 實現灰度發佈
- 不懂 Kubernetes 實現雲原生是什麼體驗?
- 乾貨分享!JAVA診斷工具Arthas在Rainbond上實踐~
- 如何不編寫 YAML 管理 Kubernetes 應用?
- 實踐分享!GitLab CI/CD 快速入門