Q & A | 怎样让自己更像一个 Kubernetes 存储专家? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
caicloud2015

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

  •  
  •   caicloud2015 Aug 13, 2017 3248 views
    This topic created in 3178 days ago, the information mentioned may be changed or developed.

    邢舟 /IBM 开源与开放标准工程院软件工程师

    背景回顾:8 月 2 日 20:00,K8sMeetup 中国社区全新改版线上课堂,邀请邢舟老师以直播的方式进行了一场以《 Kubernetes 存储概览 & Volume Provisioner 》为题的线上讲解,反响热烈。为更好地为学员整合问答,K8sMeetup 中国社区特别整理了本期 Q & A 模块,感谢邢舟老师百忙之中进行校对。

    Kubernetes 存储概览

    Kubernetes 存储的主要应用场景

    1. @青春$:本地挂载卷,比如一个 node 上启动俩个 nginx 怎么做?

    A:两个 nginx 实例么?如果是的话,貌似需要配置 scheduler 让其分配到同一个节点上,比设置 node affinity 等选项。

    Kubernetes 存储模块

    ( ̄^ ̄): 创建 pod 的 yaml 文件有没有统一管理的工具?

    A:如果您是指编辑 yaml 的话,目前我都是 vim 编辑的,其他同事有好的编辑工具欢迎共享出来。如果是指保存的话,可以在数据库或者对象存储里统一保管,Kubernetes 有一定的版本保存功能(如 deployment 等的 rolling update ),但完全的版本管理需要自己设置版本管理环境单独保存。

    华: 存储容量的配额管理怎么做?

    A:目前 Kubernetes 的配额管理统一通过 resourceQuota 对象完成,不过存储容量的配额管理,尤其是本地存储配额的管理,目前 Kubernetes 还未实现。

    Sa.#:本地只能实现临时存储吗?

    A:不是的,在 Kubernetes 1.7 后出现了 LocalStorage 这种类型,可以作为 PV source 出现,相关文档在: https://kubernetes.io/docs/concepts/storage/volumes/#local

    欢型悠悠 too:

    1. 如何实现共享存储?
    2. 如何实现共享存储,将一块盘给多个 pod 用?

    A:只要后台存储支持挂载到多个节点,那么在 pod spec 中引用相应的存储对象就可以实现将一个块设备给多个 pod 使用。

    Leon Shi: 存储是怎样实现多租户隔离?

    A:这个问题社区现在正在讨论,对 LocalStorage 可能有一些 proposal, 不过目前基本没什么实现,大家可以关注一下社区的进展。

    逗号:pod scaling 的时候用的是同一个 volume 吗?

    A:如果是远程网络 volume 支持 RWX 的,是可以使用同一个 volume 的,如果是本地临时存储或者不支持多挂载的,是不支持的。

    Michael: 我现在有个需求就是,同类型的共享一个目录?这个有什么好的办法吗?

    A:对映射目录的问题,可以查看官方文档,目前仅 project volume 类型支持一定程度的同一目录映射,文档: https://kubernetes.io/docs/concepts/storage/volumes/#types-of-volumes

    JackShan:

    1. Kubernetes 下面块设备一般使用哪种?
    2. 保障 docker 的安全都有哪些措施?

    A:Kubernetes 的块设备是以插件形式提供的,目前已经提供了几十种主流存储平台的插件。Kubernetes 官方插件列表请参考我上周分享中的 PPT,里面有一页专门介绍。 想要看具体的信息,您也可以参考文档: https://kubernetes.io/docs/concepts/storage/volumes/#types-of-volumes 在 Docker 安全这边主要是权限方面的管理,可以参考以下社区 ticket: https://github.com/kubernetes/community/pull/180

    尼克: pod 的存储会不会跟随 pod 在 nodes 上的分布一样分布到不同的 node?

    A:是的,需要挂载到 pod 所在的节点(针对远程网络存储,本地存储无所谓)

    Michael: 现在社区有什么好的办法针对存储这块吗?有什么比较成熟的?

    A:您可以看一下社区的存储插件列表,选择一个存储解决方案。但 Kubernetes 目前在存储这一块只实现了最基础的功能。

    马诗洁:我们的 resize 的话,这个会影响到现有的逻辑卷不,是备份原有数据然后重新划分内存,然后数据恢复吗?还是说直接添加内存?

    A:resize 问题请参考上面类似的问题,目前社区只有一个 proposal 计划支持增加磁盘尺寸的。目前选择的做法是直接动态扩大原来快设备的存储,然后再改文件系统。

    风云:attach detach manager 和 volume manager 怎么一起工作,都会挂载 volume 吗,还是有分工?讲师好像说过有个参数可以去分工? A:是的,但 volume manager 也可以做 attach/detach 的工作。通过 kubelet 的参数 “--enable-controller-attach-detach=true ” 区分。

    H~Z~G:怎么改变 Kubernetes 默认存储路径? A:存储路径是在 Container Spec 中指定的,然后 Kubernetes 会通过 Volume Manager 和 Volume Plugin 实现 attach 和 mount。

    Yongkui:volume plugin 是各个厂商自己写的?

    A:官方提供了一组插件列表,请参见 PPT 中的总结。也可自己扩展,主要通过两个接口: 1.external-storage-provisioner( https://github.com/kubernetes-incubator/external-storage) 2.FlexVolume( https://kubernetes.io/docs/concepts/storage/volumes/#flexvolume)

    牛海朋: 应用的配置文件是存在 volume 还是 configmap 合适,有啥不一样吗?

    A:一般推荐是使用 configmap, secret 或者 downward API 来完成 app 配置,这个过程可以有 Kubernetes 将配置文件注入到 pod 的文件系统设置是环境变量里面。如果走 volume,应该需要您将配置信息提前准备好放在 PV 上。

    阿星:

    1. 卷的生命周期里面有个 using 状态,可以从 api 里面找到这个状态吗?我看到过 bound 的状态。
    2. 社区会考虑记录 PV 被那些 pod 使用吗?从 pod 里可以看到使用了那些卷,不知道能不能从 PV 看到该 PV 被那些 pod 使用了?

    A:我没看到过 using 这个状态,PV 的状态基本就是 pending, available, bound,released 以及 failed。可以从 node 对象查看每个 node 有哪些 volume attach,从 pod 对象可以查看到需要使用的 pv 信息,反向的应该没有(或者哪位同事熟悉这块代码可以指正一下,谢谢)

    Kubernetes 存储目前存在的一些问题

    官官久久: Accessmodes 的 RWO RWX 模式和 pod 的调度有关吗?

    A:目前没有,但如果要做 RWO 和 RWX 的检查的话,需要从 scheduler 开始做。

    keon: Accessmode 不是有单节点读写,多节点只读,多节点读写吗?

    A:目前的 AccessMode 包括:ReadOnlyMany(ROX), ReadWriteMany(RWX)和 RWO(ReadWriteOnly)。详细的 AccessMode 介绍,推荐您去参照链接中的文档: https://kubernetes.io/docs/concepts/storage/persistent-volumes/

    阿星:AccessMode 是不是只用在 PV 和 PVC 的 bind 过程中,跟底层的存储特性没有关联?

    A:是的,目前 Kubernetes 没有在实际 attach 和 mount 过程中执行 AccessMode 检查。

    Infei:

    1. RC 的 PV 挂载如何实现数据的一致性?
    2. pod 重新挂载 PV,是检查 PV 的状态吗? pod 故障时 PV 的状态会改变吗?

    A:多 pod 之间的数据一致性主要通过同一磁盘挂载到多个不同 pod 以及依赖存储平台的解决方案实现,目前这部分内容实现的比较弱,但可以保证 pod 故障时数据不受影响,在 pod 重启后,volume 会重新挂载到 pod。

    K8s Volume Provisioner 部分代码实现

    PV、PVC & StorageClass

    H~Z~G:PV、PVC 是什么?

    A:PV 和 PVC 是 Kubernetes 中的两种资源,PV(Persistent Volume)代表一块实际的后台块存储设备; PVC ( Persistent Volume Claim )代表的是 Pod 用户对块存储的实际需求,PV 和 PVC 的绑定完成了实际块存储设备和存储需求的绑定。

    董明心: PV 和 PVC 一定是成对出现的么?

    A:不一定,但绑定时是 1-1 绑定的。可以通过 kubectl 命令单独创建 PV 和 PVC。

    小清、刘冲:PVC 和 PV 是一对一还是一对多?

    A:PV 和 PVC 是一对一的关系,但是 PV 和 PVC 都可以通过 Kubectl create 来单独创建,未绑定的 PV 和 PVC 一般处于 available 和 Pending 状态。

    lota: 先创建 PVC?

    A:没有顺序要求,都可以通过 kubectl create 命令分别创建。

    Chao: PVC 找 PV 是随机找的,还是有相应匹配规则?可以让 PVC 绑定到指定 PV 吗?

    A:PVC 可以指定需要绑定的 volume, 通过在 PVC 的 Spec 里面定义实现。但是有一种情况是预定的 PV 可能会被其他 PVC 绑定。匹配规则主要是在 findBestMatch 方法中进行的,主要依据是两方面:AccessMode 和磁盘容量,并满足最小匹配原则。

    it2911: PVC 和 PV 的 resize 问题上,就 StroageClass 的扩容请问是否目前也是无解?

    A:对,这个问题目前确实无解。一般两种方案,一种是创建大的 volume,然后 data migration, 另一种就是现在社区想采用的,直接 resize,然后更新 fs, 但第二种我觉得局限性有点大,很多插件都不支持。

    阿仆来耶:为什么 PV 创建的 yaml 中需要指定 StroageClass ?

    A:我理解是 PVC 需要指定 StroageClass? PVC 并不一定需要指定 StroageClass。StroageClass 我的理解主要为了存储的分类(如根据 io 等指标)以及 dynamic provisioning。PVC 可以直接指定 PV 的名称,也可以通过三种其他方式使用 StroageClass: (1). 不指定,使用默认 StroageClass ; (2).指定空的 StroageClass, 让 Kubernetes 自动匹配合适的 PV ; (3).指定一个 StroageClass, 使用 in-tree 或者 out-of-tree provisioner 创建块设备。

    欧帝:请问老师 readwriteonce 和 readwritemany 的区别是什么?什么场景能用 many ?

    A:就是同一块块设备是否能够同时挂载到多个节点上,主要是为了应用程序之间共享数据或者协同编辑数据用的。

    柯蓬:

    1. 请问 ReadWriteMany 什么场景下会用到?需要特定的 PV 来支持吗?
    2. 有没有可以推荐的分布式 volume ?使用起来性能如何?

    A:就是需要多个 pod 同时读写一个磁盘的场合,一般用于应用程序间的数据共享和协同操作。AccessMode 是需要后面存储平台支持的,即只有存储平台中的 volume 支持被挂载到多个节点时才支持,如 IBM SL Block, 目前就只能支持一个设备挂载到一个节点上。

    Out of Tree Provisioner 的基本实现

    张晓宇 @serendipity:Cephfs 更改挂载方式 fuse 可以用 out of tree 方式吗?

    A:Cephfs 应该有个 out-of-tree provisioner, 链接在: https://github.com/kubernetes-incubator/external-storage/tree/master/ceph, 有用过的同事可以分享一下,谢谢。

    其它

    Green:Kubernetes 与 Mesos 到底是不是一个最佳实践呢?

    A:目前 IBM 的实践来看,Mesos on Kubernetes 或者 Kubernetes on mesos 都并不是好的选择。Kubernetes 社区也正在逐渐淡化两者之间的集成关系,主要原因在于带来的复杂性过高,用户需要同时把握 Kubernetes、Mesos 以及两者之间的集成关系,一旦出现问题,很难诊断和解决。

    Zing:现在 Kubernetes 在生产环境的实践情况怎么样?

    A:因为我没有参与过 Kubernetes 的实际生产部署,所以目前不了解实际的生产实践。但我可以邀请 IBM 或者其他有生产实践的企业嘉宾给大家做实际部署的分享,在实际部署方面,相信 Kubernetes 的坑还是比较多的。如果大家感兴趣,请把感兴趣的话题发到群里以便我们安排下一步的课程。

    No Comments Yet
    About     Help     Advertise     Blog     API     FAQ     Solana     1169 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 63ms UTC 23:46 PVG 07:46 LAX 16:46 JFK 19:46
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86