在Kubernetes中,PersistentVolume(PV)和PersistentVolumeClaim(PVC)是用来实现持久化存储的重要概念。而NFS(Network File System)是一种跨网络共享文件系统的协议,可以用来实现集群中多个Pod之间共享存储的需求。本文将介绍如何在Kubernetes中使用PV和NFS来实现持久化存储,帮助刚入行的小白完成"k8s pv nfs"的工作。

### 整体流程
下面是实现"k8s pv nfs"的整体流程:

| 步骤 | 描述 |
|----|----|
| 1 | 配置NFS服务器 |
| 2 | 创建PV与PVC |
| 3 | 部署应用Pod |
| 4 | 验证持久化存储 |

### 步骤详解
#### 1. 配置NFS服务器
首先,我们需要在NFS服务器上创建一个共享目录,并配置NFS服务。
```bash
# 安装NFS服务
sudo apt update
sudo apt install nfs-kernel-server

# 创建共享目录
sudo mkdir -p /mnt/nfs_share

# 配置NFS共享
sudo nano /etc/exports
# 在文件末尾添加下面一行
/mnt/nfs_share *(rw,sync,no_subtree_check)
# 保存并退出编辑器后,重启NFS服务
sudo systemctl restart nfs-kernel-server
```

#### 2. 创建PV与PVC
在Kubernetes中创建PV与PVC,将NFS服务器上的共享目录挂载到Pod中。
```yaml
# nfs-pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: nfs-pv
spec:
capacity:
storage: 1Gi
volumeMode: Filesystem
accessModes:
- ReadWriteMany
nfs:
path: /mnt/nfs_share
server: nfs-server-ip

---
# nfs-pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: nfs-pvc
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi
volumeName: nfs-pv
```
```bash
# 创建PV
kubectl apply -f nfs-pv.yaml

# 创建PVC
kubectl apply -f nfs-pvc.yaml
```

#### 3. 部署应用Pod
创建一个使用NFS存储的应用Pod,并将之前创建的PVC挂载到Pod中。
```yaml
# nfs-app.yaml
apiVersion: v1
kind: Pod
metadata:
name: nfs-app
spec:
containers:
- name: nfs-app
image: nginx
volumeMounts:
- mountPath: /usr/share/nginx/html
name: nfs-storage
volumes:
- name: nfs-storage
persistentVolumeClaim:
claimName: nfs-pvc
```
```bash
# 创建应用Pod
kubectl apply -f nfs-app.yaml
```

#### 4. 验证持久化存储
验证应用Pod是否成功挂载了NFS存储,并且可以进行读写操作。
```bash
# 进入应用Pod
kubectl exec -it nfs-app -- /bin/bash

# 在Pod内部创建文件并查看是否能在NFS服务器上找到
echo "Hello from NFS" > /usr/share/nginx/html/index.html
exit

# 验证NFS服务器上是否有新创建的文件
sudo ls /mnt/nfs_share
```

### 总结
通过以上步骤,我们成功实现了在Kubernetes中使用PV与NFS来实现持久化存储。首先配置NFS服务器,然后创建PV与PVC,并最后在应用Pod中挂载NFS存储,实现了持久化存储的需求。希望这篇文章对刚入行的小白有所帮助,加深了对"k8s pv nfs"的理解和实践经验。如果有任何问题或疑问,欢迎留言交流讨论。