笔记摘自视频章节:第七章 存储 Volume
主题
存储 volume: emptyDir 和 hostPath
笔记
K8s,对pod的持久化操作需要通过volume来进行。Pod的生命周期是短暂的,每次pod启动都是通过镜像来实现,这是一个无状态的过程,每次pod重启,都会丢失之前的pod生命周期的文件。
k8s支持很多种卷存储,可以在 卷 | Kubernetes 里看到。
emptyDir
emptyDir Volume主要用于某些应用程序无需永久保存的临时目录,多个容器的共享目录等。 emptyDir的生命周期与Pod有关,pod崩溃不影响emptyDir的数据,pod销毁时,emptyDir随之删除。 - 资源清单
apiVersion: v1
kind: Pod
metadata:
name: emptydir-demo
spec:
containers:
- image: wangyanglinux/myapp:v1
name: test-container-1
volumeMounts:
- mountPath: /cache
name: cache-volume
- image: busybox
name: test-container-2
command: [ "/bin/sh","-c", "sleep 6000" ]
volumeMounts:
- mountPath: /test
name: cache-volume
volumes:
- name: cache-volume
emptyDir: { }
创建完成后,对在container2中创建一个文件,预期container1中的挂载目录下也出现该文件
root@jjh-k8s-demo-master:~/k8s_yaml/bzhan_shangguigu# kubectl exec emptydir-demo -c test-container-2 -- touch /test/file_created_in_c2
root@jjh-k8s-demo-master:~/k8s_yaml/bzhan_shangguigu# kubectl exec emptydir-demo -c test-container-1 -- ls /cache
file_created_in_c2
hostPath
hostPath 卷能将主机节点文件系统上的文件或目录挂载到你的 Pod 中。 虽然这不是大多数 Pod 需要的,但是它为一些应用程序提供了强大的逃生舱。
警告
HostPath 卷存在许多安全风险,最佳做法是尽可能避免使用 HostPath。 当必须使用 HostPath 卷时,它的范围应仅限于所需的文件或目录,并以只读方式挂载。
如果通过 AdmissionPolicy 限制 HostPath 对特定目录的访问,则必须要求 volumeMounts 使用 readOnly 挂载以使策略生效。