我希望我的pod中的容器共享临时(缓存)数据的卷。我不介意当pod终止时数据是否丢失(事实上,我希望删除数据并回收空间)。
kubernetes docs发出emptyDir
声音,就像我想要的那样:
当Pod被分配给节点时,首先创建一个emptyDir卷,只要Pod在该节点上运行,就会存在该空卷
..和
默认情况下,emptyDir卷存储在支持节点的任何介质上 - 可能是磁盘或SSD或网络存储,具体取决于您的环境。但是,您可以将emptyDir.medium字段设置为“Memory”,以告知Kubernetes为您安装tmpfs(RAM支持的文件系统)
这听起来像默认行为是将卷存储在磁盘上,除非我明确请求内存。
但是,如果我在GKE集群上创建以下pod:
apiVersion: v1
kind: Pod
metadata:
name: alpine
spec:
containers:
- name: alpine
image: alpine:3.7
command: ["/bin/sh", "-c", "sleep 60m"]
volumeMounts:
- name: foo
mountPath: /foo
volumes:
- name: foo
emptyDir: {}
..然后在pod上打开一个shell并将2Gb文件写入卷:
kubectl exec -it alpine -- /bin/sh
$ cd foo/
$ dd if=/dev/zero of=file.txt count=2048 bs=1048576
然后我可以在GKE Web控制台中看到容器的RAM使用量增加了2Gb:
默认情况下,我认为内存中的GKE存储emptyDir
卷。我计划运行的工作负载需要大量内存,所以我希望磁盘备份emptyDir
卷 - 这可能吗? GKE storage docs在这个问题上没什么可说的。
另一种方法可能是对我的缓存数据使用local SSD,但是如果按照GKE文档中的建议安装它们,那么它们将由同一节点上运行的所有pod共享,而数据不是在终端上清理,这不符合我自动管理资源的目标。
以下是容器内df -h
的输出:
# df -h
Filesystem Size Used Available Use% Mounted on
overlay 96.9G 26.2G 70.7G 27% /
overlay 96.9G 26.2G 70.7G 27% /
tmpfs 7.3G 0 7.3G 0% /dev
tmpfs 7.3G 0 7.3G 0% /sys/fs/cgroup
/dev/sda1 96.9G 26.2G 70.7G 27% /foo
/dev/sda1 96.9G 26.2G 70.7G 27% /dev/termination-log
/dev/sda1 96.9G 26.2G 70.7G 27% /etc/resolv.conf
/dev/sda1 96.9G 26.2G 70.7G 27% /etc/hostname
/dev/sda1 96.9G 26.2G 70.7G 27% /etc/hosts
shm 64.0M 0 64.0M 0% /dev/shm
tmpfs 7.3G 12.0K 7.3G 0% /run/secrets/kubernetes.io/serviceaccount
tmpfs 7.3G 0 7.3G 0% /proc/kcore
tmpfs 7.3G 0 7.3G 0% /proc/timer_list
tmpfs 7.3G 0 7.3G 0% /proc/sched_debug
tmpfs 7.3G 0 7.3G 0% /sys/firmware
我发现可以ssh到节点实例,我能够在节点文件系统上找到2Gb文件:
root@gke-cluster-foo-pool-b-22bb9925-xs5p:/# find . -name file.txt
./var/lib/kubelet/pods/79ad1aa4-4441-11e8-af32-42010a980039/volumes/kubernetes.io~empty-dir/foo/file.txt
现在我可以看到它被写入底层文件系统,我想知道我在GKE Web UI中看到的RAM使用情况是否是linux文件系统缓存或类似的,而不是存储在的文件中一块RAM磁盘?
答案 0 :(得分:5)
根据您提供的安装信息,emptyDir
卷安装在驱动器分区上,因此它按预期工作,并且未安装在内存中。您看到的内存使用量可能是由于文件系统缓冲区缓存造成的,因此在内存压力足够的情况下,它最终会被写入磁盘。但是,鉴于您有足够的可用内存,系统可能不会立即执行此操作。
如果您有更多疑问,请让sync
或echo 3 > /proc/sys/vm/drop_caches
使用机器将文件系统信息刷新到磁盘。你应该看到内存使用量的变化。