k8s的pod挂载共享内存

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版本试过,显示和实际限制都是生效的)

相关推荐
云游牧者1 小时前
K8S-Helm包管理全解-从入门到Chart开发实战指南
云原生·容器·kubernetes·helm·chart模板
codeejun2 小时前
每日一Go-66、K8s 蓝绿发布 & 金丝雀发布实战:Service 切流量 + Ingress 灰度一次讲透
开发语言·golang·kubernetes
口喜口喜2 小时前
K3s 安装笔记(CentOS 7.9)
kubernetes
Elastic 中国社区官方博客2 小时前
一个查询,无限 Elasticsearch Serverless 项目:跨项目搜索介绍
大数据·elasticsearch·搜索引擎·信息可视化·云原生·serverless·全文检索
思诺学长3 小时前
从0理解Feed流系统:技术原理、架构设计与实战指南
云原生
程序员老邢3 小时前
《技术底稿 41》从三机混跑到四机隔离:微服务集群环境拆分实战复盘
微服务·云原生·架构·devops·服务器运维·技术底稿·环境隔离
秋漓3 小时前
Docker学习与使用
学习·docker·容器
%KT%3 小时前
Windows安装wsl2和docker desktop,部署qdrant向量数据库
运维·docker·容器
PythonAI实战君3 小时前
Docker Compose 部署 MySQL 中文乱码避坑指南
docker·容器
Tony Bai4 小时前
Google 开源 AX 与 Agent Substrate:构建以 Agent 为核心的云原生计算底座
云原生·开源