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 https://curveadm.nos-eastchina1.126.net/script/install.sh)"
主機列表
主機模組用來統一管理使用者主機,以減少使用者在各配置檔案中重複填寫主機 SSH
連線相關配置。我們需匯入部署叢集和客戶端所需的機器列表,以便在之後的各類配置檔案中填寫部署服務的主機名。
這裡採用一臺伺服器,做單節點叢集。
配置免密登陸
生成金鑰並配置伺服器免密登陸
# 一直回車即可
ssh-keygen
# 使用 ssh-copy-id 配置
ssh-copy-id root@172.31.98.243
# 驗證免密
ssh root@172.31.98.243
# 無需輸入密碼登陸成功即可
匯入主機列表
準備主機列表檔案 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 https://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 底層的共享儲存,為使用者提供更好、更簡單的雲原生應用管理平臺和雲原生儲存,共同推進開源社群生態以及給使用者提供一體化的解決方案。