本文介绍如何设置Memory类型的emptyDir Volume的sizeLimit,并将其挂载到/dev/shm
,从而修改ACS Pod的shm
大小,解决共享内存不够用的问题。
功能场景
默认情况下,Kubernetes创建的Pod,其共享内存默认为64 MiB(即/dev/shm
大小为64 MiB),且不支持更改。
Kubernetes没有提供设置shm
大小的途径,您可以通过将Memory类型的emptyDir Volume挂载到/dev/shm
的方式,解决共享内存不够用的问题。
配置示例
以下分别演示如何修改普通工作负载和GPU工作负载的shm
大小。
CPU工作负载
创建emptydir-shm.yaml。示例中通过设置EmptyDir Volume的
medium
为Memory
,sizeLimit
为256MiB
,并将EmptyDir Volume挂载到/dev/shm
目录,从而将Pod的shm
大小修改为256 MiB。apiVersion: apps/v1 kind: Deployment metadata: name: test labels: app: test spec: replicas: 1 selector: matchLabels: app: nginx template: metadata: name: nginx-test labels: app: nginx spec: containers: - name: nginx image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6 ports: - containerPort: 80 volumeMounts: - mountPath: /dev/shm name: cache-volume volumes: - emptyDir: medium: Memory sizeLimit: 256Mi name: cache-volume
部署Deployment。
kubectl apply -f emptydir-shm.yaml
查看结果。
kubectl exec -it deploy/test -- df -h
预期输出:
Filesystem Size Used Avail Use% Mounted on overlay 30G 2.8G 26G 10% / tmpfs 64M 0 64M 0% /dev tmpfs 2.8G 0 2.8G 0% /sys/fs/cgroup tmpfs 256M 0 256M 0% /dev/shm /dev/vda5 30G 2.8G 26G 10% /etc/hosts tmpfs 4.0G 12K 4.0G 1% /run/secrets/kubernetes.io/serviceaccount tmpfs 2.8G 0 2.8G 0% /proc/acpi tmpfs 2.8G 0 2.8G 0% /proc/scsi tmpfs 2.8G 0 2.8G 0% /sys/firmware
可以看到
/dev/shm
的大小已增加到256 MiB。
GPU工作负载
创建emptydir-shm-gpu.yaml。示例中通过设置EmptyDir Volume的
medium
为Memory
,sizeLimit
为256Mi
,并将EmptyDir Volume挂载到/dev/shm
目录,从而将GPU Pod的shm
大小改为256 MiB。apiVersion: apps/v1 kind: Deployment metadata: labels: app: test-gpu name: test-gpu namespace: default spec: replicas: 1 selector: matchLabels: app: test-gpu template: metadata: labels: app: test-gpu alibabacloud.com/compute-class: gpu alibabacloud.com/compute-qos: default alibabacloud.com/gpu-model-series: T4 spec: volumes: - emptyDir: medium: Memory sizeLimit: 256Mi name: cache-volume containers: - image: registry.cn-beijing.aliyuncs.com/acs/tensorflow-mnist-sample:v1.5 name: tensorflow-mnist command: - sleep - infinity resources: limits: nvidia.com/gpu: "1" volumeMounts: - mountPath: /dev/shm name: cache-volume
部署Deployment。
kubectl apply -f emptydir-shm-gpu.yaml
查看结果。
kubectl exec -it deploy/test-gpu -- df -h
预期输出:
Filesystem Size Used Avail Use% Mounted on 35xxxxxfe-rootfs 30G 283M 29G 1% / tmpfs 64M 0 64M 0% /dev tmpfs 1.5G 0 1.5G 0% /sys/fs/cgroup tmpfs 256M 0 256M 0% /dev/shm tmpfs 1.5G 116K 1.5G 1% /etc/hosts tmpfs 3.4G 12K 3.4G 1% /run/secrets/kubernetes.io/serviceaccount virtiofs-default 189G 17M 189G 1% /run/nvidia-topologyd/virtualTopology.xml tmpfs 1.5G 68K 1.5G 1% /proc/driver/nvidia/params tmpfs 1.5G 4.0K 1.5G 1% /etc/nvidia/nvidia-application-profiles-rc.d devtmpfs 1.5G 0 1.5G 0% /dev/nvidia0
可以看到
/dev/shm
的大小已增加到256 Mi。
该文章对您有帮助吗?