文档章节

Kubernetes搭建NFS原生服务

openthings
 openthings
发布于 2018/06/21 10:50
字数 1515
阅读 964
收藏 0

Kubernetes搭建NFS原生服务

NFS是一个网络文件系统,可以将存储服务器的磁盘共享到集群范围内使用。虽然有Rook、CephFS、Gluster、Swift、Cinder、HDFS等集群存储系统以及Google、微软、百度的网盘,但NFS使用简单,性能也还不错,是快速自建集群的存储的首选方案,而且通过Kubernetes的PV/PVC等接口,以后还可以容易地迁移到新的存储系统。

使用NFS有几种情况:

这里主要介绍Kubernetes中新装NFS集群及其使用。

NFS支持Helm安装工具,按照下面操作:

但是,缺省情况下的安装是不支持持久化的,NFS服务的数据保存在临时目录中,关机会丢失数据,容量也有限。如果主机临时目录空间被耗光,还会导致主机奔溃。因此,需要将NFS的数据安装到持久卷(PV)中。在GCP云环境中,会提供StorageClass可以直接创建出PV。在私有环境中,可以使用HostPath创建PV,然后创建PVC,就可以了配置到NFS的Helm参数文件中进行NFS安装了。

第一步,创建宿主机PV和PVC

关于Kubernetes的存储架构,参考:

1、创建宿主机的PV

这里的pv和pvc是nfs服务所使用的,而不是nfs提供的,使用HostPath卷来提供。参考:

主要内容如下:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: data-nfs-server-provisioner-0
spec:
  capacity:
    storage: 200Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: /srv/volumes/data-nfs-server-provisioner-0
  claimRef:
    namespace: default
    name: data-nfs-server-nfs-server-provisioner-0

然后,运行:

kubectl create -f nfs-data-pv.yaml

基于HostPath创建的PV完成,可以到Kubernetes的Dashboard查看持久卷。其中数据的保存路径为path: /srv/volumes/data-nfs-server-provisioner-0。

2、创建供NFS存储的PVC

