2.3. 临时存储管理
集群管理员可以通过设置配额在非终端状态的所有 Pod 中定义临时存储的限制范围,及临时存储请求数量,来管理项目中的临时存储。开发人员也可以在 Pod 和容器级别设置这个计算资源的请求和限值。
您可以通过指定请求和限值来管理本地临时存储。pod 中的每个容器可以指定以下内容:
-
spec.containers[].resources.limits.ephemeral-storage
-
spec.containers[].resources.requests.ephemeral-storage
2.3.1. 临时存储限制和请求单元
临时存储的限制和请求以字节数量来衡量。您可以使用以下后缀之一将存储表示为普通整数或固定点号:E、P、T、G、M、k。您还可以使用两的指数:Ei、Pi、Ti、Gi、Mi Ki。
例如,以下数量全部代表大约相同的值:128974848、129e6、129M 和 123Mi。
每个字节数量的后缀都是区分大小写的。务必使用正确的问题单。使用区分大小写的 "M",如在 "400M" 中使用的,将请求设置为 400MB。使用区分大小写的 "400Mi" 来请求 400 mebibytes。如果您为临时存储指定 "400m",则存储请求仅为 0.4 字节。
2.3.2. 临时存储请求和限值示例
以下示例配置文件显示了一个具有两个容器的 pod:
- 每个容器请求 2GiB 本地临时存储。
- 每个容器限制为 4GiB 本地临时存储。
在 pod 级别,kubelet 通过添加该 pod 中所有容器的限制来达到总体 pod 存储限制。
-
在本例中,pod 级别的总存储使用量是所有容器的磁盘用量总和,以及 pod 的
emptyDir
卷。 - 因此,pod 的请求为 4GiB 本地临时存储,限值为 8GiB 本地临时存储。
-
在本例中,pod 级别的总存储使用量是所有容器的磁盘用量总和,以及 pod 的
使用配额和限值的临时存储配置示例
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" limits: ephemeral-storage: "4Gi" volumeMounts: - name: ephemeral mountPath: "/tmp" volumes: - name: ephemeral emptyDir: {}
2.3.3. 临时存储配置会影响 pod 调度和驱除
pod 规格中的设置会影响调度程序如何决定调度 pod 以及 kubelet 驱除 pod。
- 首先,调度程序确保调度容器的资源请求总和小于节点的容量。在这种情况下,只有在可用临时存储(可分配资源)超过 4GiB 时,pod 才能分配给节点。
- 其次,在容器级别上,因为第一个容器设置了资源限值,kubelet 驱除管理器会测量此容器的磁盘用量,并在此容器的存储使用量超过其限制时驱除 pod (4GiB)。如果总用量超过总体 pod 存储限制(8GiB),kubelet 驱除管理器也会标记驱除 pod。