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