Kubernetes 使用RBD作为后端存储,无法访问设备。


如题:
环境版本:
kubernetes-node-1.1.0-0.4.git2bfa9a1.el7.x86_64
kubernetes-client-1.1.0-0.4.git2bfa9a1.el7.x86_64
kubernetes-master-1.1.0-0.4.git2bfa9a1.el7.x86_64
kubernetes-1.1.0-0.4.git2bfa9a1.el7.x86_64
Kernel版本:
kernel-3.10.0-229.11.1.el7.x86_64

创建RC的yaml
apiVersion: v1
kind: ReplicationController
metadata:
name: rbd-test
spec:
replicas: 1
selector:
name: rbd
template:
metadata:
  name: rbd
  labels:
    name: rbd
spec:
  containers:
    - name: test
      image: redis
      volumeMounts:
        - name: test-rbd
          mountPath: /registry
  volumes:
    - name: test-rbd
      rbd:
        monitors:
          - 10.20.30.4:6789
        pool: kube
        image: aaa.img
        fsType: ext4
        user: admin
        keyring: /etc/ceph/ceph.client.admin.keyring


使用rbd作为后端存储时,遇到两个坑:
1、 如果不使用readOnly: True时,查看docker inspect 返回rbd的设备挂载到容器内事RW的,但容器内无法访问挂载后的目录.

ls: cannot open directory .: Permission denied

补充:
是selinux 的问题,禁用以后就好了
2、如果副本数大于1,只有一个pod能创建成功,和rbd 的lock 有关系。
NAME             READY     STATUS                                         RESTARTS   AGE
rbd-test-lzhca   1/1       Running                                        0          19m
rbd-test-m8hb1   0/1       Image: redis is ready, container is creating   0          18m
rbd-test-ydqpn   0/1       Image: redis is ready, container is creating   0          18m

rbd lock list aaa.img --pool kube

There is 1 exclusive lock on this image.
Locker      ID                                                                          Address
client.4290 kubelet_lock_magic_kube-test-28745dc1-7ab2-4be0-9cb4-1a559a9e8387.novalocal 10.20.30.5:0/1007287


请问一下:
1、如果解决读写权限的问题,如果是多副本,怎么保证是读写分离的?(创建多个RC?只读RC和读写的RC?)
2、如何解决锁的问题?在做KVM使用rbd后端的时候也有类似的问题,minion如果当掉,rbd 的lock不会马上解除(补充,不是‘不会马上解锁’,貌似就是不会自动解,使用命令手动解锁以后,pod在其他minion上启动了,产生了新的锁),可能导致别的minion无法立即接管rc下边的pod。
已邀请:

wulonghui - PaaS工程师

赞同来自:


第一个问题,要读写分离,应用实例的状态是需要不一样的,最简单的方式当然是分为2类POD,即2个RC。
http://dockone.io/article/542这篇文章的例子就是redis读写分离:

!(http://dockerone.com/uploads/a ... 47.jpg)

PS: 当然也可以修改应用进行状态同步和竞争,这个自然就得应用自身去实现了。

第二个问题,本身倒没有什么经验,不过感觉是个bug,不知道有没有人可以解答下,我也学习下。

郑伟-风刃

赞同来自:


社区对于RBD只有一个pod访问的说法,和当前无法unlock的解释

https://github.com/kubernetes/ ... 10563
the node that locks the rbd volume should unlock it after the pod is deleted. In your situation the node went away and is thus unable to unlock the rbd. This is not ideal but at least prevent concurrent access to the same rbd and potential data corruption.

要回复问题请先登录注册