Kubernetes存儲——rook-ceph


一、搭建 rook-ceph(集群)版本:v6

1.1 服務規划(4c3g)

k8s-master(k8s集群) k8s-node01(k8s集群) k8s-node02(k8s集群)
192.168.99.1 192.168.99.2 192.168.99.3

1.2 掃描新磁盤

所有 k8s 節點另外准備一塊磁盤(裸盤)(/dev/sdb)

在所有節點添加1塊100GB的新磁盤:/dev/sdb,作為OSD盤,提供存儲空間,添加完成后掃描磁盤,確保主機能夠正常識別到:

$ for host in $(ls /sys/class/scsi_host) ; do echo "- - -" > /sys/class/scsi_host/$host/scan; done
# 掃描 SCSI 總線並添加 SCSI 設備

$ for scsi_device in $(ls /sys/class/scsi_device/); do echo 1 > /sys/class/scsi_device/$scsi_device/device/rescan; done
# 重新掃描 SCSI 總線

$ lsblk
# 查看已添加的磁盤,能夠看到sdb說明添加成功

1.3 部署rook-ceph集群

因為這里k8s集群只有三台,所以必須配置k8s的master運行pod


[root@k8s-master ~]# kubectl describe node k8s-master |grep Taints
Taints: node-role.kubernetes.io/k8s-master:NoSchedule
# 查看master表示不運行pod

[root@k8s-master ~]# kubectl describe node k8s-master |grep Taints
Taints: <none>
# 查看master表示運行pod

[root@k8s-master ~]# kubectl taint nodes k8s-master node-role.kubernetes.io/k8s-master-
# 讓master節點參與pod負載

[root@k8s-master ~]# kubectl taint nodes k8s-master node-role.kubernetes.io/k8s-master=:NoSchedule
# 讓master節點恢復不參與pod負載 

rook-ceph官網

github代碼

rook-ceph鏡像下載鏈接:https://pan.baidu.com/s/1SPK7K3NAWKhGTV_-A2tSOQ
提取碼:cjmx

$ https://github.com/rook/rook.git (https://gitee.com)
$ git clone https://gitee.com/huanhui/rook.git
$ git clone --single-branch --branch v1.6.7 https://github.com/rook/rook.git
# 根據自身網絡情況,任選其中一種即可

$ cd rook/cluster/examples/kubernetes/ceph
# 進入對應的目錄

$ grep image operator.yaml # 查看所需鏡像
$ grep image cluster.yaml
$ mkdir rook-ceph-images && cd rook-ceph-images
$ unzip '*.zip'
$ ls *tar |xargs -i docker load -i {} && docker images
$ rm -rf rook-ceph-images
# 離線導入鏡像

$ kubectl create -f crds.yaml -f common.yaml -f operator.yaml

$ kubectl create -f cluster.yaml
# 修改cluster.yaml文件

2021-10-18_152708

$ kubectl get pod -n rook-ceph -o wide
$ kubectl get deployment -n rook-ceph
$ kubectl get svc -n rook-ceph

1.4 配置ceph dashboard

在cluster.yaml文件中默認已經啟用了ceph dashboard!

rook-ceph-mgr-dashboard監聽的端口是8443,創建nodeport類型的service以便集群外部訪問!

$ cd ~/rook/cluster/examples/kubernetes/ceph
$ kubectl apply -f dashboard-external-https.yaml
$ kubectl get svc -n rook-ceph
rook-ceph-mgr-dashboard-external-https   NodePort    10.105.9.199     <none>        8443:30077/TCP      13s

訪問:https://192.168.99.1:30077

1.5 獲取dashboard登陸賬號、密碼

默認用戶名為:admin

$ kubectl -n rook-ceph get secret rook-ceph-dashboard-password -o jsonpath="{['data']['password']}" | base64 --decode && echo
# 獲取密碼

1.6 部署 ceph toolbox

$ cd ~/rook/cluster/examples/kubernetes/ceph
$ kubectl apply -f toolbox.yaml

進入該pod,查看ceph集群狀態

[root@k8s-master ~]# kubectl exec -it rook-ceph-tools-78cdfd976c-z4ps4 -n rook-ceph /bin/bash

[root@rook-ceph-tools-78cdfd976c-z4ps4 /]# ceph -s

二、k8s使用 rook-ceph 的塊存儲

2.1 rook提供RBD服務

rook可以提供以下3類型的存儲:

  • Block:Create block storage to be consumed by a pod
  • Object:Create an object store that is accessible inside or outside the Kubernetes cluster
  • Shared File System:Create a file system to be shared across multiple pods

2.2 使用rook-ceph的塊存儲

1、基於 CSI 驅動程序創建卷

2、基於 flex 驅動程序創建卷

1、此示例使用 CSI 驅動程序,它是 K8s 1.13 和更新版本的首選驅動程序。

2、flex 驅動程序(K8s 1.12 或更早版本需要)的存儲類

