文档首页/ 云容器引擎 CCE/ API参考/ 附录/ 默认数据盘空间分配说明
更新时间:2024-10-31 GMT+08:00
分享

默认数据盘空间分配说明

本章节将详细介绍节点数据盘空间分配的情况,以便您根据业务实际情况配置数据盘大小。

设置默认数据盘空间分配

  • v1.23.18-r0、v1.25.13-r0、v1.27.10-r0、v1.28.8-r0、v1.29.4-r0以下版本的集群中,节点会添加一块默认数据盘供容器运行时和Kubelet组件使用,您可以自定义默认数据盘的空间分配
  • v1.23.18-r0、v1.25.13-r0、v1.27.10-r0、v1.28.8-r0、v1.29.4-r0及以上版本的集群中,如果“系统组件存储”选择“数据盘”,节点才会添加一块默认数据盘供容器运行时和Kubelet组件单独使用,您可以自定义默认数据盘的空间分配。

在创建节点时,您可在存储配置中,单击“展开高级配置”,自定义默认数据盘的空间分配

图1 设置数据盘空间分配

  • 容器引擎空间分配
    • 指定磁盘空间:CCE将数据盘空间默认划分为两块,一块用于存放容器引擎 (Docker/Containerd) 工作目录、容器镜像的数据和镜像元数据;另一块用于Kubelet组件和EmptyDir临时存储等。容器引擎空间的剩余容量将会影响镜像下载和容器的启动及运行。
      • 容器引擎和容器镜像空间(默认占90%):用于容器运行时工作目录、存储容器镜像数据以及镜像元数据。
      • Kubelet组件和EmptyDir临时存储(默认占10%):用于存储Pod配置文件、密钥以及临时存储EmptyDir等挂载数据。

      当“容器引擎和容器镜像空间”和“Kubelet组件和EmptyDir临时存储空间”分配比例之和不满100%时,剩余空间将分配给用户数据使用,您可以将其挂载到指定路径下。挂载路径请填写业务目录路径,不可设置为空或根目录等操作系统关键路径。

    • 共享磁盘空间:v1.21.10-r0、v1.23.8-r0、v1.25.3-r0及之后版本的集群中,CCE使用的数据盘支持采用容器引擎和Kubelet共享磁盘空间的方式,即不再划分容器引擎 (Docker/Containerd) 和Kubelet组件的空间。
  • Pod容器空间分配:即容器的basesize设置,每个工作负载下的容器组 Pod 占用的磁盘空间设置上限(包含容器镜像占用的空间)。合理的配置可避免容器组无节制使用磁盘空间导致业务异常。建议此值不超过容器引擎空间的 80%。该参数与节点操作系统和容器存储Rootfs相关,部分场景下不支持设置。详情请参见操作系统与容器存储Rootfs对应关系
  • 写入模式:
    • 线性:线性逻辑卷是将一个或多个物理卷整合为一个逻辑卷,实际写入数据时会先往一个基本物理卷上写入,当存储空间占满时再往另一个基本物理卷写入。
    • 条带化:有两块以上数据盘时才可支持选择条带化模式。创建逻辑卷时指定条带化,当实际写入数据时会将连续数据分成大小相同的块,然后依次存储在多个物理卷上,实现数据的并发读写从而提高读写性能。条带化模式的存储池不支持扩容。

容器引擎空间分配

对于容器引擎和Kubelet共享磁盘空间的节点,容器存储Rootfs为OverlayFS类型,数据盘空间分配详情请参见容器引擎和Kubelet共享磁盘空间说明

对于容器引擎和Kubelet不共享磁盘空间的节点,数据盘根据容器存储Rootfs不同具有两种划分方式(以100G大小为例):Device Mapper类型OverlayFS类型。不同操作系统对应的容器存储Rootfs请参见操作系统与容器存储Rootfs对应关系

  • Device Mapper类型存储Rootfs
    其中默认占90%的容器引擎和容器镜像空间又可分为以下两个部分:
    • 其中/var/lib/docker用于Docker工作目录,默认占比20%,其空间大小 = 数据盘空间 * 90% * 20%
    • thinpool用于存储容器镜像数据、镜像元数据以及容器使用的磁盘空间,默认占比为80%,其空间大小 = 数据盘空间 * 90% * 80%

      thinpool是动态挂载,在节点上使用df -h命令无法查看到,使用lsblk命令可以查看到。

    图2 Device Mapper类型容器引擎空间分配
  • OverlayFS类型存储Rootfs

    相比Device Mapper存储引擎,没有单独划分thinpool,容器引擎和容器镜像空间(默认占90%)都在/var/lib/docker目录下。

    图3 OverlayFS类型容器引擎空间分配

