日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

Kubernetes 持久化存储 Cephfs

發布時間:2025/3/11 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Kubernetes 持久化存储 Cephfs 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

熟悉kubernetes volume的同學應該了解,kubernetes 對volume的提供支持“靜態PV”和“動態PV”兩種方式。

  • 靜態PV:集群管理員創建一些PV,之后便可用于PVC消費。

  • 動態PV:相比靜態PV而言,動態PV無需管理員手動創建PV,PV的操作是由一個叫StorageClass的控制器創建。對于Cephfs volume來說,截止到kubernetes 1.16版本并沒有直接提供Cephfs的StorageClass。

?

雖然官方并沒有直接提供對Cephfs StorageClass的支持,但是社區給出了類似的解決方案 external-storage/cephfs,后面我們會使用到。

地址:https://github.com/kubernetes-incubator/external-storage

1.?靜態PV

編輯?Cephfs PV 對象文件?cephfs-pv.yaml

apiVersion: v1kind: PersistentVolumemetadata: name: cephfs-pvspec: capacity: storage: 1Gi accessModes: - ReadWriteMany cephfs: monitors: - 192.168.0.3:6789 user: kube secretRef: name: secret-for-cephfs readOnly: false persistentVolumeReclaimPolicy: Recycle

創建 PV:$?kubectl?create?-f?cephfs-pv.yaml?-n?cephfs

$?kubectl?get?pv?-n?cephfs

創建PVC:

$?vim?cephfs-pv-claim.yamlapiVersion:?v1kind:?PersistentVolumeClaimmetadata:??name:?cephfs-pv-claim??namespace:?cephfs?spec:??accessModes:????-?ReadWriteMany??resources:????requests: storage: 1Gi

在 deployment 中使用 PV:

??

apiVersion: apps/v1kind:?Deploymentmetadata:??name:?cephfs-pvc??namespace:?cephfsspec:??replicas:?2??template:????metadata: labels:????????app:?cephfs-pvc????spec:??????containers:??????-?name:?nginx????????image:?busybox:latest????????volumeMounts:????????-?name:?cephfs-pv??????????mountPath:?/data/cephfs??????????readOnly:?false??????volumes:??????-?name:?cephfs????????persistentVolumeClaim: claimName: cephfs-pv-claim

這樣,在同一個deployment中的2個pod容器內都可以讀寫同一個cephfs volume了。

2.?動態PV

對于規模不大的容器平臺而言,靜態PV方式就可以滿足需求;但是當容器規模很大時,你不知道用戶什么時候創建PV,因此動態PV方式就非常有用了。下面我們看下如何基于 external-storage/cephfs 來實現動態PV。

?

部署 cephfs-provisioner

cephfs-provisioner 是 kubernetes 官方社區提供的Cephfs的StorageClass支持。用于動態的調用后端存儲Cephfs創建PV。

cephfs-provisoner 的實現機制如圖所示:

?

它主要是包含兩部分:

  • cephfs-provisoner.go

是cephfs-provisoner(cephfs的StorageClass)的核心,主要是 watch kubernetes中 PVC 資源的CURD事件,然后以命令行方式調用 cephfs_provisor.py腳本創建PV。

  • cephfs_provisoner.py

python 腳本實現的與cephfs交互的命令行工具。cephfs-provisoner 對cephfs端volume的創建都是通過該腳本實現。里面封裝了volume的增刪改查等功能。

創建 StorageClass:

$?kubectl?create?-f?class.yaml$ kubectl get sc -n cephfsNAME PROVISIONER AGEcephfs ceph.com/cephfs 33d

基于RBAC授權方式啟動cephfs-provisioner:

$?kubectl?create?-f??*$ kubectl get deploy -n cephfs

這樣動態創建PV的環境就準備好了。

?

動態PV方式,無需再手動創建PV,只需創建PVC,cephfs-provisoner會自動的為該PVC在后端cephfs存儲上創建對應的PV。

kind:?PersistentVolumeClaimapiVersion:?v1metadata:??name:?pvc-1??annotations:????volume.beta.kubernetes.io/storage-class:?"cephfs"spec:??accessModes:????-?ReadWriteMany??resources:????requests: storage: 1Gi

此時,我們創建PVC后,會看到同時會自動創建并綁定上一個PV。

?

至此,基于 cephfs 的動態PV方式就介紹完了。

?

cephfs-provisoner的坑

?

在使用 cephfs-provisoner 與公司 cephfs 對接的時候遇到了一些坑,在這里一并說一下。

?

  • 路徑問題

?

在 cephfs_provisioner/ cephfs_provisioner.py 的實現中,默認在cephfs中創建的根目錄名是”kubernetes“,所有后續創建的卷都在cephfs端的 /kubernetes/ 一級目錄下 ,代碼實現中以VOlUME_GROUP="kubernetes"定義。因此,如果你不想在 cephfs 中以該名字命名,需要修改VOLUME_GROUP值。

?

另外,它的二級目錄也是固定的為/kubernetes/volumes,二級目錄是python-cephfs模塊中由DEFAULT_VOL_PREFIX變量定義:POOL_PREFIX = "fsvolume_"

DEFAULT_VOL_PREFIX = "/volumes" DEFAULT_NS_PREFIX = "fsvolumens_"

因此,要定制化在cephfs端的一級和二級目錄,需要修改這兩個地方。

?

  • 權限問題

    ?

這里遇到兩個權限問題:

?

  • 掛載權限問題

  • 默認python-cephfs模塊在連接cephfs掛載時是mount的根目錄”/“。

    ?

    而根目錄只有admin用戶才有權限進行掛載,所以這個地方除了admin用戶外,沒辦法使用其它用戶。但是,我們在使用cephfs時,為了安全,管理員是不會給我們admin用戶使用的,所以這個地方肯定是接受不了的。為此,我們定制修改了libcephfs2和python-cephfs的源碼,增加了connect_with_path方法,允許指定掛載的目錄,這樣我們只要在掛載時不使用根目錄即可。?

    ?

    ? ?2. 讀寫權限問題

    在 cephfs_provisoner.py 的實現中,默認添加了對 cephfs namespace的支持,因此在對volume授權時會添加對namespace 相關的權限設置。因為,我們使用的ceph版本luminous沒有對namespace進行支持,所以,在使用時產生了創建的volume掛載到pod內后沒有讀寫權限"input/output error"的問題。此時,你在cephfs端查看卷的讀寫權限時,你可以看到目錄讀寫權限都是問號。于是我們修改了這部分邏輯,去掉了 namespace 相關的部分。

    總結

    以上是生活随笔為你收集整理的Kubernetes 持久化存储 Cephfs的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。