emptyDir - 临时空目录,随Pod创建/删除而创建/销毁,用于容器间数据共享
ymlapiVersion: v1
kind: Pod
metadata:
name: emptydir-demo #该类型临时使用,pod删除后数据卷也会被删除
spec:
containers:
- name: writer
image: busybox
command: ["/bin/sh", "-c"]
args: ["echo 'Hello from writer' > /cache/data.txt && sleep 3600"]
volumeMounts:
- name: cache-volume #名称必须一致
mountPath: /cache
- name: reader
image: busybox
command: ["/bin/sh", "-c"]
args: ["cat /cache/data.txt && sleep 3600"]
volumeMounts:
- name: cache-volume #名称必须一致
mountPath: /cache
volumes:
- name: cache-volume #名称必须一致
emptyDir: {}
js创建了一个Pod包含writer和reader两个容器
通过emptyDir卷在/cache目录实现容器间共享
writer容器向/cache/data.txt写入数据
reader容器读取并输出相同文件内容
emptyDir生命周期与Pod绑定,Pod删除后数据丢失
js#进入reader容器中是否存在 kubectl exec -it emptydir-demo -c reader -- sh
hostPath - 将节点本地文件系统挂载到Pod,数据可持久化但仅限于单节点
ymlapiVersion: v1
kind: Pod
metadata:
name: hostpath-demo
spec:
containers:
- name: hostpath-container
image: nginx:alpine
volumeMounts:
- name: hostpath-volume
mountPath: /usr/share/nginx/html
volumes:
- name: hostpath-volume
hostPath:
path: /tmp/hostpath-data
type: DirectoryOrCreate #DirectoryOrCreate类型表示如果目录不存在会自动创建
将节点上的/tmp/hostpath-data目录挂载到容器的/usr/share/nginx/html
查看pod分配的是节点2,就去节点2的服务器查看
注意:hostPath是根据你/tmp/hostpath-data目录去挂载的,你节点上的/tmp/hostpath-data目录是空,挂载到pod内的文件目录下也会是空,哪怕你pod该目录下有文件一样给你清空,根据节点上的文件目录下文件进行挂载
ymlapiVersion: v1
kind: Pod
metadata:
name: nfs-direct-pod
spec:
containers:
- name: nginx
image: nginx
volumeMounts:
- name: nfs-vol
mountPath: /usr/share/nginx/html
volumes:
- name: nfs-vol
nfs:
server: 192.168.201.104
path: /data/nfs_share
readOnly: false
在全部节点都先创建一个/data/nfs_share目录并授权,NFS服务器上也创建该目录。 然后NFS在/etc/fstab编辑加一行,这样就能同时挂载多个目录(因为之前挂载过一个了)
js192.168.201.104:/data/nfs_share /data/nfs_share nfs defaults 0 0
然后nfs重新加载生效
jssudo exportfs -a # 重新加载配置 sudo systemctl restart nfs-server
再全部k8s集群节点重新挂载一个新的
jsmount -t nfs 192.168.201.104:/data/nfs_share /data/nfs_share
然后进入pod容器后去到/usr/share/nginx/html目录下会发现跟我nfs挂载的目录文件一样。
本文作者:松轩(^U^)
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!