kubernetes临时存储限制参数-ephemeral storage
前言
最近发现一个服务pod内疯狂打日志,输出一小时内输出155G+日志量,直接造成了线上服务因磁盘压力被驱逐。
然后看了下很多技术跑的tomcat之类的业务也是输出大量日志未进行处理的或者一些奇怪Bug。
临时存储的概念
临时存储即宿主机节点的本地存储。早期版本的kubernetes提供了对container的CPU、内存的限制,并没有提供对container使用的本地存储的限制,这种情况下,可能存在某些container大量消耗宿主机的存储容量,导致宿主机没有足够的磁盘空间运行核心组件。
container使用的宿主机空间:
- 存放log的目录:
/var/lib/kubelet、/var/log/pods
- 存放rootfs的目录:
/var/lib/docker
kubernetes在1.8版本引入了ephemeral storage
资源,以管理本地临时存储的使用。
临时性存储设置请求和限制
你可以指定 ephemeral-storage
来管理本地临时性存储。 Pod 中的每个容器可以设置以下属性:
spec.containers[].resources.limits.ephemeral-storage
spec.containers[].resources.requests.ephemeral-storage
参考:
https://kubernetes.io/zh-cn/docs/concepts/configuration/manage-resources-containers/#local-ephemeral-storage
测试Demo
创建一个deploy,ephemeral-storage申请300Mi,限制300Mi:
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: nginx
name: nginx
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.24
imagePullPolicy: IfNotPresent
command:
- nginx
- -g
- "daemon off;"
workingDir: /usr/share/nginx/html
ports:
- name: http
containerPort: 80
protocol: TCP
resources:
limits:
ephemeral-storage: 300Mi
requests:
ephemeral-storage: 300Mi
创建出来2个pod:
# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-124124adgd-11f5m 1/1 Running 0 20s
nginx-124124adgd-k9r22 1/1 Running 0 20s
在其中一个pod写入400Mi的文件:
# kubectl exec -it nginx-124124adgd-11f5mm /bin/sh
# dd if=/dev/zero of=/test bs=4096 count=102400
102400+0 records in
102400+0 records out
419430400 bytes (419 MB, 400 MiB) copied, 16.2403 s, 25.8 MB/s
可以看到,写入文件的pod被Evicted,并新创了一个pod:
# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-124124adgd-11f5m 0/1 Evicted 0 5m19s
nginx-124124adgd-z8r6a 1/1 Running 0 4s
nginx-124124adgd-k9r22 1/1 Running 0 5m19s
注意pod只是被
Evicted
了,但未比删除。
参考
1.https://zhuanlan.zhihu.com/p/601805418
2.https://blog.csdn.net/sdmei/article/details/101017405