Post

volume

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

This post is licensed under CC BY 4.0 by the author.