2.3. 临时存储管理

集群管理员可以通过设置配额在非终端状态的所有 Pod 中定义临时存储的限制范围,及临时存储请求数量,来管理项目中的临时存储。开发人员也可以在 Pod 和容器级别设置这个计算资源的请求和限值。

您可以通过指定请求和限值来管理本地临时存储。pod 中的每个容器可以指定以下内容:

  • spec.containers[].resources.limits.ephemeral-storage
  • spec.containers[].resources.requests.ephemeral-storage

临时存储的限制和请求以字节数量来衡量。您可以使用以下后缀之一将存储表示为普通整数或固定点号:E、P、T、G、M、k。您还可以使用两的指数:Ei、Pi、Ti、Gi、Mi Ki。例如,以下数量全部代表大约相同的值:128974848、129e6、129M 和 123Mi。后缀的大小写非常重要。如果您指定了 400m 的临时存储,这个请求 0.4 字节,而不是 400 mebibytes 字节 (400Mi) 或 400 megabytes (400M),这可能是预期的。

以下示例显示了有两个容器的 pod。每个容器请求 2GiB 本地临时存储。每个容器限制为 4GiB 本地临时存储。因此,pod 的请求为 4GiB 本地临时存储,限值为 8GiB 本地临时存储。

apiVersion: v1
kind: Pod
metadata:
  name: frontend
spec:
  containers:
  - name: app
    image: images.my-company.example/app:v4
    resources:
      requests:
        ephemeral-storage: "2Gi" 1
      limits:
        ephemeral-storage: "4Gi" 2
    volumeMounts:
    - name: ephemeral
      mountPath: "/tmp"
  - name: log-aggregator
    image: images.my-company.example/log-aggregator:v6
    resources:
      requests:
        ephemeral-storage: "2Gi" 3
    volumeMounts:
    - name: ephemeral
      mountPath: "/tmp"
  volumes:
    - name: ephemeral
      emptyDir: {}
1 3
请求本地临时存储。
2
本地临时存储的限制。

pod 规格中的此设置会影响调度程序对调度 pod 的决定,以及 kubelet 如何驱除 pod。首先,调度程序确保调度容器的资源请求总和小于节点的容量。在这种情况下,只有在可用临时存储(可分配资源)超过 4GiB 时,pod 才能分配给节点。

其次,在容器级别上,因为第一个容器设置了资源限值,kubelet 驱除管理器会测量此容器的磁盘用量,并在此容器的存储使用量超过其限制时驱除 pod (4GiB)。在 pod 级别,kubelet 通过添加该 pod 中所有容器的限制来达到总体 pod 存储限制。在本例中,pod 级别的总存储使用量是所有容器的磁盘用量总和,以及 pod 的 emptyDir 卷。如果这个总用量超过整个 pod 存储限制 (4GiB),则 kubelet 也会标记 pod 进行驱除。

有关为项目定义配额的详情,请参考每个项目的配额设置