动态pv(nfs方式挂载)

本文介绍了如何在Kubernetes中使用动态PV和NFS,涉及provisioner组件、StorageClass的定义、NFS-Provisioner的创建、ServiceAccount和RBAC权限设置,以及PVC、Pod的测试和pv资源的回收策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、定义

发布pvc之后可以生成pv,还可以在共享服务器上直接生成挂载目录

pvc直接绑定和使用pv

2、动态pv依赖两个组件

(1)provisioner卷插件:k8s本身支持的动态pv创建不包括nfs,需要声明和安装一个外部插件provisioner(存储分配器),可以动态创建pv,根据pvc请求自动绑定和使用(根据定义的pv属性创建pv)

(2)StorageClass:定义pv属性(存储类型、大小、回收策略等)

3、nfs实现动态pv

nfs支持NFS-client,provisioner来适配nfs-client

先创建nfs-client-provisioner卷插件

与静态pv相比,少了自定义挂载卷和自定义pv这两步,用StorageClass和provisioner来代替这两步自动生成

创建动态pv实验(默认策略是Delete,一定要设置成Retain)

1、创建共享目录

查看其他节点是否共享目录

2、创建账户Service Account

用来管理 NFS Provisioner 在 k8s 集群中运行的权限

nfs provisioner是一个插件,没有权限是无法在集群中获取k8s的消息.插件要有权限监听apiserver、获取集群的列表资源、create、delete

查看各个yaml文件的格式:

①查看账户kubectl explain ServiceAccount

②查看集群角色kubectl explain ClusterRole

rbac:Role-based Access control基础权限配置,定义角色在集群中可以使用的权限

③查看集群角色和账户绑定kubectl explain ClusterRoleBinding

④查看storageclass插件 kubectl explain storageclass

⑤查看pvc  

kubectl explain pvc

verbs表示权限的动作

get

获取资源

list

获取集群中列表资源

watch

监听

create

创建

update

更新

patch

路径

账户名称

nfs-client-provisioner

角色名称

nfs-client-provisioner-clusterrole

storageclass名称

nfs-client-storageclass

3、使用 Deployment 来创建 NFS Provisioner插件

NFS Provisione(即 nfs-client),有两个功能:一个是在 NFS 共享目录下创建挂载点(volume),另一个则是将 PV 与 NFS 的挂载点建立关联

①屏蔽selflink功能

由于 1.20 版本启用了 selfLink,所以 k8s 1.20+ 版本通过 nfs provisioner 动态生成pv会报错

feature-gates

在不破坏现有规则和功能的情况下引入新功能或修改现有功能的机制

禁用不影响之前的规则

②创建NFS Provisioner插件

创建nfs的provisioner的客户端,以pod的方式运行在集群中,根据刚才赋予的权限监听k8s集群中pv请求,动态创建与nfs服务器相关的pv

容器里使用的配置在provisioner里定义好环境变量传给容器

环境变量:storageclass的名称,nfs服务器的地址,nfs的目录

4创建 StorageClass

负责建立 PVC 并调用 NFS provisioner 进行预定的工作,并让 PV 与 PVC 建立关联

NAME

storageclass的名称

PROVISIONER

对应创建pv的provisioner插件

RECLAIMPOLICY

pv回收策略。这里定义的是retain

VOLUMEBINDINGMODE

卷绑定模式,immediate标识pvc请求创建pv时,系统会立即绑定一个可用的pv

waitForFirstConsumer第一个使用者而出现之后再绑定pv

ALLOWVOLUMEEXPANSION

可以在运行时对pv进行扩容

5、创建 PVC 和 Pod 测试

测试挂载卷

6、释放pv资源

将pv资源改为可用状态Available

7、重新定义pv回收策略

①Delete策略

先删除storageclass

再回收pv资源

②Recycle策略

先删除storageclass

再回收pv资源

结论:pv不支持Recycle回收策略

### 在 Kubernetes 中配置和挂载 NFS 存储 #### 1. 安装和配置 NFS 服务器 为了在 Kubernetes 中使用 NFS 存储,首先需要设置一个 NFS 服务器。以下是安装和配置 NFS 的基本步骤: - **对于 Ubuntu 或 Debian 系统**,可以运行以下命令来安装必要的软件包: ```bash apt-get update && apt-get install -y nfs-kernel-server nfs-common ``` - **对于 CentOS 或 RHEL 系统**,则需执行以下命令: ```bash yum install -y nfs-utils.x86_64 ``` 完成安装后,编辑 `/etc/exports` 文件以定义共享目录及其权限[^1]。 例如,在 `/etc/exports` 文件中添加如下内容: ``` /mnt/nfs_from_master03 10.20.2.110(rw,sync,no_root_squash) ``` 这表示将 `/mnt/nfs_from_master03` 目录共享给 IP 地址为 `10.20.2.110` 的客户端,并赋予其读写权限[^1]。 最后,重启 NFS 服务使更改生效: ```bash systemctl restart nfs-kernel-server.service ``` #### 2. 创建 PersistentVolume (PV) 和 PersistentVolumeClaim (PVC) 为了让 Kubernetes 使用 NFS 存储,可以通过声明 PVPVC 来实现持久化存储的绑定。 ##### a. 配置 PersistentVolume (PV) 下面是一个 YAML 文件示例,用于创建基于 NFSPV: ```yaml apiVersion: v1 kind: PersistentVolume metadata: name: nfs-pv spec: capacity: storage: 1Gi accessModes: - ReadWriteMany persistentVolumeReclaimPolicy: Retain nfs: server: <nfs-server-ip> path: "/path/on/nfs/server" ``` 其中 `<nfs-server-ip>` 是 NFS 服务器的实际 IP 地址,而 `/path/on/nfs/server` 则是之前配置好的共享路径[^3]。 ##### b. 配置 PersistentVolumeClaim (PVC) 接着,通过 PVC 请求上述 PV 提供的存储资源: ```yaml apiVersion: v1 kind: PersistentVolumeClaim metadata: name: nfs-pvc spec: accessModes: - ReadWriteMany resources: requests: storage: 1Gi ``` #### 3. 将 NFS挂载到 Pod 中 一旦成功创建了 PVPVC,就可以将其挂载至容器内部作为卷的一部分。以下是一个简单的 Pod 配置文件示例: ```yaml apiVersion: v1 kind: Pod metadata: name: nfs-pod spec: containers: - name: app-container image: nginx volumeMounts: - name: nfs-volume mountPath: /usr/share/nginx/html volumes: - name: nfs-volume persistentVolumeClaim: claimName: nfs-pvc ``` 此配置会将 NFS挂载到 Nginx 容器中的 `/usr/share/nginx/html` 路径下[^3]。 --- ### 总结 以上方法展示了如何从零开始搭建并集成 NFS 存储进入 Kubernetes 环境的过程。具体操作包括但不限于:NFS 服务器端的基础环境准备、Kubernetes 内部对象(如 PV/PVC)的设计以及最终应用层面对外部存储设备的有效利用[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值