CephFS 部署指南
wutz opened this issue · 0 comments
wutz commented
依赖 #4
简介
CephFS 是一个构建在 Ceph RADOS 之上并且兼容 POSIX 标准的文件系统.
CephFS 提供一些功能:
- 可扩展性
- 共享文件系统
- 多文件系统: 每个文件系统使用自己独立的 Pool 和 MDS
- 高可用性
- 可配置文件和目录的布局: 允许使用不同的 Pool 和文件条带模式
- POSIX ACL
- Quota: 支持到目录级别配额
组件
- Client: 用户空间的
ceph-fuse
或者内核空间的kcepfs
- MDS: 元数据服务
MDS
- Status: Active 或者 Standy (缺省只使用一个 Active MDS)
- Fail: 当 Active MDS 不响应时, Mon 会等待
mds_beacon_grace
时间后, 如果还不响应则标记 MDS 为laggy
. 然后 Standy MDS 变成 Active 状态 - Rank: 定义最大 Active MDS 数量用于分担元数据负载,
max_mds
配置 rank 数量 - Cache:
mds_cache_memory_limit
设置 MDS 使用内存大小ceph config set global mds_cache_memory_limit 8589934592
mds_cache_size
设置 MDS 使用inode
数量
- Affinity: 配置偏好使用的 MDS, 通过设置
mds_join_fs
在 Standby MDS 上
部署
-
创建 crush rule
# ceph osd crush rule create-replicated <name> <root> <failure-domain> <class> $ sudo ceph osd crush rule create-replicated rep_ssd default host ssd
-
创建 2 个副本 Pool 分别用于 metadata 和 data
$ sudo ceph osd pool create cephfs1_metadata 128 128 rep_ssd $ sudo ceph osd pool set cephfs1_metadata min_size 1 $ sudo ceph osd pool set cephfs1_metadata size 2 $ sudo ceph osd pool get cephfs1_metadata all $ sudo ceph osd pool create cephfs1_data 128 128 rep_ssd $ sudo ceph osd pool set cephfs1_data min_size 1 $ sudo ceph osd pool set cephfs1_data size 2 $ sudo ceph osd pool set cephfs1_data target_size_ratio 0.3 $ sudo ceph osd pool get cephfs1_data all $ sudo ceph osd pool autoscale-status
CRUSH Rule
repl_mix
参见存储策略配置指南 -
创建 CephFS
$ sudo ceph fs new cephfs1 cephfs1_metadata cephfs1_data $ sudo ceph fs ls $ sudo ceph fs get cephfs1
cephfs1
为自定义的名称 -
部署 MDS 到节点上
$ sudo ceph orch apply mds cephfs1 --placement=3 # or $ sudo ceph orch apply mds cephfs1 --placement="3 label:mds" $ sudo ceph mds stat
-
生成 Client 访问 Key
mon$ sudo ceph fs authorize cephfs1 client.cephfs1 / rw |sudo tee /etc/ceph/ceph.client.cephfs1.keyring mon$ sudo chmod 600 /etc/ceph/ceph.client.cephfs1.keyring
-
发送配置和 Key 到 Client
mon$ ssh client "mkdir /etc/ceph" mon$ sudo scp /etc/ceph/ceph.conf client:/etc/ceph mon$ sudo scp ceph.client.cephfs1.keyring client:/etc/ceph
-
挂载
# Ubuntu 20.04 client$ sudo apt install epel-release ceph-common # CentOS 7 client$ cat > /etc/yum.repos.d/ceph.repo << 'EOF' [ceph] name=Ceph packages for $basearch baseurl=https://mirrors.tuna.tsinghua.edu.cn/ceph/rpm-15.2.17/el7/$basearch enabled=1 priority=2 gpgcheck=1 gpgkey=https://download.ceph.com/keys/release.asc EOF client$ sudo yum install ceph-common client$ sudo mkdir /share client$ sudo mount -t ceph :/ /share -o name=cephfs1,fs=cephfs1
-
设置开机挂载
client$ sudo vim /etc/fstab # auto mount cephfs :/ /cephfs1 ceph name=cephfs1,fs=cephfs1 0 0
设置 quota
参考:
如果需要设置 quota 则需要额外 p 权限。设置 quota 还会改变 df 大小与 quota 一致。
mon$ sudo ceph fs authorize cephfs1 client.cephfs1p / rwp |sudo tee /etc/ceph/ceph.client.cephfs1p.keyring
mon$ sudo chmod 600 /etc/ceph/ceph.client.cephfs1p.keyring
mon$ sudo scp ceph.client.cephfs1p.keyring client:/etc/ceph
client$ sudo mount -t ceph :/ /share -o name=cephfs1p,fs=cephfs1
# 设置 10TiB 配额
client$ setfattr -n ceph.quota.max_bytes -v 10995116277760 /cephfs1
client$ getfattr -n ceph.quota.max_bytes /cephfs1
client$ getfattr -d -m ceph.dir.* /cephfs1
添加 EC POOL
# 创建 ec pool
ceph osd erasure-code-profile set ec_ssd k=4 m=2 crush-root=default crush-failure-domain=host crush-device-class=ssd
ceph osd pool create cephfs1_data_ec erasure ec_ssd
ceph osd pool set cephfs1_data_ec allow_ec_overwrites true
# 添加 ec pool 到 cephfs 中
ceph fs add_data_pool cephfs1 cephfs1_data_ec
# 设置 layout 需要 p 权限见 quota 配置
mkdir /share/ecdir
setfattr -n ceph.dir.layout.pool -v cephfs1_data_ec /share/ecdir
使用 K8S PVC
-
在 ceph cluster 中准备 key
$ sudo ceph auth get-or-create client.cephfs1k osd 'allow rw tag cephfs *=cephfs1' mon 'allow r fsname=cephfs1' mds 'allow rw fsname=cephfs1' mgr 'allow rw' |sudo tee /etc/ceph/ceph.client.cephfs1k.keyring $ sudo ceph fs subvolumegroup create cephfs1 csi
-
准备 helm values.yaml
storageClass: create: true clusterID: f89b88ea-4dad-11ec-a673-4d72a9026ccc fsName: cephfs1 reclaimPolicy: Retain secret: create: true adminID: cephfs1k adminKey: <---key---> csiConfig: - clusterID: f89b88ea-4dad-11ec-a673-4d72a9026ccc monitors: - 172.18.19.1:6789 - 172.18.19.2:6789 - 172.18.19.3:6789 - 172.18.19.4:6789 - 172.18.19.5:6789
- clusterID, monitors 来自配置 ceph.conf
- adminID, adminKey 来自配置 ceph.client.cephfs1k.keyring
-
安装 ceph-csi
$ helm repo add ceph-csi https://ceph.github.io/csi-charts $ kubectl create namespace ceph-csi-cephfs $ helm install --namespace "ceph-csi-cephfs" -f values.yaml "ceph-csi-cephfs" ceph-csi/ceph-csi-cephfs $ helm status "ceph-csi-cephfs" # 比如在需要自定义 image, 可以使用 raw yaml 安装,这时执行 helm template 导出 $ helm template -f myvalues.yaml ceph-csi/ceph-csi-cephfs > ceph-csi.yaml $ kubectl apply -f ceph-csi.yaml
-
运行 ceph pvc 示例
--- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: csi-cephfs-pvc spec: accessModes: - ReadWriteMany resources: requests: storage: 1Gi storageClassName: csi-cephfs-sc --- apiVersion: v1 kind: Pod metadata: name: csi-cephfs-demo-pod spec: containers: - name: web-server image: docker.io/library/nginx:latest volumeMounts: - name: mypvc mountPath: /var/lib/www volumes: - name: mypvc persistentVolumeClaim: claimName: csi-cephfs-pvc readOnly: false
$ kubectl apply -f pod-pvc.yaml