内容简介:从v1.11开始,kubernetes默认开启resize feature 和 PersistentVolumeClaimResize admission controller,如果用户创建的存储卷容量不够,可以进行扩容,原有数据不会丢失。目前支持resize的存储卷AWS-EBS, GCE-PD, Azure Disk, Azure File, Glusterfs, Cinder, Portworx, 以及 Ceph RBD。其中:以下以基于Ceph RBD的Storage class为例,具体说明PVC
从v1.11开始,kubernetes默认开启resize feature 和 PersistentVolumeClaimResize admission controller,如果用户创建的存储卷容量不够,可以进行扩容,原有数据不会丢失。目前支持resize的存储卷AWS-EBS, GCE-PD, Azure Disk, Azure File, Glusterfs, Cinder, Portworx, 以及 Ceph RBD。其中:
- 块文件系统,如 GCE-PD, AWS-EBS, Azure Disk, Cinder, and Ceph RBD 需要文件系统扩容。当Pod重启时,k8s会自动完成扩容的工作
- NAS文件系统,如 Glusterfs and Azure File) 不需要重启Pod,因为他们不需要文件系统扩容
以下以基于Ceph RBD的Storage class为例,具体说明PVC扩容功能。
1、扩容前准备
1、管理员需要配置storage class,开启允许扩容选项 allowVolumeExpansion
allowVolumeExpansion: true kind: StorageClass metadata: name: sata
2、制作 kube-controller-manager 镜像,增加rbd命令
由于扩容是kube-controller-manager完成的,而我们平台上是以容器形式运行的,因此需要容器镜像中附带rbd命令,否则扩容时会遇到如下错误提示:
Warning VolumeResizeFailed 3m (x75 over 4h) volume_expand Error expanding volume "default/resize" of plugin kubernetes.io/rbd : rbd info failed, error: executable file not found in $PATH
我制作了kubernetes v1.11.1 + ceph 10版本的controller-manager镜像 silenceshell/kube-controller-manager-amd64:v1.11.1-ceph-10
,您也可以自行制作。
制作方法很简单:
- 基于centos7基础镜像
-
COPY
kube-controller-manager
二进制文件到/usr/local/bin
目录 -
yum install ceph-common ceph-fs-common
即可。注意要使用ceph集群对应的版本。
3、更新 kube-controller-manager 编排文件的image以升级 controller-manager Pod
2、扩容操作
1、修改PVC的size
命令行使用kubectl edit pvc xxx,直接修改PVC的容量即可。
apiVersion: v1 kind: PersistentVolumeClaim metadata: annotations: volume.beta.kubernetes.io/storage-provisioner: ceph.com/rbd name: resize spec: resources: requests: storage: 5Gi storageClassName: sata
之后PVC会进入 FileSystemResizePending
状态,等待Pod重启。
apiVersion: v1 kind: PersistentVolumeClaim metadata: annotations: volume.beta.kubernetes.io/storage-provisioner: ceph.com/rbd name: resize spec: resources: requests: storage: 6Gi storageClassName: sata status: accessModes: - ReadWriteOnce capacity: storage: 5Gi conditions: - lastProbeTime: null lastTransitionTime: 2019-04-14T03:51:36Z message: Waiting for user to (re-)start a pod to finish file system resize of volume on node. status: "True" type: FileSystemResizePending phase: Bound
2、重启挂载该PVC的Pod
之后,controller manager 会调用 rbd resize命令,更新rbd image的大小,并重新挂载卷到Pod上去。
3、登录新的Pod的shell,查看挂载的rbd卷大小;查看PVC的status.capacity.storage 字段,已更新为新的容量。
3、在线扩容
1.11.1版本还提供了一个alpha的特性: ExpandInUsePersistentVolumes,即不需要容器即可扩容PVC扩容。当然了,PVC还是要管理Pod的,即需要被Pod挂载。
支持在线扩容的PVC有:GCE-PD, AWS-EBS, Cinder, and Ceph RBD。
该特性默认不开启,需要手工打开,后面会实践了我再补充。
4、cephfs可以扩容吗?
除了RBD,我们还会用cephfs PVC,但kubernetes本身是不支持对cephfs的PVC做扩容操作的。
实际上cephfs本身是支持扩容的,我们是ceph-fuse方式挂载的cephfs卷,可以 setfattr -n ceph.quota.max_bytes
方式设置目录的quota,然后重启Pod就可以生效了。
这个功能需要修改kubernetes本身的代码。从文件类型来说,cephfs类似glusterfs,可以参考glusterfs的实现。
Ref:
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 别逗了,你真以为 MySQL 分库分表支持服务无限扩容吗?
- DB 分库分表(5):一种支持自由规划无须数据迁移和修改路由代码的 Sharding 扩容方案
- 一文读懂区块链链上扩容和链下扩容
- golang内存扩容
- Sharding扩容方案-2(实现)
- golang 切片扩容的探讨
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
PHP高级开发技术与应用
曹铁群、孙一江、张永学 / 清华大学出版社 / 2002-5-1 / 32.00
作为一本介绍PHP高级开发技术的书籍,本书并不像一般介绍PHP语言的书籍那样讲述大量的语法规则,罗列大量的函数,而是着眼于PHP在Web中的实际应用,特别是PHP对最新技术的支持,比如WAP技术、XML技术等。 本书涉及到的内容主要有:高级环境配置、高级语法和应用、正则表达式、面向对象技术、高级图像技术、用PHPLIB实现模板的处理、用PHPDoc实现文档的自动生成、PHP与组件技术、PH......一起来看看 《PHP高级开发技术与应用》 这本书的介绍吧!