在 Kubernetes 中使用 NFS 共享存储的明细步骤

在 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 存储。

  1. 创建一个 NFS 命名空间:

在 kubernetes 中使用命名空间是一个好习惯,这有助于隔离对象。

apiVersion: v1
kind: Namespace
metadata:
  name: nfs
  1. 创建 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
  1. 创建 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
  1. 创建 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