# 深入了解K8S中的NFS动态PV

在Kubernetes(K8S)集群中,PersistentVolume(PV)和PersistentVolumeClaim(PVC)是用来存储应用程序数据的重要概念。当需要动态创建PV并将其绑定到PVC时,可以使用NFS动态PV来实现。NFS(Network File System)是一种远程文件存储解决方案,通过网络共享文件,可以在不同的节点之间共享存储资源。

本文将介绍如何在K8S集群中使用NFS动态PV,并为刚入行的小白详细解释实现步骤和代码示例。

### 实现步骤

下面是实现“k8s nfs动态pv”的步骤,共分为6个步骤:

| 步骤 | 操作 |
|------|--------------------------|
| 1 | 创建NFS服务器 |
| 2 | 部署StorageClass |
| 3 | 创建PersistentVolume |
| 4 | 创建PersistentVolumeClaim |
| 5 | 部署应用程序 |
| 6 | 检查PV、PVC和应用程序状态 |

### 代码示例

#### 步骤1:创建NFS服务器

首先在K8S集群中创建一个NFS服务器,用于提供存储服务。

```bash
# 安装NFS服务器
$ sudo apt install nfs-kernel-server

# 创建共享目录
$ sudo mkdir /var/nfs

# 配置exports文件,指定共享目录和访问权限
$ sudo vim /etc/exports
/var/nfs *(rw,sync,no_subtree_check)
```

#### 步骤2:部署StorageClass

创建一个StorageClass,在K8S中用于定义PV的存储类别。

```yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: nfs-storage
provisioner: example.com/nfs
```

#### 步骤3:创建PersistentVolume

创建一个PV,指定存储类型、访问模式和NFS服务器地址。

```yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: nfs-pv
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteOnce
nfs:
server:
path: /var/nfs
```

#### 步骤4:创建PersistentVolumeClaim

创建一个PVC,用于请求PV的存储空间。

```yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: nfs-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
```

#### 步骤5:部署应用程序

部署一个应用程序,将PVC绑定到应用程序的Pod中。

```yaml
apiVersion: v1
kind: Pod
metadata:
name: test-pod
spec:
containers:
- name: test-container
image: nginx
volumeMounts:
- name: nfs-volume
mountPath: /usr/share/nginx/html
volumes:
- name: nfs-volume
persistentVolumeClaim:
claimName: nfs-pvc
```

#### 步骤6:检查PV、PVC和应用程序状态

通过以下命令可以检查PV、PVC和应用程序的状态:

```bash
$ kubectl get pv
$ kubectl get pvc
$ kubectl get pods
```

通过以上步骤,我们可以成功实现在K8S集群中使用NFS动态PV。希望本文对刚入行的小白有所帮助,欢迎继续深入学习和探索Kubernetes的更多功能和用法!