Pod容器空间分配

自定义Pod容器空间(basesize)设置与节点操作系统和容器存储Rootfs相关(容器存储Rootfs请参见操作系统与容器存储Rootfs对应关系):

  • Device Mapper模式下支持自定义Pod容器空间(basesize)配置,默认值为10GiB。
  • OverlayFS模式默认不限制Pod容器空间大小。

配置Pod容器空间(basesize)时,需要同时考虑创建节点时的最大实例数配置。理想情况下,容器引擎空间需要大于容器使用的磁盘总空间,即:容器引擎和容器镜像空间(默认占90%) > 容器数量 * Pod容器空间(basesize)。否则,可能会引起节点分配的容器引擎空间不足,从而导致容器启动失败。

图4 创建节点时的最大实例数配置

对于支持配置basesize的节点,尽管可以限制单个容器的主目录大小(开启时默认为10GiB),但节点上的所有容器还是共用节点的thinpool磁盘空间,并不是完全隔离,当一些容器使用大量thinpool空间且总和达到节点thinpool空间上限时,也会影响其他容器正常运行。

另外,在容器的主目录中创删文件后,其占用的thinpool空间不会立即释放,因此即使basesize已经配置为10GiB,而容器中不断创删文件时,占用的thinpool空间会不断增加一直到10GiB为止,后续才会复用这10GiB空间。如果节点上的容器数量*basesize > 节点thinpool空间大小,理论上有概率出现节点thinpool空间耗尽的场景。

操作系统与容器存储Rootfs对应关系

表1 CCE集群节点操作系统与容器引擎对应关系

操作系统

容器存储Rootfs

自定义Pod容器空间(basesize)

CentOS 7.x

v1.19.16以下版本集群使用Device Mapper

v1.19.16及以上版本集群使用OverlayFS

Rootfs为Device Mapper且容器引擎为Docker时支持自定义Pod容器空间,默认值为10G。

Rootfs为OverlayFS时不支持自定义Pod容器空间。

EulerOS 2.3

Device Mapper

仅容器引擎为Docker时支持自定义Pod容器空间,默认值为10G。

EulerOS 2.5

Device Mapper

仅容器引擎为Docker时支持自定义Pod容器空间,默认值为10G。

EulerOS 2.8

v1.19.16-r2以下版本集群使用Device Mapper

v1.19.16-r2及以上版本集群使用OverlayFS

Rootfs为Device Mapper且容器引擎为Docker时支持自定义Pod容器空间,默认值为10G。

Rootfs为OverlayFS且容器引擎为Docker时支持自定义Pod容器空间,默认值为不限制。

EulerOS 2.9

OverlayFS

v1.19.16-r0、v1.21.3-r0、v1.23.3-r0及以上的集群版本中,Docker支持自定义Pod容器空间,默认值为不限制。

集群版本为v1.23.14-r0、v1.25.9-r0、v1.27.6-r0、v1.28.4-r0及以上时,containerd支持自定义Pod容器空间,默认值为不限制。

v1.19.16-r0、v1.21.3-r0、v1.23.3-r0以前的集群版本不支持自定义Pod容器空间。

EulerOS 2.10

OverlayFS

集群版本为v1.23.14-r0、v1.25.9-r0、v1.27.6-r0、v1.28.4-r0以下时,仅容器引擎为Docker时支持自定义Pod容器空间,默认值为不限制。

集群版本为v1.23.14-r0、v1.25.9-r0、v1.27.6-r0、v1.28.4-r0及以上时,Docker和containerd均支持自定义Pod容器空间,默认值为不限制。

Ubuntu 18.04

OverlayFS

不支持自定义Pod容器空间。

Ubuntu 22.04

OverlayFS

不支持自定义Pod容器空间。

Huawei Cloud EulerOS 1.1

OverlayFS

不支持自定义Pod容器空间。

Huawei Cloud EulerOS 2.0

OverlayFS

集群版本为v1.23.14-r0、v1.25.9-r0、v1.27.6-r0、v1.28.4-r0以下时,仅容器引擎为Docker时支持自定义Pod容器空间,默认值为不限制。

集群版本为v1.23.14-r0、v1.25.9-r0、v1.27.6-r0、v1.28.4-r0及以上时,Docker和containerd均支持自定义Pod容器空间,默认值为不限制。

表2 CCE Turbo集群节点操作系统与容器引擎对应关系

操作系统

容器存储Rootfs

自定义Pod容器空间(basesize)

CentOS 7.x

OverlayFS

不支持自定义Pod容器空间。

Ubuntu 18.04

OverlayFS

不支持自定义Pod容器空间。

Ubuntu 22.04

OverlayFS

不支持自定义Pod容器空间。

EulerOS 2.9

OverlayFS

Rootfs为OverlayFS且仅容器引擎为Docker时支持自定义Pod容器空间,默认值为不限制。集群版本为v1.23.14-r0、v1.25.9-r0、v1.27.6-r0、v1.28.4-r0及以上时,Docker和containerd均支持自定义Pod容器空间。

EulerOS 2.10

弹性云服务器-物理机使用Device Mapper

Rootfs为Device Mapper且容器引擎为containerd时支持自定义Pod容器空间,默认值为10G。

Huawei Cloud EulerOS 1.1

OverlayFS

不支持自定义Pod容器空间。

Huawei Cloud EulerOS 2.0

OverlayFS

集群版本为v1.23.14-r0、v1.25.9-r0、v1.27.6-r0、v1.28.4-r0以下时,仅容器引擎为Docker时支持自定义Pod容器空间,默认值为不限制。

集群版本为v1.23.14-r0、v1.25.9-r0、v1.27.6-r0、v1.28.4-r0及以上时,Docker和containerd均支持自定义Pod容器空间,默认值为不限制。

镜像回收策略说明

当容器引擎空间不足时,会触发镜像垃圾回收。

镜像垃圾回收策略只考虑两个因素:HighThresholdPercent 和 LowThresholdPercent。 磁盘使用率超过上限阈值(HighThresholdPercent,默认值为80%)将触发垃圾回收。 垃圾回收将删除最近最少使用的镜像,直到磁盘使用率满足下限阈值(LowThresholdPercent,默认值为70%)。

容器引擎空间大小配置建议

  • 容器引擎空间需要大于容器使用的磁盘总空间,即:容器引擎空间 > 容器数量 * Pod容器空间(basesize)
  • 容器业务的创删文件操作建议在容器挂载的本地存储(如emptyDir、hostPath)或云存储的目录中进行,这样不会占用thinpool空间。其中Emptydir使用的是kubelet空间,需要规划好kubelet空间的大小。
  • 可将业务部署在使用OverlayFS存储模式的节点上(请参见操作系统与容器存储Rootfs对应关系),避免容器内创删文件后占用的磁盘空间不立即释放问题。

容器引擎和Kubelet共享磁盘空间说明

容器引擎和Kubelet共享磁盘空间即在节点上不再划分容器引擎 (Docker/Containerd) 和Kubelet组件的空间,二者共用磁盘空间。

  • 容器引擎和Kubelet共享磁盘空间仅v1.21.10-r0、v1.23.8-r0、v1.25.3-r0及以上的集群支持。
  • 容器存储Rootfs为OverlayFS类型时支持共享磁盘空间,Device Mapper类型不支持。
  • 若您在集群中安装了npd插件,请将插件升级至1.18.10版本及以上,否则会产生误报警。
  • 若您在集群中安装了log-agent插件,请将插件升级至1.3.0版本及以上,否则会影响日志采集。
  • 若您在集群中安装了ICAgent,请将ICAgent升级至5.12.140版本及以上,否则会影响日志采集。查看或升级ICAgent版本请参见CCE接入
图5 共享磁盘空间配置

对于共享磁盘空间的节点,容器存储Rootfs为OverlayFS类型。节点创建完成后,数据盘空间(以100G大小为例)不再划分容器引擎和容器镜像空间和Kubelet组件空间,均在/mnt/paas目录下,并通过两个文件系统区分:

  • dockersys:/mnt/paas/runtime
  • kubernetes:/mnt/paas/kubernetes/kubelet
图6 共享数据盘空间分配

相关文档