CephFS 使用
之前介紹了 RBD 的使用方法,有了 RBD,遠端磁碟掛載的問題就解決了,但 RBD 的問題是不能多個主機共享一個磁碟,如果有一份資料很多客戶端都要讀寫該怎麼辦呢?這時 CephFS 作為檔案系統儲存解決方案就派上用場了。
1. CephFS 安裝
在已經部署好的 Ceph 叢集上安裝 CephFS 還是比較簡單的,首先需要安裝 MDS,原因是 CephFS 需要統一的元資料管理,所以 MDS 必須要有。
$ ceph-deploy --overwrite-conf mds create<cephfs-master>
剩下的就是 pool 相關的處理的了:
$ ceph osd pool create cephfs_data 1024 $ ceph osd pool create cephfs_metadata 100 $ ceph fs new cephfs cephfs_metadata cephfs_data
這樣 CephFS 就已經安裝好了,執行下面的命令驗證一下狀態,看到 up 和 active 就表示狀態正常。
$ ceph fs ls name: cephfs, metadata pool: cephfs_metadata, data pools: [cephfs_data ] $ ceph mds stat cephfs-1/1/1 up{0=cephfs-master1=up:active}
2. CephFS 物理機掛載
接下來嘗試一下遠端掛載剛剛創建出來的 CephFS,首先還是要在客戶機上安裝 Ceph,這步和遠端掛載 RBD 是一樣的:
# On Linux client $ echo "<user-name> ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/<user-name> $ sudo chmod 0440 /etc/sudoers.d/<user-name> $ sudo apt-get install -y python # On Ceph master $ ceph-deploy install <Linux-client-IP> $ ceph-deploy admin <Linux-client-IP>
然後獲取 Ceph admin 使用者的金鑰,就是 <admin-key>
對應的部分。
$ ceph auth get client.admin exported keyring for client.admin [client.admin] key = <admin-key> caps mds = "allow *" caps mgr = "allow *" caps mon = "allow *" caps osd = "allow *"
接下來建立掛載目錄,並掛載,注意替換 <monitor-ip>
和 <admin-key>
,分別對應 Ceph monitor 所在的 IP 和剛剛在上一步獲取的 admin 金鑰。
$ sudo mkdir /mnt/cephfs $ sudo mount -t ceph <monitor-ip>:6789:/ /mnt/cephfs/ -o name=admin,secret=<admin-key>
至此就已經掛載成功了,可以在掛載的目錄下建立新目錄,寫入新檔案,在其他同樣掛載該 CephFS 的伺服器上,也能看到同樣的變化。
如果想做到開機啟動就掛載 CephFS,請參考 ofollow,noindex">使用ceph的檔案儲存CephFS
3. CephFS 使用者隔離
上一步已經實現了遠端掛載,和檔案共享,但如果多個產品同時使用一個 CephFS,如果資料都互相可見,顯然是不夠安全的,那麼就要做隔離,咱們接下來就來看看 CephFS 是如何做到這點的。
CephFS 這個檔案系統還是統一的,所以隔離是在使用者層面做的,具體的做法是:限定某個使用者只能訪問某個目錄。
下面這個命令建立了一個叫 bruce 的使用者,這個使用者只能訪問目錄 /bruce ,資料儲存在 pool cephfs_data 中。
$ ceph auth get-or-create client.bruce mon 'allow r' mds 'allow r, allow rw path=/bruce' osd 'allow rw pool=cephfs_data'
如果要做進一步的隔離,想讓不通使用者的資料儲存在不同的 pool,可以用命令將 pool 加入的 CephFS 中,再用命令指定,加入 pool 的命令如下:
$ ceph mds add_data_pool bruce $ ceph fs ls .... data pools: [cephfs_data bruce ]
掛載方式和 admin 使用者掛載一樣:
$ sudo mount -t ceph 10.19.250.136:6789:/ /mnt/bruce -o name=bruce,secret=AQCt8qBbx4XGKBAACWG5lQHRX7FTo0nVZCYxNA==
掛載後,可以看到其他目錄,但沒有操作許可權,只能在 /mnt/bruce/bruce 下操作。
$ /mnt/bruce$ ls abc bruce $ /mnt/bruce$ cd abc $ /mnt/bruce/abc$ sudo mkdir test mkdir: cannot create directory 'test': Permission denied $ /mnt/bruce/abc$ cd ../bruce $ /mnt/bruce/bruce$ mkdir test $ /mnt/bruce/bruce$ ls test
4. Kubernetes 叢集使用 CephFS
首先把 Ceph 使用者的金鑰以 secret 形式儲存起來,下面的命令是獲取 admin 使用者的金鑰,如果使用其他使用者,可以把 admin 替換為要使用的使用者名稱即可。
$ ceph auth get-key client.admin | base64 QVFEMDFWVmFWdnp6TFJBQWFUVVJ5VVp3STlBZDN1WVlGUkwrVkE9PQ== $ cat ceph-secret.yaml apiVersion: v1 kind: Secret metadata: name: ceph-secret data: key: QVFEMDFWVmFWdnp6TFJBQWFUVVJ5VVp3STlBZDN1WVlGUkwrVkE9PQ==
接下來建立 PV:
$ cat cephfs-pv.yaml apiVersion: v1 kind: PersistentVolume metadata: name: cephfs-pv spec: capacity: storage: 10Gi accessModes: - ReadWriteMany cephfs: monitors: - <monitor1-id>:6789 - <monitor2-id>:6789 user: admin secretRef: name: ceph-secret readOnly: false persistentVolumeReclaimPolicy: Recycle
最後建立 PVC:
$ cat cephfs-pvc.yaml kind: PersistentVolumeClaim apiVersion: v1 metadata: name: cephfs-pvc spec: accessModes: - ReadWriteMany resources: requests: storage: 10Gi
PV 和 PVC 都有以後,使用方式和普通的 PV 和 PVC 無異。