创建一个跟上面对应的PVC,配置文件如下(https://github.com/openthings/kubernetes-tools/blob/master/nfs/nfs-data-pvc.yaml):

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: data-nfs-server-nfs-server-provisioner-0
spec:
  storageClassName: ""
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 200Gi

运行:

kubectl create -f nfs-data-pvc.yaml

至此,NFS需要的基础存储已经准备好了。

第二步,安装NFS Provisioner

运行https://github.com/openthings/kubernetes-tools/blob/master/nfs/nfs-install.sh,内容如下:

helm install ./nfs-server-provisioner --name nfs-server --namespace default
  • 注意,一定要在上面第一步之后运行,否则将会自动使用StorageClass来创建所用的持久卷,而目前持久卷默认的是gcp/aws之类的云存储,会导致失败,一直处于pending状态。

其中的values.yaml文件做了一些修改,注意里面的这些部分。如下:

persistence:
  enabled: true

  storageClass: ""
  accessMode: ReadWriteOnce
  size: 200Gi

## For creating the StorageClass automatically:
storageClass:
  create: true

  defaultClass: false

  name: nfs

到Kubernetes的Dashboard查看NFS所提供的PV、StorageClass。注意这里的PV是逻辑上的,使用了上面第一步通过HostPath物理磁盘目录上创建的PV。

第三步,使用NFS的PV和PVC

1、创建PVC

首先,分配一个pvc,命名为nfs-pvc,内容如下(https://github.com/openthings/kubernetes-tools/blob/master/nfs/nfs-pvc.yaml):

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: nfs-pvc
spec:
  storageClassName: "nfs"
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 100Mi

2、创建应用

然后,创建一个测试应用,将使用nfs-pvc,内容如下(https://github.com/openthings/kubernetes-tools/blob/master/nfs/nfs-pvc-client.yaml):

# This mounts the nfs volume claim into /mnt and continuously
# overwrites /mnt/index.html with the time and hostname of the pod. 
apiVersion: apps/v1beta1
kind: Deployment
metadata:  
  name: busybox-deployment
spec:  
  replicas: 1  
#  selector:    
#    name: busybox-deployment
  template:    
    metadata:      
      labels:        
        name: busybox-deployment    
    spec:      
      containers:      
      - image: busybox        
        command:          
        - sh          
        - -c          
        - 'while true; do date > /mnt/index.html; hostname >> /mnt/index.html; sleep $(($RANDOM % 5 + 5)); done'        
        imagePullPolicy: IfNotPresent        
        name: busybox        
        volumeMounts:          
        # name must match the volume name below          
        - name: nfs            
          mountPath: "/mnt"     
      # 
      volumes:      
      - name: nfs        
        persistentVolumeClaim:          
          claimName: nfs-pvc

3、查看持久化的数据

到宿主机,进入目录/srv/volumes/data-nfs-server-provisioner-0,可以看到NFS的配置、日志以及所分配的pv卷作为一个目录,里面包含了相应的数据(上面的pod生成的文件index.html)。

高级,多个磁盘的处理

  • 注意:
    • 通过NFS提供的存储服务,直接使用了物理磁盘,因此磁盘问题仍然会影响存储的可靠性、可用性。在kubernetes中运行主要改进了部署和管理的效率。
    • NFS不提供存储冗余、故障转移、复制等功能,如果需要使用更高级的Rook、Ceph、HDFS等复制性冗余存储系统。

上面的方法,是将一个宿主机目录映射为NFS的PV卷,然后在NFS上面可以分配若干个逻辑PV,通过PVC或者StorageClass动态创建。

如果要将多个设备磁盘挂载进PV卷,方法包括:

  • 有磁盘阵列的话,组装为一个逻辑盘。不过,JBOD之类的磁盘失效问题仍然是存在的。
  • 可以使用mount将其它磁盘作为子目录挂载进主目录,但其每个子目录容量取决于原始磁盘目录的大小,不能平滑延展。
  • 也可以将多个磁盘使用LVM首先组装为一个逻辑大盘,然后再挂载进来,可以作为一个磁盘整体进行存储操作。
  • 可以运行多个NFS实例。需要修改的配置参数比较多,不建议使用。

更多参考:

© 著作权归作者所有

openthings
粉丝 322
博文 1137
码字总数 687066
作品 1
东城
架构师
私信 提问
Kubernetes上建立WordPress博客

在Kubernetes上运行WordPress的好处是显而易见的。首先是安装非常简单(在已有集群的情况下),其次是可靠性更高,第三是规模可以伸缩。当然,可以在多个云之间更为容易地迁移也是非常重要的...

openthings
2018/09/15
564
0
浅析kubernetes创建Pv、Pvc、Deployment

浅析kubernetes创建Pv、Pvc、Deployment 基本环境 创建有状态服务的操作顺序 创建PV 我这里使用的是NFS服务,点击NFS部署及优化,搭建自己的NFS服务。 创建PVC 创建Deployment...

品鉴初心
2018/07/24
0
0
Harbor快速部署到Kubernetes集群及登录问题解决

Harbor(https://goharbor.io)是一个功能强大的容器镜像管理和服务系统,用于提供专有容器镜像服务。随着云原生架构的广泛使用,原来由VMWare开发的Harbor也加入了云原生基金会(参考《Har...

openthings
02/23
437
2
JupyterHub on Kubernetes-Helm安装

JupyterHub on Kubernetes-Helm安装 本文编译自 https://zero-to-jupyterhub.readthedocs.io/en/latest/setup-jupyterhub.html 本文地址,https://my.oschina.net/u/2306127/blog/1836933,b......

openthings
2018/06/28
765
0
Rook 0.8 安装及Dashboard的问题和解决

Rook(https://rook.io)已经到了0.8版本,并且进入CNCF的孵化器。Rook是一个容器存储框架,已经率先支持Ceph(http://docs.ceph.org.cn/start/intro/)分布式文件系统。 这里介绍其安装过程,其...

openthings
2018/09/15
478
0

没有更多内容

加载失败,请刷新页面

加载更多

springboot2.0 maven打包分离lib,resources

springboot将工程打包成jar包后,会出现获取classpath下的文件出现测试环境正常而生产环境文件找不到的问题,这是因为 1、在调试过程中,文件是真实存在于磁盘的某个目录。此时通过获取文件路...

陈俊凯
今天
6
0
BootStrap

一、BootStrap 简洁、直观、强悍的前端开发框架,让web开发更加迅速、简单 中文镜像网站:http://www.bootcss.com 用于开发响应式布局、移动设备优先的WEB项目 1、使用boot 创建文件夹,在文...

wytao1995
今天
10
0
小知识:讲述Linux命令别名与资源文件的区别

别名 别名是命令的快捷方式。为那些需要经常执行,但需要很长时间输入的长命令创建快捷方式很有用。语法是: alias ppp='ping www.baidu.com' 它们并不总是用来缩短长命令。重要的是,你将它...

老孟的Linux私房菜
今天
8
0
《JAVA核心知识》学习笔记(6. Spring 原理)-5

它是一个全面的、企业应用开发一站式的解决方案,贯穿表现层、业务层、持久层。但是 Spring 仍然可以和其他的框架无缝整合。 6.1.1. Spring 特点 6.1.1.1. 轻量级 6.1.1.2. 控制反转 6.1.1....

Shingfi
今天
8
0
Excel导入数据库数据+Excel导入网页数据【实时追踪】

1.Excel导入数据库数据:数据选项卡------>导入数据 2.Excel导入网页数据【实时追踪】:

东方墨天
今天
11
1

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部