资讯专栏INFORMATION COLUMN

kubernetes挂载存储

LiuZh / 3241人阅读

摘要:本文主要介绍如何用挂载目录。如何创建参照上目录下的范例,我们可以创建一个挂载存储的容器。到这里,就可以确定容器已经正常启动并挂载了一个的存储块。除非强制指定另块被挂载后,写入数据是可以很快同步的具体多久需要调查,而读取数据只能在后同步。

本文主要介绍如何用kubernentes挂载rbd目录。以及其中遇到的问题。有关ceph和rbd相关请自行百度。

如何创建

参照github上kubernetes/examples/rbd/ 目录下的范例,我们可以创建一个挂载rbd存储的容器。前提是:

当前网络中有一个ceph服务器

slaver节点上要安装ceph client。

从ceph服务器上获取client,monitor等关键信息。

具体步骤如下:

参照github上的案例,先创建一个secret
secret中存储的是ceph client与server之间通信需要的keyring。我们可以在ceph server 机器上的/etc/ceph/目录中找到许多keyring,这里选用 /etc/ceph/ceph.client.admin.keyring,其内容一般是:
key: AQADW11WlqGlMBAAYnKIIExLAlde8rG1SGAYQQ==
复制并替换ceph-secret,yaml中的相应字段(data字段下的‘key’)并保存。然后执行
kubectl create -f ceph-secret.yaml
并检查secret是否创建成功。

创建容器,挂载rbd volume
创建容器时,通过json文件我们可以很清楚的看到,我们引用了一个secret(secretRef)。直接执行
kubectl create -f *.json
即可。

创建后我们通过kubectl get pods 就能看到容器是否创建,执行kubectl exec -it {podname} /bin/bash 进入容器,可以找到相应的挂在目录。到这里,就可以确定容器已经正常启动并挂载了一个rbd的存储块。

读写问题

我们注意到创建容器的json文件中指定了"readOnly" :false,这意味着我们在容器里面可以随意的在挂载目录中创建/删除文件。

那么,多个节点,多个容器是否可以共享一个存储呢?

假设第一步我们创建的容器ca是在节点a上运行的,并且k8s集群中只有三台slaver:a,b,c。

我们再创建一个实例数为5的replication controller,他也会挂载这个rbd块,并且也是读写模式,创建后执行kubectl get podskubectl describe pod {podname},那么因为节点a上挂载了该rbd块,k8s会youxian将新的rc中的容器逐一调度到其他机器上(b和c)。被调度到新机器上的容器,会在启动过程中提示:
FailedSync Error syncing pod, skipping: rbd: image testdevice is locked by other nodes
意思是这个rbd块已经被别的节点锁定了(就是说节点a已经锁定了该rbd块,其他节点不能再挂载它)。而rc中剩余的pod,会直接无法调度,并提示:
pod (rbdrc-cokvq) failed to fit in any node
fit failure on node (10.126.72.31): NoDiskConflict
fit failure on node (10.126.72.32): NoDiskConflict
fit failure on node (10.126.72.33): NoDiskConflict
意思是k8s找不到‘还没有分配这个rbd块’的节点。

如果我们强制将该rc指定部署到之前的a节点上呢?通过"nodeName":{nodeIP}可以指定将rc中的pod优先部署到指定的节点上,尝试之后,发现容器可以正常运行。

结论1:rbd挂载以节点为粒度,如果某节点上的某容器以读写模式挂载了rbd块,那么该rbd块就会被该节点锁定。

如果我们新建的rc不是可读写的,而是只读的呢?

rbdrc-nu32o 1/1 Running 0 5m
rbdrc-olv14 0/1 Pending 0 5m
rbdrc-qyw2u 0/1 Pending 0 5m
rbdrc-rxmdr 1/1 Running 0 5m
rbdrc-snd3x 0/1 Pending 0 5m

我们可以看到只有两个pod正常运行。我们用kubectl describe pod {podname}检查这几个pod,发现running状态的两个pod分别被调度到了b,c节点都处于NoDiskConflict状态。

结论2:如果某节点上的某容器以读写模式挂载了rbd块,那么其他节点依然可以对这个块进行只读模式的挂载。

结论3:k8s会对挂载rbd的pod进行唯一调度,就是说若某个节点挂载了rbd块A1,k8s会将后续挂载A1的pod调度到别的节点部署。(除非强制指定)

另:ceph rbd块被挂载后,写入数据是可以很快同步的(具体多久需要调查),而读取数据只能在map后同步。这就是说,如果同时又一个读写的容器a和一个只读容器b在运行,在容器a中新写入的数据,只用把容器销毁并重启,才能同步并读到新的数据

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/26571.html

相关文章

  • Q & A | 怎样让自己更像一个 Kubernetes 存储专家?

    摘要:邢舟开源与开放标准工程院软件工程师背景回顾月日,中国社区全新改版线上课堂,邀请邢舟老师以直播的方式进行了一场以存储概览为题的线上讲解,反响热烈。为更好地为学员整合问答,中国社区特别整理了本期模块,感谢邢舟老师百忙之中进行校对。 邢舟 /IBM 开源与开放标准工程院软件工程师 背景回顾:8 月 2 日 20:00,K8sMeetup 中国社区全新改版线上课堂,邀请邢舟老师以直播的方式进行...

    guyan0319 评论0 收藏0
  • kubernetes挂载存储

    摘要:本文主要介绍如何用挂载目录。如何创建参照上目录下的范例,我们可以创建一个挂载存储的容器。到这里,就可以确定容器已经正常启动并挂载了一个的存储块。除非强制指定另块被挂载后,写入数据是可以很快同步的具体多久需要调查,而读取数据只能在后同步。 本文主要介绍如何用kubernentes挂载rbd目录。以及其中遇到的问题。有关ceph和rbd相关请自行百度。 如何创建 参照github上kube...

    alighters 评论0 收藏0
  • Kubernetes 1.12全新发布!新功能亮点解析

    摘要:距离上一次版本发布三个月之隔,是今年的第三个主要版本。证书轮换证书轮换功能现已进入状态。这一功能可以在当前证书到期时自动续订密钥和服务器的证书。更多包含许多修复和内部组件的改进,此次的更新明显侧重于稳定核心以及使现有的功能成熟。 Kubernetes1.12已于今日全新发布!Kubelet证书轮换、资源配额优先级、挂载命名空间、对Azure的增强支持等10大亮点功能,本文为你一一解读!...

    Developer 评论0 收藏0
  • 深入浅出聊聊Kubernetes存储(一):详解Kubernetes存储关键概念

    摘要:功能强大扩展性高,在许多人看来,它正在成为云计算的终极解决方案。我已经多次给具有丰富存储和云计算经验的人解释过这些问题,他们几乎都是抓耳挠腮,不明白这是怎么回事。和可能因为和使用起来太麻烦了,在年月,随着版本的发布,引入了动态纳管和的概念。 Kubernetes存储全解!你知道PV和PVC的区别吗?storage class和provisioner是什么关系?VolumeClaimTe...

    loonggg 评论0 收藏0
  • Serverless容器实例Cube的研发实践之路

    摘要:存储方面,容器目前支持了两种类型的存储可以多点读写的网络文件系统和仅单点读写的云硬盘。通过添加对协议的支持,轻量级虚拟机可以直接对接到服务,从而实现了对高性能的型云硬盘挂载和使用。Cube诞生背景 随着云原生技术的推广及落地,容器技术在企业生产环境中的使用比重越来越大。Kubernetes作为容器编排的事实标准,在企业服务中被大量采用。UCloud容器团队在2018年推出了Kubern...

    siberiawolf 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<