Kubernetes+Ceph時cephfs和ceph-rbd的PV管理

Kubernetes+Ceph時cephfs和ceph-rbd的PV管理

[TOC]

1. 目的

環境
Kubernetes: v1.13.4
Ceph: 12.2.10 luminous (stable)
external storage provisioner: https://github.com/kubernetes-incubator/external-storage/tree/master/ceph

目的
Kubernetes storage class使用以上provisioner管理pv/pvc時,默認不支持 recycle回收策略,且pv創建後,除非人爲刪除,其會一直存在。爲了更好的管理pv/pvc,本文以shell腳本方式人爲補充管理。

相關腳本:
https://github.com/ygqygq2/kubernetes/tree/master/shell/pv-manage

2. 相關原理

介紹下上面腳本中使用的一些原理細節。

2.1 PV的狀態切換與PVC的關係

以下文章中已經通過具體示例測試PV的ReleasedAvailable狀態切換:
Kubernetes PV在Retain策略Released狀態下重新分配到PVC恢復數據

2.2 刪除PV需要在ceph集羣中刪除哪些信息

刪除PV後,ceph集羣中原來Kubernetes使用的相關資源並未完全刪除,因此如果想要完成刪除,需要了解它們之間的關聯。

準備工作
ceph管理節點掛載CephFS

將ceph用戶密鑰提取至/etc/ceph/ceph.client.admin.secret,並使用它將cephfs根目錄掛載至特定目錄:

yum -y install ceph-fuse
mount -t ceph 192.168.105.92:6789,192.168.105.93:6789,192.168.105.94:6789:/ /data/cephfs -oname=admin,secretfile=/etc/ceph/ceph.client.admin.secret

如下可設置開機自動掛載:
/etc/fstab添加一行

192.168.105.92:6789,192.168.105.93:6789,192.168.105.94:6789:/ /data/cephfs ceph name=admin,secretfile=/etc/ceph/ceph.client.admin.secret,noatime 0 0

查看一個cephfs類型的PV

apiVersion: v1
kind: PersistentVolume
metadata:
  annotations:
    cephFSProvisionerIdentity: cephfs-provisioner-1
    cephShare: kubernetes-dynamic-pvc-b90b484d-04f1-11e9-a94b-1aa7c06c39dc
    pv.kubernetes.io/provisioned-by: ceph.com/cephfs
  creationTimestamp: "2018-12-21T07:26:26Z"
  finalizers:
  - kubernetes.io/pv-protection
  name: pvc-b787c1cf-04f1-11e9-812d-eeeeeeeeeeee
  resourceVersion: "3894910"
  selfLink: /api/v1/persistentvolumes/pvc-b787c1cf-04f1-11e9-812d-eeeeeeeeeeee
  uid: b9b805e9-04f1-11e9-8460-000c29ee2954
spec:
  accessModes:
  - ReadWriteMany
  capacity:
    storage: 2Gi
  cephfs:
    monitors:
    - 192.168.105.92:6789
    - 192.168.105.93:6789
    - 192.168.105.94:6789
    path: /volumes/kubernetes/kubernetes/kubernetes-dynamic-pvc-b90b484d-04f1-11e9-a94b-1aa7c06c39dc
    secretRef:
      name: ceph-kubernetes-dynamic-user-b90b488c-04f1-11e9-a94b-1aa7c06c39dc-secret
      namespace: uat
    user: kubernetes-dynamic-user-b90b488c-04f1-11e9-a94b-1aa7c06c39dc
  claimRef:
    apiVersion: v1
    kind: PersistentVolumeClaim
    name: plat-zuul-utcook
    namespace: uat
    resourceVersion: "3894873"
    uid: b787c1cf-04f1-11e9-812d-eeeeeeeeeeee
  persistentVolumeReclaimPolicy: Retain
  storageClassName: cephfs
  volumeMode: Filesystem
status:
  phase: Bound

ceph管理節點做些確認:

ls /data/cephfs/volumes/kubernetes/kubernetes/kubernetes-dynamic-pvc-b90b484d-04f1-11e9-a94b-1aa7c06c39dc
ceph auth list|grep kubernetes-dynamic-user-b90b488c-04f1-11e9-a94b-1aa7c06c39dc
# 依據上面一條命令所得到的信息 client.kubernetes-dynamic-user-b90b488c-04f1-11e9-a94b-1aa7c06c39dc
ceph auth get client.[client.kubernetes-dynamic-user-b90b488c-04f1-11e9-a94b-1aa7c06c39dc]

kubernetes管理節點做些確認:

kubectl get secret ceph-client.kubernetes-dynamic-user-b90b488c-04f1-11e9-a94b-1aa7c06c39dc-secret -n uat --template={{.data.key}}|base64 -d

可以看出兩邊的keypath是對應的。因此,如果刪除此pv,相關的資源有:ceph中的auth、path,kubernetes中的pv、secret。

Kubernetes+Ceph時cephfs和ceph-rbd的PV管理

查看一個rbd類型的PV

apiVersion: v1
kind: PersistentVolume
metadata:
  annotations:
    pv.kubernetes.io/provisioned-by: ceph.com/rbd
    rbdProvisionerIdentity: ceph.com/rbd
  creationTimestamp: "2018-12-25T03:32:38Z"
  finalizers:
  - kubernetes.io/pv-protection
  name: pvc-b97cf919-07f5-11e9-8183-0050568ddb46
  resourceVersion: "5113288"
  selfLink: /api/v1/persistentvolumes/pvc-b97cf919-07f5-11e9-8183-0050568ddb46
  uid: ba318fd1-07f5-11e9-b415-000c297f476b
spec:
  accessModes:
  - ReadWriteOnce
  capacity:
    storage: 8Gi
  claimRef:
    apiVersion: v1
    kind: PersistentVolumeClaim
    name: redis-data-harbor-redis-master-0
    namespace: devops
    resourceVersion: "5109726"
    uid: b97cf919-07f5-11e9-8183-0050568ddb46
  persistentVolumeReclaimPolicy: Retain
  rbd:
    fsType: ext4
    image: kubernetes-dynamic-pvc-b3bf3c7b-07f5-11e9-a77c-ceecbb731155
    keyring: /etc/ceph/keyring
    monitors:
    - 192.168.105.92:6789
    - 192.168.105.93:6789
    - 192.168.105.94:6789
    pool: kube
    secretRef:
      name: ceph-secret
      namespace: kube-system
    user: kube
  storageClassName: ceph-rbd
  volumeMode: Filesystem
status:
  phase: Released

從以上看出,因爲rbd下user和pool都是共用的,所以只要確認image,這樣如果要刪除此pv,相關的資源有:ceph中的image,kubernetes中的pv。

Kubernetes+Ceph時cephfs和ceph-rbd的PV管理

3. 小結

以上環境中,cephfs的pv雖有大小設置,但是實際使用過程中並未發現有大小限制,參考資料[5]、[6]中可以查看相關詳情。
另外,此文章Kubernetes容器掛載 ceph rbd 卷的平滑擴容方法,也是我經過實踐證明可行的。

參考資料:
[1] http://docs.ceph.org.cn/cephfs/kernel/
[2] http://docs.ceph.org.cn/cephfs/fstab/
[3] http://docs.ceph.org.cn/rbd/rados-rbd-cmds/
[4] https://blog.csdn.net/shida_csdn/article/details/79193009
[5] http://docs.ceph.org.cn/cephfs/quota/
[6] https://www.cnblogs.com/ltxdzh/p/9173706.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章