要基於 flex 驅動程序創建卷,確保通過 Ceph CSI 啟用了 flex 驅動程序。為此,您需要在您的操作員部署文件 operator.yaml 中設置 ROOK_ENABLE_FLEX_DRIVERtrue,與 CSI 驅動程序相同。

注意:CSI 驅動程序,此示例要求每個節點至少有 1 個 OSD,每個 OSD 位於3 個不同的節點上。因為failureDomain設置為host並且replicated.size設置為3

在kubernetes集群里,要提供rbd塊設備服務,需要有如下步驟:

1、創建 rbd-provisione

2、創建 pool

3、創建對應的 storageclass

4、使用rbd對應的storageclass創建pvc,然后動態申請pv

5、創建pod使用pv( 使用存儲 )

通過rook創建Ceph Cluster集群之后,rook自身提供了rbd-provisioner服務,所以不需要再部署其provisioner(供應商,就是提供存儲的)。

2.2.1 使用CSI驅動程序
# 1、CSI 驅動程序 (2、3步驟可以直接使用下面命令執行)
$ kubectl create -f ~/rook/cluster/examples/kubernetes/ceph/csi/rbd/storageclass.yaml

# 2、flex 驅動程序
$ kubectl create -f cluster/examples/kubernetes/ceph/flex/storageclass.yaml
2.2.2 創建pool
# 創建一個自己的工作目錄
$ cd /root/rook/cluster/examples/kubernetes/ceph
$ mkdir my_yaml

$ cat > pool.yaml << EOF
apiVersion: ceph.rook.io/v1
kind: CephBlockPool
metadata:
  name: replicapool   # operator會監聽並創建一個pool
  namespace: rook-ceph
spec:
  failureDomain: host
  replicated:
    size: 3
    requireSafeReplicaSize: true
EOF

$ kubectl apply -f pool.yaml
# 創建了一個名為 replicapool 的存儲池

apply執行完后,登錄 ceph dashboard 界面上能看到對應的pool!

2.2.3 創建對應的storageclass
$ cat > storageclass.yaml << EOF
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
   name: rook-ceph-block # 這里創建一個storage class, 在pvc中指定這個storage class即可實現動態創建PV
provisioner: rook-ceph.rbd.csi.ceph.com
parameters:
  clusterID: rook-ceph
  Pool: replicapool
  imageFormat: "2"
  imageFeatures: layering
  csi.storage.k8s.io/provisioner-secret-name: rook-csi-rbd-provisioner
  csi.storage.k8s.io/provisioner-secret-namespace: rook-ceph # 必須與rook-ceph集群ns相同
  csi.storage.k8s.io/controller-expand-secret-name: rook-csi-rbd-provisioner
  csi.storage.k8s.io/controller-expand-secret-namespace: rook-ceph
  csi.storage.k8s.io/node-stage-secret-namespace: rook-ceph
  csi.storage.k8s.io/fstype: ext4 # 指定卷的文件系統類型。如果沒有指定,它將使用ext4
allowVolumeExpansion: true
reclaimPolicy: Delete # 不寫默認值為Delete,其他選項包括“保留(Retain)”、“回收(Recycle)”
EOF

如果您在“rook-ceph”以外的命名空間中部署了 Rook operator ,請更改配置器中的前綴以匹配您使用的命名空間。例如,如果 Rook operator 在名稱空間“my-namespace”中運行,則供應商值應為“my-namespace.rbd.csi.ceph.com”。

$ kubectl apply -f storageclass.yaml
$ kubectl get storageclass
# 創建了一個名為 rook-ceph-block 的storageClass
2.2.4 創建pvc測試
$ cat > test-pvc.yaml << EOF
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: wp-pv-claim
  labels:
    app: wordpress
spec:
  storageClassName: rook-ceph-block	# 指定storage class
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 20Gi # 需要一個20G的盤
EOF 

$ kubectl apply -f test-pvc.yaml
# 創建一個名為wp-pv-claim的pvc

$ kubectl get pvc
NAME          STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS      AGE
wp-pv-claim   Bound    pvc-8ca4b37a-bfdf-49eb-ad46-c39309115664   20Gi       RWO            rook-ceph-block   16s

$ kubectl get pv
NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                 STORAGECLASS      REASON   AGE
pvc-8ca4b37a-bfdf-49eb-ad46-c39309115664   20Gi       RWO            Delete           Bound    default/wp-pv-claim   rook-ceph-block            17s
kubectl exec -it rook-ceph-tools-656b876c47-2mffd -n rook-ceph /bin/bash #進入容器查看相關信息

[root@rook-ceph-tools-78cdfd976c-5wpmv /]# rbd showmapped

[root@rook-ceph-tools-78cdfd976c-5wpmv /]# rbd list replicapool
[root@rook-ceph-tools-78cdfd976c-5wpmv /]# rbd info -p replicapool xxxxxxx

2021-10-18_154711

2.2.5 清理塊創建的所有工件
$ kubectl delete -f test-pvc.yaml
$ kubectl delete -n rook-ceph cephblockpools.ceph.rook.io replicapool
$ kubectl delete storageclass rook-ceph-block


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM