# 从零开始学习K8S中的NFS物理存储

如果你是一位刚入行的小白,想学习如何在Kubernetes (K8S)中使用NFS (Network File System)作为物理存储,那么你来对地方了!本文将带领你一步步学习如何实现K8S中的NFS物理存储。

## 整个实现流程

首先,让我们通过以下表格展示整个实现流程:

| 步骤 | 操作 |
| ------ | ----- |
| 步骤 1 | 部署NFS服务端 |
| 步骤 2 | 创建NFS目录并授权访问 |
| 步骤 3 | 安装NFS客户端插件 |
| 步骤 4 | 创建PersistentVolume (PV) |
| 步骤 5 | 创建PersistentVolumeClaim (PVC) |
| 步骤 6 | 创建应用Deployment,并指定PVC |

## 操作步骤及代码示例

### 步骤 1: 部署NFS服务端

首先,我们需要在一个节点上部署NFS服务端,可以通过在该节点上执行以下操作:

```bash
sudo apt-get update
sudo apt-get install nfs-kernel-server
sudo mkdir -p /srv/nfs/k8s
sudo chown nobody:nogroup /srv/nfs/k8s
```

### 步骤 2: 创建NFS目录并授权访问

接着,我们需要创建一个NFS共享目录并授权访问,可以通过编辑`/etc/exports`文件来实现,添加如下内容:

```
/srv/nfs/k8s *(rw,sync,no_subtree_check,no_root_squash)
```

然后执行以下命令使其生效:

```bash
sudo exportfs -a
```

### 步骤 3: 安装NFS客户端插件

在K8S集群上安装NFS客户端插件,可以通过执行以下命令:

```bash
kubectl apply -f https://raw.githubusercontent.com/kubernetes-incubator/external-storage/master/nfs-client/deploy/rbac.yaml
kubectl apply -f https://raw.githubusercontent.com/kubernetes-incubator/external-storage/master/nfs-client/deploy/deployment.yaml
```

### 步骤 4: 创建PersistentVolume (PV)

接下来,我们需要为NFS存储创建一个PersistentVolume (PV),可以通过编写如下PV配置文件实现:

```yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: nfs-pv
spec:
capacity:
storage: 5Gi
accessModes:
- ReadWriteMany
nfs:
server: [NFS_SERVER_IP]
path: /srv/nfs/k8s
```

然后执行以下命令创建PV:

```bash
kubectl apply -f nfs-pv.yaml
```

### 步骤 5: 创建PersistentVolumeClaim (PVC)

在PV之后,我们需要为应用创建一个PersistentVolumeClaim (PVC),可以通过编写如下PVC配置文件实现:

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

然后执行以下命令创建PVC:

```bash
kubectl apply -f nfs-pvc.yaml
```

### 步骤 6: 创建应用Deployment,并指定PVC

最后,我们可以创建一个应用Deployment,并在其中指定之前创建的PVC,示例如下:

```yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
replicas: 1
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-app
image: nginx
volumeMounts:
- mountPath: "/usr/share/nginx/html"
name: nfs-volume
volumes:
- name: nfs-volume
persistentVolumeClaim:
claimName: nfs-pvc
```

然后执行以下命令创建Deployment:

```bash
kubectl apply -f my-app.yaml
```

通过以上步骤,你已经成功实现了在K8S中使用NFS作为物理存储的操作。希望这篇文章对你有所帮助!如果有任何疑问或困惑,请随时向我提问。祝学习顺利!