emptyDir Volume 限制
对于emptyDir类型的卷,可以设置 emptyDir.sizeLimit,比如设置为 100Mi。
apiVersion: v1 kind: Pod metadata: name: pod-vol-empty-dir-limit spec: containers: - name: count image: busybox:latest args: [/bin/sh, -c, 'while true; do dd if=/dev/zero of=/cache/$(date "+%s").out count=1 bs=5MB; sleep 1; done'] volumeMounts: - mountPath: /cache name: cache-volume volumes: - name: cache-volume emptyDir: sizeLimit: 100Mi
稍等几分钟,然后查询Pod的事件:
可以看到 kubelet 发现 emptyDir volume 超出了100Mi的限制,然后就把 Pod 关掉了。
临时数据的总量限制
对于所有类型的临时性本地数据,包括 emptyDir 卷、容器可写层、容器镜像、日志等,K8S也提供了一个统一的存储请求和限制的设置,如果使用的存储空间超过限制就会将Pod从当前Node逐出,从而避免磁盘空间使用过多。
然后我们创建一个Pod,它会每秒写1个5M的文件,同时使用 spec.containers[].resources.requests.limits 给存储资源设置了一个限制,最大100Mi。
apiVersion: v1 kind: Pod metadata: name: pod-ephemeral-storage-limit spec: containers: - name: count image: busybox:latest args: [/bin/sh, -c, 'while true; do dd if=/dev/zero of=$(date "+%s").out count=1 bs=5MB; sleep 1; done'] resources: requests: ephemeral-storage: "50Mi" limits: ephemeral-storage: "100Mi"
稍等几分钟,然后查询Pod的事件:
kubectl describe pod pod-ephemeral-storage-limit
可以看到 kubelet 发现Pod使用的本地临时存储空间超过了限制的100Mi,然后就把 Pod 关掉了。
通过这些存储限制,基本上就可以说是万无一失了。当然还要在节点预留足够的本地存储空间,可以根据Pod的数量和每个Pod最大可使用的空间进行计算,否则程序也会因为总是得不到所需的存储空间而出现无法正常运行的问题。
以上就是本文的主要内容,感谢大家阅读。计算机是一门实践科学,赶快动手干起来吧。