volume
作用
可以挂载共享文件
空卷 EmptyDir
一个pod中运行一个container, 挂载一个emptyDir卷
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
apiVersion: v1
kind: Pod
metadata:
name: mypod
# 描述的方式
spec:
# 容器相关的
containers:
# 容器命令的名称
- name: mycontainer
image: nginx:latest
# volume挂载到容器
volumeMounts:
- name: myvolume
# volume挂载到pod中的/mnt/data下
mountPath: /mnt/data
# 与container同级
# 存储相关的
volumes:
- name: myvolume
emptyDir: {}
一个pod中运行多个container, 每个container使用同一个emptyDir卷
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
volumes:
- name: shared-data
emptyDir: {}
containers:
- name: container1
image: nginx:latest
volumeMounts:
- name: shared-data
mountPath: /data
- name: container2
image: busybox:latest
volumeMounts:
- name: shared-data
mountPath: /data
- 在container2中/data中创建文件, 在container1中的/data中也会显示该文件
HostPath
概述
本机的某个目录移植过来
主机节点的文件系统中的`文件`或者`目录`挂载到集群中的`pod`
需要访问到容器内部的文件
注意
如果挂载的文件或者目录不存在
在 Kubernetes 中,如果你使用 hostPath 卷并且指定的路径在节点上不存在,Kubernetes 会尝试在该节点上创建指定的目录或文件。这意味着如果你在 Pod 的 hostPath 卷中指定了一个不存在的路径,Kubernetes 会尝试在运行该 Pod 的节点上创建这个路径。
但是需要注意的是,Kubernetes 对节点的文件系统操作权限可能有限制,因此如果 Pod 没有足够的权限创建目录或文件,可能会导致创建失败。通常情况下,Pod 默认以非特权用户的身份运行,因此可能无法创建一些系统级别的目录或文件。
因此,在使用 hostPath 卷时,最好确保指定的路径在节点上是存在的,并且考虑到 Pod 所在节点的权限问题。\
pod节点飘了, 会不会受影响
如果你使用的是hostPath卷,并且在节点移动时,可能会受到影响。因为hostPath卷将节点上的文件系统路径挂载到 Pod 中,如果 Pod 所在的节点发生了移动,那么挂载的路径将不再有效,因为文件系统路径是特定于节点的。
所以,使用hostPath卷时,需要考虑节点迁移可能带来的影响。一旦 Pod 所在的节点发生移动,Pod 将不再能够访问挂载的路径中的数据。这可能导致应用程序无法正常运行或数据丢失。
提前在所有的主机节点上创建data?
hostPath 会在每个节点上创建一个文件或目录,并将其挂载到 Pod 中。但如果你不想在每个节点上创建文件,可以考虑以下几种方法:
- 共享存储: 使用网络存储卷,如NFS或GlusterFS等。这样的卷可以在集群中的多个节点之间共享,而无需在每个节点上创建文件。
- 如果你不需要持久存储,可以考虑使用 EmptyDir 卷。EmptyDir 是临时性的,可以在 Pod 生命周期内使用,但在 Pod 删除时会被清除。这样的卷不会在节点上创建文件,而是在需要时临时创建。
pod内部文件挂载到宿主机
方便外边修改内部生效
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
spec:
containers:
- name: nginx-container
image: nginx:latest
volumeMounts:
- name: nginx-config
mountPath: /etc/nginx/nginx.conf
subPath: nginx.conf
volumes:
- name: nginx-config
hostPath:
path: /root/nginx.conf