hostPath Volume 使得容器可以使用宿主机的文件系统进行存储,hostpath(宿主机路径):节点级别的存储卷,在 pod 被删除,这个存储卷还是存在的,不会被删除,所以只要同一个 pod 被调度到同一个节点上来,在 pod 被删除重新被调度到这个节点之后,对应的数据依然是存在
查看 hostPath 存储卷的用法
[~] kubectl explain pods.spec.volumes.hostPath
KIND: Pod
VERSION: v1
RESOURCE: hostPath <Object>
DESCRIPTION:
HostPath represents a pre-existing file or directory on the host machine
that is directly exposed to the container. This is generally used for
system agents or other privileged things that are allowed to see the host
machine. Most containers will NOT need this. More info:
https://kubernetes.io/docs/concepts/storage/volumeshostpath
Represents a host path mapped into a pod. Host path volumes do not support
ownership management or SELinux relabeling.
FIELDS:
path <string> -required-
type <string>
参考:https://kubernetes.io/docs/concepts/storage/volumeshostpath
创建一个 pod,挂载 hostPath 存储卷
vim hostpath.yaml
在 k8s-01 上的/data1 下创建一个目录
测试存储卷是否可以正常使用,登录到 nginx 容器 和 tomcat 容器
通过上面测试可以看到,同一个 pod 里的 test-nginx 和 test-tomcat 这两个容器可以共享存储卷
hostpath 存储卷缺点:
单节点 pod 删除之后重新创建必须调度到同一个 node 节点,数据才不会丢失
可以用分布式存储:nfs,cephfs,glusterfs
参考官网:
https://kubernetes.io/docs/concepts/storage/persistent-volumes/access-modes
PersistentVolume(PV)是群集中的一块存储,由管理员配置或使用存储类动态配置。 它是集群中的资源,就像 pod 是 k8s 集群资源一样。 PV 是容量插件,如 Volumes,其生命周期独立于使用 PV的任何单个 pod。
PersistentVolumeClaim(PVC)是一个持久化存储卷,在创建 pod 时可以定义这个类型的存储卷。 它类似于一个 pod。
pod 消耗节点资源,PVC 消耗 PV 资源。
pod 可以请求特定级别的资源(CPU 和内存)。 pvc 在申请 pv 的时候也可以请求特定的大小和访问模式(例如,可以一次读写或多次只读)。
PV 是群集中的资源。 PVC 是对这些资源的请求。
PV 和 PVC 之间的相互作用遵循以下生命周期:
(1)pv 的供应方式
可以通过两种方式配置 PV:静态或动态。
静态的:
集群管理员创建了许多 PV。它们包含可供群集用户使用的实际存储的详细信息。它们存在于Kubernetes API 中,可供使用。
动态的:
当管理员创建的静态 PV 都不匹配用户的 PersistentVolumeClaim 时,群集可能会尝试为 PVC 专门动态配置卷。此配置基于 StorageClasses,PVC 必须请求存储类,管理员必须创建并配置该类,以便进行动态配置。
(2)绑定
用户创建 pvc 并指定需要的资源和访问模式。在找到可用 pv 之前,pvc 会保持未绑定状态
(3)使用
a)需要找一个存储服务器,把它划分成多个存储空间;
b)k8s 管理员可以把这些存储空间定义成多个 pv;
c)在 pod 中使用 pvc 类型的存储卷之前需要先创建 pvc,通过定义需要使用的 pv 的大小和对应的访问模式,找到合适的 pv;
d)pvc 被创建之后,就可以当成存储卷来使用了,我们在定义 pod 时就可以使用这个 pvc 的存储卷
e)pvc 和 pv 它们是一一对应的关系,pv 如果被 pvc 绑定了,就不能被其他 pvc 使用了;
f)我们在创建 pvc 的时候,应该确保和底下的 pv 能绑定,如果没有合适的 pv,那么 pvc 就会处于 pending 状态。
(4)回收策略
当创建 pod 时如果使用 pvc 做为存储卷,那么它会和 pv 绑定,当删除 pod,pvc 和 pv 绑定就会解除,解除之后和 pvc 绑定的 pv 卷里的数据需要怎么处理,目前,卷可以保留,回收或删除:
Retain
Recycle (不推荐使用,1.15 可能被废弃了)
Delete
1、Retain
当删除 pvc 的时候,pv 仍然存在,处于 released 状态,但是它不能被其他 pvc 绑定使用,里面的数据还是存在的,当下次再使用的时候,数据还是存在的,这个是默认的回收策略
Delete
删除 pvc 时即会从 Kubernetes 中移除 PV,也会从相关的外部设施中删除存储资产
创建 nfs 共享目录
在宿主机创建 NFS 需要的共享目录
查看定义 pv 需要的字段
[~] kubectl explain pv
KIND: PersistentVolume
VERSION: v1
DESCRIPTION:
PersistentVolume (PV) is a storage resource provisioned by an
administrator. It is analogous to a node. More info:
https://kubernetes.io/docs/concepts/storage/persistent-volumes
FIELDS:
apiVersion <string>s
kind <string>
metadata <Object>
spec <Object>
查看定义 nfs 类型的 pv 需要的字段
[~] kubectl explain pv.spec.nfs
KIND: PersistentVolume
VERSION: v1
RESOURCE: nfs <Object>
FIELDS:
path <string> -required-
readOnly <boolean>
server <string> -required
创建 pv
vim pv.yaml
网站声明:如果转载,请联系本站管理员。否则一切后果自行承担。
加入交流群
请使用微信扫一扫!