k8s的pod挂载共享内存,限制不生效问题:
注:/dev/shm 是 Linux 系统中用于共享内存的特殊路径。通过将 emptyDir 的 medium 设置为 Memory,可以确保 /dev/shm 正确地挂载到一个基于内存的文件系统,从而实现高效的共享内存功能。
宿主机配置如下:
配置如下:
yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:stable-alpine
ports:
- containerPort: 80
resources:
requests:
memory: "2048Mi"
cpu: "1000m"
limits:
memory: "2048Mi"
cpu: "1000m"
volumeMounts:
- mountPath: /usr/share/nginx/html
name: nginx-html
- mountPath: /dev/shm #容器内共享内存目录
name: dshm
volumes:
- name: nginx-html
emptyDir: {}
- name: dshm
emptyDir:
medium: Memory
sizeLimit: 512Mi # 限制容器使用共享内存大小
将上述deployment部署到k8s集群,然后进入容器的shell查看结果:
通过上图可以发现大小并没有被限制住。
经过验证发现是因为k8s集群版本问题导致显示错误,实际已经限制住了,目前所知k8s v1.23.0 可以正常显示,而k8s v1.18.0存在显示问题。
验证如下 :
进入pod内输入以下命令:
dd 命令可以用来生成指定大小的文件。你可以尝试生成一个超过 600 MiB 的文件,看看是否会触发上面设置的512MiB限制
等了一小会大约30s到一分钟的时间发现,pod被驱逐了,很明显是限制生效 了,多次尝试结果都成功被驱逐了:
因此可以得出限制实际是生效了,只不过可能因为版本原因导致的显示问题(已在v1.23.0版本试过,显示和实际限制都是生效的)