在 Kubernetes 中使用 NFS 共享存储的明细步骤
在 Kubernetes 中,为应用程序提供持久化数据存储是非常重要的。其中,使用网络文件系统(NFS)作为存储解决方案是一种经济实用的选择。本文将介绍在 Kubernetes 中如何使用 NFS 共享存储。
一. 创建一个 NFS Server:
创建一个 NFS 服务器,该服务器将充当 Kubernetes 存储的后端。我们可以使用 Linux 上的 NFS 服务器或某种 NAS 设备。在本教程中,我们将使用一个 Docker 容器作为 NFS 服务器。
首先,我们需要拉去具有永久共享文件夹和 NFS 服务的 Docker 容器镜像:
docker pull itsthenetwork/nfs-server-alpine
创建一个名为 nfs 的 Docker 容器并启动,使用 Docker volume(名字为 exports)挂载 /exports 文件夹:
docker run -d --rm --name nfs --privileged -v exports:/exports -e SHARED_DIRECTORY=/exports -p 2049:2049 -p 111:111 -p 111:111/udp -p 32769-32771:32769-32771/udp itsthenetwork/nfs-server-alpine
然后验证 NFS 服务器是否正在运行,创建一个名为 test 的临时目录:
mkdir test sudo mount -o vers=4 127.0.0.1:/exports test echo "Hello NFS" > test/hello.txt umount test
运行以上命令,然后查看 hello.txt 文件是否存在。
二. 配置 Kubernetes 使用 NFS:
接下来,我们将在 Kubernetes 中使用 NFS。我们需要创建一个 PV(持久化卷)和一个 PVC(持久化卷声明),以便我们的应用程序可以访问 NFS 存储。
- 创建一个 NFS 命名空间:
在 kubernetes 中使用命名空间是一个好习惯,这有助于隔离对象。
apiVersion: v1 kind: Namespace metadata: name: nfs
- 创建 PersistentVolume:
下面描述了一个 NFS 存储 PV 定义。注意 NFS 服务器 IP 地址(可以使用 Service IP 或具体的 IP 地址)和 NFS 服务器想要共享的目录。请确保将这些值替换为我们在第一步中创建的实际值。
apiVersion: v1 kind: PersistentVolume metadata: name: nfs-pv namespace: nfs spec: capacity: storage: 1Gi accessModes: - ReadWriteMany nfs: server: 127.0.0.1 path: /exports
在创建 PersistentVolume 之后,我们可以通过运行以下命令来查看 PV 的状态:
kubectl get pv -n nfs
- 创建 PersistentVolumeClaim:
现在我们已经创建了 NFS 存储 PV,接下来我们需要创建一个 PVC(PersistentVolumeClaim)来使用它。在下面的 PVC 定义中,我们需要指定要使用的存储容量和访问模式。我们将 PVC 命名为 nfs-pvc。
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: nfs-pvc namespace: nfs spec: accessModes: - ReadWriteMany resources: requests: storage: 1Gi
在创建 PVC 之后,我们可以通过运行以下命令来查看 PVC 的状态:
kubectl get pvc -n nfs
- 创建 Pod:
下面是示例 Pod 的定义。在定义中,我们将 PVC 挂载到 /mnt/nfs 目录,用于存储数据和应用程序日志等。
apiVersion: v1 kind: Pod metadata: name: nfs-pod namespace: nfs spec: containers: - name: app image: nginx volumeMounts: - name: nfs-pv mountPath: "/mnt/nfs" volumes: - name: nfs-pv persistentVolumeClaim: claimName: nfs-pvc
我们可以通过运行以下命令来查看 Pod 的状态:
kubectl get po -n nfs
三.验证挂载
现在我们已经创建了 PV、PVC 和 Pod,我们需要测试是否可以从 Pod 访问 NFS 存储。
要验证挂载是否成功,我们可以 exec 到 Pod 中并检查 /mnt/nfs 目录中是否存在文件。运行以下命令:
kubectl exec -it nfs-pod -n nfs /bin/bash
注意这里的 nfs-pod 是你创建的 Pod 名称。在容器中,运行下面的命令来创建一个文件:
echo "Hello NFS" > /mnt/nfs/hello.txt
然后从本地再次挂载目录并检查文件内容:
mkdir test sudo mount 127.0.0.1:/exports test cat test/hello.txt
如果一切正常,你应该看到输出了“Hello NFS”。这表明从 Pod 中访问 NFS 存储是成功的。
总结:
在 Kubernetes 中使用 NFS 共享存储是一个简单而实用的解决方案。可以轻松实现数据持久化不丢失。我们可以使用一个单独的pod来提供这个 NFS 服务器 或使用现有的 NAS 安装。在日常使用中,需要注意权限、大小、滚动更新等问题。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65b216f1add4f0e0ffb430aa