K8S NFS持久存储配置

K8S NFS 持久存储配置

在Kubernetes(K8S)中配置NFS(Network File System)作为持久存储通常涉及以下步骤:

1. 准备 NFS 服务器

首先,你需要一个运行NFS服务的服务器。这可以是Kubernetes集群中的一个节点,也可以是集群外部的服务器。

1.1 安装 NFS 服务

在NFS服务器上,安装NFS服务软件包。这通常可以通过包管理器来完成。例如,在基于Debian的系统上,你可以使用以下命令:

bash

|---|---------------------------------------------------|
| | sudo apt-get update |
| | sudo apt-get install nfs-kernel-server nfs-common |

1.2 创建共享目录

在NFS服务器上,创建一个目录作为共享点。例如:

bash

|---|-------------------------------|
| | sudo mkdir /path/to/nfs/share |

1.3 配置 NFS 共享

编辑NFS服务器的/etc/exports文件,添加共享目录及其访问权限。例如:

bash

|---|----------------------------------------------------------------------------------|
| | echo "/path/to/nfs/share *(rw,sync,no_root_squash)" | sudo tee -a /etc/exports |

1.4 重启 NFS 服务

在NFS服务器上重启NFS服务,使配置生效:

bash

|---|------------------------------------------|
| | sudo systemctl restart nfs-kernel-server |

2. Kubernetes 集群中配置 NFS 客户端

在Kubernetes集群的每个节点上,你需要安装NFS客户端工具,以便它们可以挂载NFS共享。

2.1 安装 NFS 客户端

在每个Kubernetes节点上安装NFS客户端软件包:

bash

|---|---------------------------------|
| | sudo apt-get install nfs-common |

3. 创建 PersistentVolume (PV)

在Kubernetes中,你需要创建一个PersistentVolume(PV)资源来代表NFS共享。PV是集群中的一块存储,可以由PersistentVolumeClaim(PVC)来请求。

下面是一个PV的YAML示例,它使用NFS作为后端存储:

yaml

|---|---------------------------------------|
| | apiVersion: v1 |
| | kind: PersistentVolume |
| | metadata: |
| | name: nfs-pv |
| | spec: |
| | capacity: |
| | storage: 1Gi |
| | volumeMode: Filesystem |
| | accessModes: |
| | - ReadWriteMany |
| | persistentVolumeReclaimPolicy: Retain |
| | nfs: |
| | path: /path/to/nfs/share |
| | server: nfs-server-ip |

在这个示例中,capacity定义了存储的大小,volumeMode指定了卷的类型(这里是文件系统),accessModes定义了卷的访问模式(这里是读写多个节点),nfs部分包含了NFS服务器的IP地址和共享路径。

4. 创建 PersistentVolumeClaim (PVC)

然后,你需要在需要访问NFS存储的Pod中创建一个PersistentVolumeClaim(PVC)。PVC是用户对存储的请求。

下面是一个PVC的YAML示例:

yaml

|---|-----------------------------|
| | apiVersion: v1 |
| | kind: PersistentVolumeClaim |
| | metadata: |
| | name: nfs-pvc |
| | spec: |
| | accessModes: |
| | - ReadWriteMany |
| | resources: |
| | requests: |
| | storage: 1Gi |

在这个示例中,accessModes指定了所请求的访问模式,resources.requests.storage指定了所需的存储容量。

5. Pod 中使用 PVC

最后,在你的Pod配置中,你可以通过定义一个卷(Volume)来引用PVC,并在容器中使用这个卷。

下面是一个Pod配置示例,它使用了之前创建的PVC:

yaml

|---|-------------------------------|
| | apiVersion: v1 |
| | kind: Pod |
| | metadata: |
| | name: my-pod |
| | spec: |
| | containers: |
| | - name: my-container |
| | image: my-image |
| | volumeMounts: |
| | - name: nfs-volume |
| | mountPath: /path/to/mount/nfs |
| | volumes: |
| | - name: nfs-volume |
| | persistentVolumeClaim: |
| | claimName: nfs-pvc |

在这个示例中,volumeMounts定义了容器内部的挂载点,而volumes部分指定了使用哪个PVC。

6. 验证配置

一旦Pod被创建,你可以通过执行kubectl exec命令进入Pod,并检查挂载点是否可用。你也可以查看Pod的描述信息来确认卷是否已成功挂载。

请注意,这些步骤提供了一个基本的指南,并可能需要根据你的具体环境和需求进行调整。例如,你可能需要为NFS服务器配置防火墙规则,以确保Kubernetes节点可以访问NFS共享。此外,NFS版本(例如NFSv3或NFSv4)和网络配置也可能需要特别关注。

相关推荐
虎头金猫2 天前
4K 视频总卡在公网带宽?用 N1 + OpenList 把网盘播放链路重新理顺
运维·服务器·网络·python·容器·beautifulsoup·pandas
分布式存储与RustFS2 天前
MinIO 官方 Docker 镜像被移除:依赖它的项目该怎么办
docker·云原生·devops·对象存储·minio·分布式存储
codeejun2 天前
每日一Go·MySQL-5、锁机制全解析
云原生·golang
赵文宇(温玉)2 天前
CoreDNS的hosts插件的缺行配置导致k8s集群异常
容器·kubernetes·rancher
guo_wen_qiang2 天前
上传本地镜像到harbor中
docker·容器·持续部署
张洛闻Eren2 天前
k8s云原生【第十课】:水平 Pod 自动扩缩容
运维·数据库·云原生·kubernetes·github
忆~遂愿2 天前
本地片库怎么在外面打开?Plex + cpolar 搭一套可远程访问的私人影音库
docker·容器
Thneonl2 天前
你的 Pod 为什么 Pending:调度器两阶段
后端·kubernetes
不吃香菜kkk、2 天前
CI/CD(GitOps)学习与部署手册
运维·云原生·容器·kubernetes·云计算·jenkins·argocd
ChaITSimpleLove2 天前
云原生性能对决:JDK21虚拟线程+GraalVM vs .NET10/11 技术栈深度对比
微服务·云原生·serverless·graalvm native·native aot·runtime async·.net11/java21