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