具有动态配置的 Kubernetes Ceph StorageClass
Kubernetes Ceph StorageClass with dynamic provisioning
我正在尝试使用 storageClass 使用 Ceph 集群设置我的 Kubernetes 集群,这样每个 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 | base64
和 sudo 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 的。
然后我创建了一个存储class来使用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 集群。
如果有人有任何想法,我将很高兴!
您必须使用 annotation: ReadWriteOnce
。
如您所见,https://kubernetes.io/docs/concepts/storage/persistent-volumes/(持久卷部分)RBD 设备不支持 ReadWriteMany 模式。如果需要多个 pods.
从 PV 读写数据,请选择不同的卷插件(例如 CephFS)
作为已接受答案的扩展......
RBD 是一个远程块设备。即外部硬盘驱动器,如 iSCSI。文件系统由客户端容器解释,因此只能由单个用户写入,否则会发生损坏。
CephFS 是一种类似于 NFS 或 SMB/CIFS 的网络感知文件系统。这允许多次写入不同的文件。文件系统由 Ceph 服务器解释,因此可以接受来自多个客户端的写入。
我正在尝试使用 storageClass 使用 Ceph 集群设置我的 Kubernetes 集群,这样每个 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 | base64
和 sudo 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 的。
然后我创建了一个存储class来使用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 集群。
如果有人有任何想法,我将很高兴!
您必须使用 annotation: ReadWriteOnce
。
如您所见,https://kubernetes.io/docs/concepts/storage/persistent-volumes/(持久卷部分)RBD 设备不支持 ReadWriteMany 模式。如果需要多个 pods.
作为已接受答案的扩展......
RBD 是一个远程块设备。即外部硬盘驱动器,如 iSCSI。文件系统由客户端容器解释,因此只能由单个用户写入,否则会发生损坏。
CephFS 是一种类似于 NFS 或 SMB/CIFS 的网络感知文件系统。这允许多次写入不同的文件。文件系统由 Ceph 服务器解释,因此可以接受来自多个客户端的写入。