在 Rainbond 上使用 Curve 雲原生儲存

語言: CN / TW / HK

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-bindingcurvefs-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 底層的共享儲存,為使用者提供更好、更簡單的雲原生應用管理平臺和雲原生儲存,共同推進開源社群生態以及給使用者提供一體化的解決方案。