kubernetes(k8s) 配置nfs动态卷实现StatefulSet的持久化存储

本文介绍了在kubernetes(k8s)环境中,通过配置nfs动态卷来实现StatefulSet有状态服务的持久化存储。详细步骤包括设置nfs服务、rbac权限、nfs-provisioner、storageclass,以及通过volumeClaimTemplates在StatefulSet中应用动态卷。测试结果显示,当删除pod时,数据被归档并保留在nfs服务器上。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概述

    我们知道,平时kubernetes在部署无状态服务的时候,并不需要太多考虑持久化存储的事情,直接通过volume挂载网络存储,比如常见的nfs就能实现文件共享存储。

    但是如果在有状态服务中,你就会需要很多的问题,比如:当你部署一些集群服务的时候:

1. 不可以用共享存储,因为每个服务的数据都不能相同。

2. 不可以直接用node的本地路径进行挂载,因为pod的随机性,一个node可能会跑多个pod副本,则会造成冲突。

3. 数据量可能会很大,可能需要使用外部存储,或者独立的磁盘,云盘等

4. 就算用pv,pvc也很不方便,需要你提前手动创建,不方便扩展。

 

   然后我们细数一下k8s里的持久化存储,总的分为两种,静态卷和动态卷。静态卷就是刚才我们说的,volume挂载,或者通过手动创建pv,pvc进行挂载。都属于静态卷。而动态卷,则是将一个网络存储作为一个StorageClass类,通过自己的配置,来动态的创建pv,pvc并进行绑定,这样就可以实现动态的存储生成与持久化保存。

    具体详细的k8s的存储系统知识我这里就不想洗说明,有兴趣的自行百度,谷歌就可以了,先了解一下k8s的存储,再来看如何实现

   下面我们就说一下,怎么通过nfs动态卷来实现有状态服务的储存。

 

正文

环境:

kubernetes  v1.12.2 

centos7

这里以搭建neo4j 因果集群为例,展示nfs动态卷的使用,namespace为neo4j。

nfs动态卷的整体结构大致如下图,用户通过yaml创建StatefulSet,StatefulSet找到StorageClass,StorageClass指定到nfs-provisioner为nfs的pv提供者,这是一个pod的服务,用来自动生成pv的,此pod来绑定到对应的nfs服务。以此来通过nfs服务进行动态的pv生成,然后通过StatefulSet的pvc,与pod进行绑定,实现数据的持久化存储。

 

 

1.  搭建好nfs服务

nfs服务的搭建,请看:《centos7.2 配置NFS文件服务器,远程共享文件》

我这里搭建好nfs后,创建文件夹 /opt/nfs 作为主目录进行,配置如下: 

# 172.18.0.0/16是我的内网网段,自己根据情况自定义
/opt/nfs 172.18.0.0/16(rw,sync,no_root_squash)

nfs服务的ip为:172.18.196.238

 

2. 配置rbac权限

由于我这里以neo4j为namespace,所以先创建namespace.yaml 文件,内容如下:

---
apiVersion: v1
kind: Namespace
metadata:
   name: neo4j
   labels:
     name: neo4j

执行此yaml文件,创建neo4j的命名空间,以保证下面的使用

kubectl create -f namespace.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值