k8s的pod掛載共享內存,限制不生效問題:
注:/dev/shm 是 Linux 系統中用于共享內存的特殊路徑。通過將 emptyDir 的 medium 設置為 Memory,可以確保 /dev/shm 正確地掛載到一個基于內存的文件系統,從而實現高效的共享內存功能。
宿主機配置如下:
配置如下:
apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-deploymentlabels:app: nginx
spec:replicas: 1selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:stable-alpineports:- containerPort: 80resources:requests:memory: "2048Mi"cpu: "1000m"limits:memory: "2048Mi"cpu: "1000m"volumeMounts:- mountPath: /usr/share/nginx/htmlname: nginx-html- mountPath: /dev/shm #容器內共享內存目錄name: dshmvolumes:- name: nginx-htmlemptyDir: {}- name: dshmemptyDir:medium: MemorysizeLimit: 512Mi # 限制容器使用共享內存大小
將上述deployment部署到k8s集群,然后進入容器的shell查看結果:
通過上圖可以發現大小并沒有被限制住。
經過驗證發現是因為k8s集群版本問題導致顯示錯誤,實際已經限制住了,目前所知k8s v1.23.0可以正常顯示,而k8s v1.18.0存在顯示問題。
驗證如下:
進入pod內輸入以下命令:
dd 命令可以用來生成指定大小的文件。你可以嘗試生成一個超過 600 MiB 的文件,看看是否會觸發上面設置的512MiB限制
等了一小會大約30s到一分鐘的時間發現,pod被驅逐了,很明顯是限制生效了,多次嘗試結果都成功被驅逐了:
因此可以得出限制實際是生效了,只不過可能因為版本原因導致的顯示問題(已在v1.23.0版本試過,顯示和實際限制都是生效的)