kubernetes 调用 rook 作后端存储

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/signmem/article/details/88538667

说明

通过 yaml 创建 ceph pool
通过 yaml 创建 pvc
通过 yaml 调用 pvc 连接 pod

创建 pool

kubernets 提供的存储接口支持

参考 kubetnetes 官方文档

官方文档中提到了很多种不通的存储后端支持, 例如包括了下面几种常见的后端

AWSElasticBlockStore
AzureDisk
AzureFile
Cinder
CephFS
RBD

本文主要围绕了 rbd 后端连接方式描述

创建 ceph pool 与 k8s storageclass 资源

参考 yaml 文件

apiVersion: ceph.rook.io/v1
kind: CephBlockPool
metadata:
  name: volumes
  namespace: rook-ceph
spec:
  replicated:
    size: 3
---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
   name: rook-ceph-block
provisioner: ceph.rook.io/block
parameters:
  blockPool: volumes
  clusterNamespace: rook-ceph
  fstype: xfs
reclaimPolicy: Retain

执行方法

[root@ns-yun-020065 ceph]# kubectl apply -f volumes.yaml
cephblockpool.ceph.rook.io/volumes created
storageclass.storage.k8s.io/rook-ceph-block created

参数描述

kind: CephBlockPool 

创建 pood 过程调用了 pkg/operator/ceph/pool/controller.go 代码, 完成下面操作

创建 pool
创建用户 key 并更新 client.admin.keyring 配置
修改 pool replication size
初始化定义 pool 使用 application rbd pool

参数描述

扫描二维码关注公众号,回复: 5658754 查看本文章
kind: StorageClass                 <- 定义了 storageclass 资源
provisioner: ceph.rook.io/block    <- 使用了 rook 后端存储
reclaimPolicy: Retain              <- pvc 使用后不直接进行删除策略

创建 k8s pvc 方法

参考 yaml 文件

apiVersion: v1
kind: PersistentVolumeClaim              <- pvc 资源
metadata:
  name: pvc-test01
  namespace: rook-ceph
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 50Gi                       <- pvc 大小
  storageClassName: rook-ceph-block       <-指定了 pv 资源

挂载过程调用了 pkg/operator/ceph/pool/controller.go 代码 完成了卷挂载操作

卷说明

使用了 reclaimPolicy: Retain 定义
在删除 pod 之后, 卷依旧存在在 ceph 存储中
k8s 创建卷都以 pvc-xxx 方式命名
在 ceph 集群中, 也可以直接看见 pvc-xxx 命名的 rbd 文件

参考 kubernets 中的 pvc 命名

[root@ns-yun-020065 rook]# kubectl -n rook-ceph get PersistentVolumeClaim
NAME              STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS      AGE
pvc-test01        Bound    pvc-43864abc-3a78-11e9-916f-ec388f792726    50Gi      RWO            rook-ceph-block   14h

参考在 ceph 集群中的 rbd 文件命名

[root@ns-yun-020065 rook]# kubectl -n rook-ceph-system exec -it rook-ceph-operator-b996864dd-wtzt4 -- rbd -p volumes ls
pvc-43864abc-3a78-11e9-916f-ec388f792726

pod 连接 pvc 方法

参考 yaml 文件

kind: Pod
apiVersion: v1
metadata:
  name: test-pod01
  namespace: rook-ceph
  labels:
    test-rbd: "true"
spec:
  containers:
  - name: test-pod01
    image: centos7:7.5.1804
    command:
    - "sleep"
    - "30000000"
    volumeMounts:
    - name: terry-pvc
      mountPath: "/media"
  nodeSelector:
    node: kube-node
  volumes:
  - name: terry-pvc
    persistentVolumeClaim:
      claimName: "pvc-test01"

创建 pod 方法

kubectl apply -f testpod.yaml

原理

1 kubernetes 调用 rook-ceph-operator, 创建 rbd 文件
2 kubernetes 在 node 上创建 pod
3 在上述 pod 主机中把 rbd 文件挂载成  /dev/rbdX 设备
4 rook-ceph-agent 吧 /dev/rbdX 设备连接到 POD 使用

猜你喜欢

转载自blog.csdn.net/signmem/article/details/88538667