如何在Kubernetes里使用cephfs作为存储
941 字
5 分钟
如何在Kubernetes里使用cephfs作为存储
1 创建一个 ceph pool 创建存储池
1.1 ceph 集群请看这里:[[RookCeph安装]]
ceph osd pool create cephfs_data 128ceph osd pool set-quota cephfs_data max_bytes $((20 * 1024 * 1024 * 1024)) #20G的存储池cephfs pool init cephfs_data1.2 查看集群状态
ceph -s cluster: id: xxxxxxxxx-xxxx-11ec-bfb9-67a0f564e0d6 health: HEALTH_OK
services: mon: 3 daemons, quorum ceph01,ceph02,ceph03 (age 7d) mgr: ceph01.pjvndt(active, since 7d), standbys: ceph02.injlkl, ceph03.sulrio mds: 1/1 daemons up, 2 standby osd: 8 osds: 8 up (since 7d), 8 in (since 7d) rgw: 3 daemons active (3 hosts, 1 zones)
data: volumes: 1/1 healthy pools: 10 pools, 265 pgs objects: 269 objects, 8.3 KiB usage: 20 GiB used, 400 GiB / 420 GiB avail pgs: 265 active+clean1.3 查看用户 key
ceph auth get client.admin[client.admin] key = AQBTyCpiHHhbARAAfHqI0X9iMd3rnzJQHaMLkw== caps mds = "allow *" caps mgr = "allow *" caps mon = "allow *" caps osd = "allow *"exported keyring for client.admin或者自己创建存储池、用户以及用户 key
ceph osd pool create kubernetescephfs pool init kubernetesceph auth get-or-create client.kubernetes mon 'profile cephfs' osd 'profile cephfs pool=kubernetes' mgr 'profile cephfs pool=kubernetes'[client.kubernetes] key = AQD9o0Fd6hEWSDAAAt7fMaSZXduT3NWEqylNpmg==2 k8s ceph 配置
2.1 生成 ceph-csi 的 kubernetes configmap
ceph mon dumpepoch 3fsid xxxxxxxxx-xxxx-11ec-bfb9-67a0f564e0d6last_changed 2022-03-11T03:57:44.615026+0000created 2022-03-11T03:56:03.739853+0000min_mon_release 16 (pacific)election_strategy: 10: [v2:10.1.1.1:3300/0,v1:10.1.1.1:6789/0] mon.ceph011: [v2:10.1.1.2:3300/0,v1:10.1.1.2:6789/0] mon.ceph022: [v2:10.1.1.3:3300/0,v1:10.1.1.3:6789/0] mon.ceph03dumped monmap epoch 32.2 用以上的的信息生成 configmap
cat csi-config-map.yaml---apiVersion: v1kind: ConfigMapmetadata: name: "ceph-csi-config" namespace: cephfsdata: config.json: |- [ { "clusterID": "xxxxxxxxx-xxxx-11ec-bfb9-67a0f564e0d6", "monitors": [ "10.1.1.1:6789", "10.1.1.2:6789", "10.1.1.3:6789" ] } ]2.3 修改 kubectl 路径(可选)
这里我的 kubelet 存储路径在/data/kubelet/
如果这里不对的话会报在不到驱动
grep plugins_registry *csi-cephfsplugin.yaml: - "--kubelet-registration-path=/var/lib/kubelet/plugins/cephfs.csi.ceph.com/csi.sock"csi-cephfsplugin.yaml: mountPath: /var/lib/kubelet/podscsi-cephfsplugin.yaml: mountPath: /var/lib/kubelet/pluginscsi-cephfsplugin.yaml: path: /var/lib/kubelet/plugins/cephfs.csi.ceph.com/csi-cephfsplugin.yaml: path: /var/lib/kubelet/plugins_registry/csi-cephfsplugin.yaml: path: /var/lib/kubelet/podscsi-cephfsplugin.yaml: path: /var/lib/kubelet/pluginscsi-cephfsplugin.yaml: path: /var/lib/kubelet/plugins/cephfs.csi.ceph.com/mountinfocsi-nodeplugin-psp.yaml: - pathPrefix: '/var/lib/kubelet/pods'csi-nodeplugin-psp.yaml: - pathPrefix: '/var/lib/kubelet/plugins/cephfs.csi.ceph.com'csi-nodeplugin-psp.yaml: - pathPrefix: '/var/lib/kubelet/plugins_registry'csi-nodeplugin-psp.yaml: - pathPrefix: '/var/lib/kubelet/plugins'sed -i "s/var\/lib/data/g" *
grep kubelet *csi-cephfsplugin.yaml: - "--kubelet-registration-path=/data/kubelet/plugins/cephfs.csi.ceph.com/csi.sock"csi-cephfsplugin.yaml: mountPath: /data/kubelet/podscsi-cephfsplugin.yaml: mountPath: /data/kubelet/pluginscsi-cephfsplugin.yaml: path: /data/kubelet/plugins/cephfs.csi.ceph.com/csi-cephfsplugin.yaml: path: /data/kubelet/plugins_registry/csi-cephfsplugin.yaml: path: /data/kubelet/podscsi-cephfsplugin.yaml: path: /data/kubelet/pluginscsi-cephfsplugin.yaml: path: /data/kubelet/plugins/cephfs.csi.ceph.com/mountinfocsi-nodeplugin-psp.yaml: - pathPrefix: '/data/kubelet/pods'csi-nodeplugin-psp.yaml: - pathPrefix: '/data/kubelet/plugins/cephfs.csi.ceph.com'csi-nodeplugin-psp.yaml: - pathPrefix: '/data/kubelet/plugins_registry'csi-nodeplugin-psp.yaml: - pathPrefix: '/data/kubelet/plugins'2.4 生成 ceph-csi cephx 的 secret
cat <<EOF > csi-cephfs-secret.yamlapiVersion: v1kind: Secretmetadata: name: csi-cephfs-secret namespace: cephfsstringData: userID: admin userKey: xxxxx3rnzJQHaMLkw==
adminID: admin adminKey: xxxxx0X9iMd3rnzJQHaMLkw==EOF2.5 部署 csi
kubectl apply -f . -n cephfs
3 使用 ceph 块儿设备
3.1 查看 fsName
ceph fs lsname: testfs, metadata pool: cephfs_metadata, data pools: [cephfs_data ]3.2 创建 storageclass
apiVersion: storage.k8s.io/v1kind: StorageClassmetadata: name: csi-cephfs-scprovisioner: cephfs.csi.ceph.comparameters: clusterID: 2a8e37c8-a0ef-11ec-bfb9-67a0f564e0d6 pool: cephfs_data fsName: testfs csi.storage.k8s.io/provisioner-secret-name: csi-cephfs-secret csi.storage.k8s.io/provisioner-secret-namespace: cephfs csi.storage.k8s.io/controller-expand-secret-name: csi-cephfs-secret csi.storage.k8s.io/controller-expand-secret-namespace: cephfs csi.storage.k8s.io/node-stage-secret-name: csi-cephfs-secret csi.storage.k8s.io/node-stage-secret-namespace: cephfsreclaimPolicy: DeletemountOptions: - discard-
clusterID 对应之前的步骤中的 fsid
-
secret-name 对应之前的 Secret 名字
-
fsName 对应 ceph fs ls 查到的名字
-
imageFeatures,这个是用来确定创建的 image 的特征的
-
allowVolumeExpansion: true 是否开启在线扩容
kubectl apply -f sc.yaml -n cephfs
3.3 查看 storageclass
get StorageClass -n cephfsNAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGEcsi-cephfs-sc cephfs.csi.ceph.com Delete Immediate false 8m48s3.4 创建 PVC
apiVersion: v1kind: PersistentVolumeClaimmetadata: name: csi-cephfs-pvc namespace: cephfsspec: accessModes: - ReadWriteOnce resources: requests: storage: 1Gi storageClassName: csi-cephfs-sckubectl aaply -f pvc.yaml
3.5 查看 pvc
kubectl get pvc -n cephfsNAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGEcsi-cephfs-pvc Bound pvc-42da0f11-baba-4b73-a1ea-bbaee1f5fad4 1Gi RWO csi-cephfs-sc 2s3.6 测试挂载 pod 写入
cat <<EOF > csi-cephfs-secret.yamlapiVersion: v1kind: Podmetadata: name: csi-cephfs-demo-pod namespace: cephfsspec: containers: - name: web-server image: nginx volumeMounts: - name: mypvc mountPath: /var/lib/www/html volumes: - name: mypvc persistentVolumeClaim: claimName: csi-cephfs-pvc readOnly: falseEOFkubectl apply -f pod.yaml -n cephfs
kubectl apply -f pod.yaml -n rbdkubectl exec -it rbd-pod -n rbd -- shecho "hello" > /mnt/1cat /mnt/14 静态创建
4.1 配置 secret
在 pvc 所在的 namespaces 创建
apiVersion: v1kind: Secretmetadata: name: ceph-secretdata: key: QVFCVHlDcGlISGhiQVJxxxxxxxx # 上面获取的token要base64加密,很重要4.2 创建 pv
apiVersion: v1kind: PersistentVolumemetadata: name: cai-pvspec: accessModes: - ReadWriteOnce capacity: storage: 1Gi cephfs: monitors: - 10.1.1.1:6789 #ceph的monitors - 10.1.1.2:6789 path: /volumes/pvc-cephfs #默认为 / ,不会自动创建目录,可通过在cephfs增加subvolume或subvolumegroup,并获取其path来创建新的目录 user: admin #ceph账号,需要后端存储提供 secretRef: name: ceph-secret #下面的cephfs-seret.yml #secretFile: "/etc/ceph/cephfs-seret.yml" #如果不用secretRef,也可直接指定secret文件 persistentVolumeReclaimPolicy: Retain volumeMode: Filesystem4.3 pvc 挂载
apiVersion: v1kind: PersistentVolumeClaimmetadata: name: cai-pvcspec: volumeName: cai-pv accessModes: ["ReadWriteOnce"] # 与上面一样 resources: requests: storage: 1Gi4.4 查看状态
kubectl get pvcNAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGEcai-pvc Bound cai-pv 1Gi RWO 63m5 排错
5.1 查看日志
kubectl logs -f deployment.apps/csi-cephfsplugin-provisioner -n cephfs --all-containers=true --max-log-requests=7
5.2 查看 pvc 状态
kubectl describe pvc csi-cephfs-pvc01 -n cephfs
5.3 测试挂载
mount -t ceph 10.1.1.1:6789,10.1.1.2:6789,10.1.1.3:6789:/volumes/pvc-cephfs -o name=admin,secret=xxxxxx9iMd3rnzJQHaMLkw==
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!
如何在Kubernetes里使用cephfs作为存储
https://ccops.cc/posts/e4dd6864/ 相关文章 智能推荐
1
如何在Kubernetes里使用本地存储
🐳云原生 如何在Kubernetes里使用节点磁盘存储数据
2
如何在Kubernetes里使用cephrdb作为存储
🐳云原生 如何在Kubernetes里使用cephrbd作为存储后端
3
如何在Kubernetes里使用SMB存储
🐳云原生 如何在Kubernetes里使用smb作为存储后端
4
如何在Kubernetes里使用NFS存储
🐳云原生 如何在Kubernetes里使用NFS作为存储后端
5
如何在Kubernetes里使用Glusterfs存储
🐳云原生 如何在Kubernetes里使用Glusterfs作为存储后端
随机文章 随机推荐