[Kubernetes] 通过自动扩展PVC来自动调节 (pvc-autoresizer)
抱持的问题 chí de
由于PVC数据的增加,我们只能通过以下手动操作的方式逐渐扩展:
kubectl patch pvc <pvc-name> -p '{"spec":{"resources":{"requests":{"storage":"70Gi"}}}}}'
为了减少手工工作,如果进行大规模扩展,会浪费成本,而逐步扩展则会浪费工时。
必须想办法。
考虑的事项
Kintone Engineering Blogにあった記事
コード: https://github.com/topolvm/pvc-autoresizer
RedHatのブログにあった記事
Automating Volume Expansion Management – an Operator-based Approach
コード: https://github.com/redhat-cop/volume-expander-operator
选择结果:RedHat一方面是因为Pod的重启已经内置在Operator中,但是在Kubernetes 1.15中,ExpandInUsePersistentVolumes已经成为Beta版并默认为True,所以可能不需要重新创建,我选择了第一个pvc-autoresizer。
没有必要删除并重新创建使用现有PVC的Pod或Deployment。正在使用的PVC会在文件系统扩展后立即自动可用于Pod。
PVC自动调整器是什么?
使用Prometheus来收集kubelet关于硬盘的指标,当硬盘使用量达到指定的阈值时,进行扩容卷操作。(这是beta版)
建议先阅读design.md文件,因为它更易懂,虽然README也很清晰易懂。
在Prometheus中收集存储容量指标的数据。
在Prometheus中获取kubelet通过ubelet收集的volume stats的指标:
– kubelet_volume_stats_available_bytes
– kubelet_volume_stats_capacity_bytes
2. 部署pvc-autoresizer
helm repo add pvc-autoresizer https://topolvm.github.io/pvc-autoresizer
helm repo update
helm install --create-namespace --namespace pvc-autoresizer pvc-autoresizer pvc-autoresizer/pvc-autoresizer --set "controller.args.prometheusURL=http://prometheus-operated.monitoring.svc:9090"
有以下选项:
– controller.args.prometheusURL
– controller.replicas
– controller.args.additionalArgs
详细信息可在charts/pvc-autoresizer中找到。
2. 更改 StorageClass
只需要将 resize.topolvm.io/enabled: “true” 添加到注释中。
在中文本地化的情况下,对以下内容进行释义(只提供一种选择):
(或使用“pvc-autoresizer”命令并将“–no-annotation-check=true”参数设置为“true”来启动)
唯一的条件是:必须将allowVolumeExpansion设置为true。
3. PVC更改
在注释中指定扩展的条件:
– resize.topolvm.io/storage_limit(必填)例如,200Gi
– resize.topolvm.io/threshold(可选的%或Gi)默认为10%
– resize.topolvm.io/increase(可选的%或Gi)默认为10%
当存储空间达到多少时(阈值),最大可以扩展到多少(存储限制),可以增加多少(增量),非常容易理解!
然而有以下条件限制:
– 必须是volumeMode为Filesystem
– spec.storageClassName必须包含上述的StorageClass
沉迷点
PVCのspec.storageClassName <- StatefulSetなどでPersistentVolumeClaimなどでAnnotationだけ書いてるとこのフィールドがなくてStorageClassにたいしてPVCを取得するところで対象にならないので注意! kubelet_volume_stats_available_bytesとkubelet_volume_stats_capacity_bytesのメトリクスをPrometheus OperatorのServiceMonitorで取得していると exposed_namespace にPVCのNamespaceが格納されるが、pvc-autoresizerではnamespaceを見るので、間違ったものを見るためにif _, ok := vsMap[namespacedName]; !okで弾かれるので注意 これらを探すのにLogが少なくてDebugが大変! -> 自分でForkしてログ足してデプロイして始めて発見した。
谢谢
因为发生了很多事情,但是我非常感谢那些能够坚定不移地进行创作和分享这样便利的东西的人们!
请参考
-
- https://blog.kintone.io/entry/pvc-autoresizer
-
- https://github.com/topolvm/pvc-autoresizer
Automating Volume Expansion Management – an Operator-based Approach
https://github.com/redhat-cop/volume-expander-operator