Kubernetes-Storage-PV-PVC

本文最后更新于 2025年1月27日 下午

常见存储机制

在Docker和Kubernetes的相关技术领域,常见的存储方案包含以下方面:

Docker本地存储:

1
2
# docker run -v /local/path:/container/path  ...   docker本地挂载存储
# docker run -v volume_name:/container/path ... docker volume通过创建存储卷挂载

Kubernetes 本地存储

PV和PVC:

emptyDir:

emptyDir类型的Volume在Pod分配到Node上时被创建,Kubernetes会在Node上自动分配一个目录,因此无需指定宿主机Node上对应的目录文件。 这个目录的初始内容为空,当Pod从Node上移除时,emptyDir中的数据会被永久删除。

应用场景:
  • 临时空间,例如基于磁盘的合并排序
  • 设置检查点以从崩溃事件中恢复未执行完毕的长计算
  • 保存内容管理器容器从Web服务器容器提供数据时所获取的文件,比如和其他容器共享文件,例如临时日志等
1
2
[root@rocky01 ~] # kubectl explain pod.spec.volumes.emptyDir
[root@rocky01 ~] # kubectl explain pod.spec.containers.volumeMounts

hostPath:

hostPath类型则是映射node文件系统中的文件或者目录到pod里。在使用hostPath类型的存储卷时,也可以设置type字段,支持的类型有文件、目录、File、Socket、CharDevice和BlockDevice。

使用场景

  • 只能针对特定宿主机起作用,夸宿主机就会出现文件不一致的问题,可以通过pod.spec.nodeName来指定运行的宿主机

注意事项

  • 配置相同的pod(如通过podTemplate创建),可能在不同的Node上表现不同,因为不同节点上映射的文件内容不同
  • 当Kubernetes增加了资源敏感的调度程序,hostPath使用的资源不会被计算在内
  • 宿主机下创建的目录只有root有写权限。你需要让你的程序运行在privileged container上,或者修改宿主机上的文件权限。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[root@rocky01 ~] # kubectl explain pod.spec.volumes.hostPath
[root@rocky01 ~] # kubectl explain pod.spec.containers.volumeMounts
###
apiVersion: v1
kind: Pod
metadata:
name: test-pod2
spec:
containers:
- image: busybox
name: test-hostpath
command: [ "sleep", "3600" ]
volumeMounts:
- mountPath: /test-data
name: test-volume
volumes:
- name: test-volume
hostPath:
# directory location on host
path: /data
# this field is optional
type: Directory

网络共享存储:


Kubernetes-Storage-PV-PVC
https://msfts.org/2024/08/07/Kubernetes-storage-PV-PVC/
作者
Jas0n0ss
发布于
2024年8月7日
许可协议