K8S之持久卷(PV和PVC)


参考文章:https://www.cnblogs.com/dengbingbing/p/10399207.html
参考视频:https://ke.qq.com/user/index/index.html#/plan/cid=1709963&term_id=102815140

一、概念

1.1.PersistentVolume(PV)

是集群中由管理员配置的一段网络存储。 它是集群中的资源,就像节点是集群资源一样。 生命周期独立于使用PV的任何单个pod。

1.2.PersistentVolumeClaim(PVC)

是由用户进行存储的请求,类似pod。 Pod消耗节点资源,PVC消耗PV资源。可以请求特定的大小和访问模式(例如,可以一次读/写或多次只读)。

1.3.PV访问模式AccessModes

RWO - ReadWriteOnce			#单个Pod挂载并且可读写
ROX - ReadOnlyMany			#可以有多个Pod以只读方式挂载
RWX - ReadWriteMany			#可以有多个Pod以读写方式挂载

1.4.PV回收策略RECLAIM POLICY

Retain			#人工回收,保留,默认选项
Recycle			#清除PV中的数据,相当于执行rm -rf /data/nfs/pv0001/*
Delete			#PV和与 PV 相连的后端存储同时删除,相当于执行rm -rf /data/nfs/pv0001

PV状态STATUS

• Available(可用):表示可用状态,还未被任何 PVC 绑定
• Bound(已绑定):表示 PV 已经被 PVC 绑定
• Released(已释放):PVC 被删除,但是资源还未被集群重新声明
• Failed(失败): 表示该 PV 的自动回收失败

二、安装NFS

ubuntu16.04.4 部署NFS共享

mkdir -p /data/nfs/{pv0001,pv0002}
chmod -R 777 /data/nfs

三、PV静态供给

2.1.创建PV

创建两个PV,一个5G,一个10G
注意:/data/nfs/pv0001和/data/nfs/pv0002需提前创建

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv0001
spec:
  capacity:
    storage: 5Gi
  volumeMode: Filesystem
  accessModes:
    - ReadWriteMany
  persistentVolumeReclaimPolicy: Recycle
  nfs:
    path: /data/nfs/pv0001
    server: 192.168.1.10

---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv0002
spec:
  capacity:
    storage: 10Gi
  volumeMode: Filesystem
  accessModes:
    - ReadWriteMany
  persistentVolumeReclaimPolicy: Recycle
  nfs:
    path: /data/nfs/pv0002
    server: 192.168.1.10

kubectl get pv
在这里插入图片描述

2.2.创建PVC

根据访问模式存储空间去绑定对应的PV,始终确保绑定的PV大小大于等于PVC的大小
PVC与PV是一一对应的
先删除Pod再删除PVC

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-pvc
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 5Gi

kubectl get pvc
在这里插入图片描述

2.3.Pod使用PVC

实际是把NFS共享的/data/nfs/pv0001目录绑定到容器的/usr/share/nginx/html目录

spec:
  containers:
  - name: empty
    image: nginx
    imagePullPolicy: IfNotPresent
    ports:
    - containerPort: 80
    volumeMounts:
      - name: data
        mountPath: /usr/share/nginx/html
  volumes:
  - name: data
    persistentVolumeClaim:
      claimName: my-pvc

2.4.申请的存储空间是否为实际可用的存储空间?

不是。存储空间字段storage不能限制实际存储容量,只作为一种匹配标记,具体可用容量取决于后端网络存储(NFS、Ceph)。

就好比PV申请的存储空间为5G,而后端存储可用空间为100G,那么对应的Pod实际可使用100G的空间

现在K8s已逐步对部分存储提供自动限制的支持

四、PV动态供给

3.1.概念

Dynamic Provisioning机制工作的核心在于StorageClass的API对象

StorageClass声明存储插件,用于自动创建PV

3.2.流程图

在这里插入图片描述

3.3.部署外部插件(支持nfs)

下载地址:https://github.com/kubernetes-retired/external-storage/tree/master/nfs-client/deploy
在这里插入图片描述
如果不是安装到default命名空间,需要修改yaml文件中的命名空间

kubectl apply -f rbac.yaml			#授权访问apiserver

vi deployment.yaml

修改镜像为gmoney23/nfs-client-provisioner
填写正确的NFS服务器的地址和目录

在这里插入图片描述

kubectl apply -f deployment.yaml

在这里插入图片描述

kubectl apply -f class.yaml			#创建存储类

在这里插入图片描述

3.4.创建PVC

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-pvc
spec:
  storageClassName: managed-nfs-storage
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 25Gi

kubectl apply -f pvc.yaml

会自动创建PV和PVC,并绑定
在这里插入图片描述
Pod使用PVC的写法与静态供给一样,不在重复

会自动在NFS共享存储下创建目录
在这里插入图片描述

Kubernetes (K8s) 支持使用 NFS(Network File System)作为持久化存储解决方案。NFS 是一种分布式文件系统协议,允许将远程文件系统挂载到本地服务器上。 要使用 NFS 进行持久化存储,你需要先设置一个 NFS 服务器,并在 Kubernetes 集群中配置一个 NFS 持久。以下是一些步骤: 1. 配置 NFS 服务器:你需要设置一个 NFS 服务器并将其配置为共享文件系统。确保你已经安装并配置好了 NFS 服务器软件。 2. 创建 NFS 持久:在 Kubernetes 中,你可以使用 PersistentVolume(PV)和 PersistentVolumeClaim(PVC)对象来定义持久持久声明。创建一个 PV 来表示 NFS 服务器上的共享目录,并为该 PV 创建一个 PVC。 3. 部署应用程序:使用创建的 PVC,在你的应用程序中声明一个持久。你可以通过将 PVC 挂载到应用程序的 Pod 中来实现持久化存储。 以下是一个示例的 YAML 文件,演示了如何在 Kubernetes 中配置一个 NFS 持久: ``` apiVersion: v1 kind: PersistentVolume metadata: name: nfs-pv spec: capacity: storage: 5Gi accessModes: - ReadWriteMany nfs: server: <NFS_SERVER_IP> path: /path/to/shared/directory --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: nfs-pvc spec: accessModes: - ReadWriteMany resources: requests: storage: 5Gi storageClassName: "" selector: matchLabels: name: nfs-pv ``` 替换 `<NFS_SERVER_IP>` 和 `/path/to/shared/directory` 为你 NFS 服务器的 IP 地址和共享目录的路径。然后,使用 kubectl apply 命令来部署这个 YAML 文件。 一旦 PVCPV 创建成功,你可以在你的应用程序中使用该 PVC 来挂载 NFS 持久,并在 Pod 中进行持久化存储。 这就是使用 NFS 进行持久化存储的基本步骤。希望对你有所帮助!如果还有其他问题,请继续提问。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值