【问题标题】:Kubernetes Ceph StorageClass with dynamic provisioning具有动态配置的 Kubernetes Ceph StorageClass
【发布时间】:2018-02-16 06:08:46
【问题描述】:

我正在尝试使用 storageClass 设置我的 Kubernetescluster 和 Ceph 集群,这样每个 PVC 都会在 ceph 集群内自动创建一个新 PV。

但它不起作用。我尝试了很多,阅读了很多文档和教程,但不知道出了什么问题。

我为 ceph admin 用户和另一个用户 kube 创建了 2 个秘密,我使用此命令创建了它们以授予对 ceph osd 池的访问权限。

创建池: sudo ceph osd pool create kube 128

创建用户: sudo ceph auth get-or-create client.kube mon 'allow r' \ osd 'allow class-read object_prefix rbd_children, allow rwx pool=kube' \ -o /etc/ceph/ceph.client.kube.keyring

之后,我导出了两个密钥并将它们转换为 Base64: sudo ceph auth get-key client.admin | base64sudo ceph auth get-key client.kube | base64 我在我的 secret.yaml 中使用这些值来创建 kubernetes 机密。

apiVersion: v1
kind: Secret
type: "kubernetes.io/rbd"
metadata:
  name: ceph-secret
data:
   key: QVFCb3NxMVpiMVBITkJBQU5ucEEwOEZvM1JlWHBCNytvRmxIZmc9PQo=

还有一个叫 ceph-user-secret。

然后我创建了一个存储类来使用 ceph 集群

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: standard
  annotations:
    storageclass.kubernetes.io/is-default-class: "true"
provisioner: kubernetes.io/rbd

parameters:
  monitors: publicIpofCephMon1:6789,publicIpofCephMon2:6789
  adminId: admin
  adminSecretName: ceph-secret
  pool: kube

  userId: kube
  userSecretName: ceph-kube-secret

  fsType: ext4
  imageFormat: "2"
  imageFeatures: "layering"

为了测试我的设置,我创建了一个 PVC

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc-eng
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 1Gi

但它卡在了挂起状态:

#kubectl get pvc
NAME      STATUS    VOLUME    CAPACITY   ACCESSMODES   STORAGECLASS   AGE
pvc-eng   Pending                                      standard       25m

此外,不会在 ceph kube 池中创建任何图像。 您对如何调试此问题有任何建议吗?

我尝试在所有 kubernetes 节点上安装 ceph-common ubuntu 包。我将 kube-controller-manager docker 镜像切换为 AT&T 提供的镜像,该镜像包含 ceph-common 包。

https://github.com/att-comdev/dockerfiles/tree/master/kube-controller-manager

网络很好,我可以从 pod 内部和每个 kubernetes 主机访问我的 ceph 集群。

如果有人有任何想法,我会很高兴!

【问题讨论】:

标签: kubernetes ceph


【解决方案1】:

作为已接受答案的扩展.....

RBD 是一个远程块设备。即像 iSCSI 的外部硬盘驱动器。文件系统由客户端容器解释,因此只能由单个用户写入,否则会发生损坏。

CephFS 是一个类似于 NFS 或 SMB/CIFS 的网络感知文件系统。这允许多次写入不同的文件。文件系统由 Ceph 服务器解释,因此可以接受来自多个客户端的写入。

【讨论】:

    【解决方案2】:

    您必须使用annotation: ReadWriteOnce。 如您所见https://kubernetes.io/docs/concepts/storage/persistent-volumes/(Persistent Volumes 部分)RBD 设备不支持 ReadWriteMany 模式。如果您需要多个 Pod 从 PV 读取和写入数据,请选择不同的卷插件(例如 CephFS)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多