云容器实例 CCI
云容器实例 CCI
- 最新动态
- 功能总览
- 产品介绍
- 计费说明
- 快速入门
- 用户指南
- 最佳实践
- 开发指南
-
API参考
- 使用前必读
- 如何调用API
- 快速入门
- API
-
Kubernetes API
- ConfigMap
- Pod
- StorageClass
- Service
- Deployment
- Ingress
- OpenAPIv2
- VolcanoJob
- Namespace
- ClusterRole
- Secret
- Endpoint
- ResourceQuota
- CronJob
-
API groups
- 查询APIVersions
- 查询所有v1版本的API
- 查询APIGroupList
- 查询APIGroup /apis/apps
- 查询所有apps/v1的API
- 查询APIGroup /apis/batch
- 查询APIGroup /apis/batch.volcano.sh
- 查询所有batch.volcano.sh/v1alpha1的API
- 查询所有batch/v1的API
- 查询所有batch/v1beta1的API
- 查询APIGroup /apis/crd.yangtse.cni
- 查询所有crd.yangtse.cni/v1的API
- 查询APIGroup /apis/extensions
- 查询所有extensions/v1beta1的API
- 查询APIGroup /apis/metrics.k8s.io
- 查询所有metrics.k8s.io/v1beta1的API
- 查询APIGroup /apis/networking.cci.io
- 查询所有networking.cci.io/v1beta1的API
- 查询APIGroup /apis/rbac.authorization.k8s.io
- 查询所有rbac.authorization.k8s.io/v1的API
- Event
- PersistentVolumeClaim
- RoleBinding
- StatefulSet
- Job
- ReplicaSet
- 数据结构
- 权限和授权项
- 附录
- 历史API
- 修订记录
- SDK参考
- 场景代码示例
- 常见问题
- 视频帮助
- 文档下载
- 通用参考
链接复制成功!
修改/dev/shm容量大小
应用场景
/dev/shm由tmpfs文件系统构成,tmpfs是Linux/Unix系统上的一种基于内存的文件系统,故读写效率非常高。
目前有用户希望通过/dev/shm实现进程间数据交互或通过/dev/shm实现临时数据存储,此时CCI场景/dev/shm默认大小64M无法满足客户诉求,故提供修改/dev/shm size大小的能力。
本操作实践展示通过“memory类型EmptyDir”和“配置securityContext与mount命令”两种方式来修改/dev/shm容量。
限制与约束
- /dev/shm使用基于内存的tmpfs文件系统,不具备持久性,容器重启后数据不保留。
- 用户可通过两种方式修改/dev/shm容量,但不建议在一个Pod中同时使用两种方式进行配置。
- EmptyDir所使用的memory从Pod申请的memory中进行分配,不会额外占用资源。
- 在/dev/shm中写数据相当于申请内存,此种场景下需评估进程内存使用量,当容器内的进程申请内存与EmptyDir中数据量之和超过容器请求的限制内存时,会出现内存溢出异常。
- 当需要修改/dev/shm容量时,容量大小通常设定为Pod内存申请量的50%。
通过memory类型EmptyDir修改/dev/shm容量
临时路径(EmptyDir):适用于临时存储、灾难恢复、共享运行时数据等场景,任务实例的删除或迁移会导致临时路径被删除。
CCI支持挂载Memory类型的EmptyDir,用户可通过指定EmptyDir分配内存的大小并挂载到容器内/dev/shm目录来实现/dev/shm的容量修改。
apiVersion: v1 kind: Pod metadata: name: pod-emptydir-name spec: containers: - image: 'library/ubuntu:latest' volumeMounts: - name: volume-emptydir1 mountPath: /dev/shm name: container-0 resources: limits: cpu: '4' memory: 8Gi requests: cpu: '4' memory: 8Gi volumes: - emptyDir: medium: Memory sizeLimit: 4Gi name: volume-emptydir1
待Pod启动后,执行“df -h”指令,进入/dev/shm目录,如下图所示,/dev/shm容量修改成功。
图1 /dev/shm目录详情

linux原生提供了SYS_ADMIN权限,将该权限应用于容器中,首先需要kubenetes在pod级别带入这个信息,在pod的描述文件中添加securityContext字段的描述。 例如:
"securityContext": { "capabilities": { "add": [ "SYS_ADMIN" ] } }
同时容器的描述信息中也需要加入另外一个描述字段CapAdd。
"CapAdd": [ "SYS_ADMIN" ],
这样的话容器在自动被kubelet拉起的时候就会带入一个参数。
docker run --cap-add=SYS_ADMIN
- 在给容器赋予SYS_ADMIN权限后,可直接在启动命令中通过mount命令实现/dev/shm的size修改。
apiVersion: v1 kind: Pod metadata: name: pod-emptydir-name spec: containers: - command: - /bin/sh - '-c' - mount -o size=4096M -o remount /dev/shm;bash securityContext: capabilities: add: ["SYS_ADMIN"] image: 'library/ubuntu:latest' name: container-0 resources: limits: cpu: '4' memory: 8Gi requests: cpu: '4' memory: 8Gi
待Pod启动后,执行“df -h”指令,进入/dev/shm目录,如下图所示,/dev/shm容量修改成功。
图2 /dev/shm目录详情

父主题: 负载管理