文档章节

Kubernetes存储系统-NFS Server的Helm部署

openthings
 openthings
发布于 2018/05/29 12:09
字数 1776
阅读 1889
收藏 4

Kubernetes存储系统-NFS Server的Helm部署

其它参考:

NFS Server Provisioner 是Kubernetes源码外部的动态存储提供者,底层是通过NFS(网络文件系统)来提供的。你可以通过它快速地部署一个几乎可以在任何地方使用的网络共享存储。

该Helm chart 将会部署一个Kubernetes的 external-storage projects nfs 提供者,包含一个内建的NFS server,但是不会连接到一个已经存在的NFS server上(可以通过PV直接使用)。连接到已有的 NFS Server可以通过 NFS Client Provisioner 来访问。

$ helm install stable/nfs-server-provisioner

警告:上面的命令按照缺省参数安装,这虽然能够工作,但是存储在该卷上的数据将不会被持久保存到磁盘上。

注意:在运行时上面的命令之前,建议运行helm repo update来更新charts库到最新版本。如果通过代理访问,可以使用如下的命令(修改https_proxy为自己的代理服务地址):

sudo https_proxy=http://192.168.199.99:9999 helm repo update

1、简介

本项目的chart启动了一个nfs-server-provisioner部署,在Kubernetes集群上使用Helm包管理器来安装。

2、安装Chart

安装 chart ,版本名称去为 my-release,如下:

$ helm install stable/nfs-server-provisioner --name my-release

该命令使用缺省配置在Kubernetes上安装nfs-server服务器。该 configuration 节的参数列表可以在安装期间进行配置。

3、卸载 Chart

为了卸载/删除 my-release deployment,运行:

$ helm delete my-release

该命令将删除所有安装到kuubernetes中的组件。

4、配置

下面的表格列出了可以配置的参数:

Parameter Description Default
imagePullSecrets Specify image pull secrets nil (does not add image pull secrets to deployed pods)
image.repository The image repository to pull from quay.io/kubernetes_incubator/nfs-provisioner
image.tag The image tag to pull from v1.0.8
image.pullPolicy Image pull policy IfNotPresent
service.type service type ClusterIP
service.nfsPort TCP port on which the nfs-server-provisioner NFS service is exposed 2049
service.mountdPort TCP port on which the nfs-server-provisioner mountd service is exposed 20048
service.rpcbindPort TCP port on which the nfs-server-provisioner RPC service is exposed 51413
service.nfsNodePort if service.type is NodePort and this is non-empty, sets the nfs-server-provisioner node port of the NFS service nil
service.mountdNodePort if service.type is NodePort and this is non-empty, sets the nfs-server-provisioner node port of the mountd service nil
service.rpcbindNodePort if service.type is NodePort and this is non-empty, sets the nfs-server-provisioner node port of the RPC service nil
persistence.enabled Enable config persistence using PVC false
persistence.storageClass PVC Storage Class for config volume nil
persistence.accessMode PVC Access Mode for config volume ReadWriteOnce
persistence.size PVC Storage Request for config volume 1Gi
storageClass.create Enable creation of a StorageClass to consume this nfs-server-provisioner instance true
storageClass.provisionerName The provisioner name for the storageclass cluster.local/{release-name}-{chart-name}
storageClass.defaultClass Whether to set the created StorageClass as the clusters default StorageClass false
storageClass.name The name to assign the created StorageClass nfs
resources Resource limits for nfs-server-provisioner pod {}
nodeSelector Map of node labels for pod assignment {}
tolerations List of node taints to tolerate []
affinity Map of node/pod affinities {}
$ helm install stable/nfs-server-provisioner --name my-release \
  --set=image.tag=v1.0.8,resources.limits.cpu=200m

可选的方法,通过YAML文件来指定这些参数,例如:

$ helm install stable/nfs-server-provisioner --name my-release -f values.yaml

提示: 你可以使用缺省的 values.yaml作为例子。

5、持久化

该 nfs-server-provisioner 镜像文件存储了它的配置数据,更重要的是, 其 dynamic volumes 所管理的 /export 路径。

The chart mounts a Persistent Volume volume at this location. The volume can be created using dynamic volume provisioning. However, it is highly recommended to explicitly specify a storageclass to use rather than accept the clusters default, or pre-create a volume for each replica.

If this chart is deployed with more than 1 replica, storageClass.defaultClass=true and persistence.storageClass, then the 2nd+ replica will end up using the 1st replica to provision storage - which is likely never a desired outcome.

5.1 建议的持久化配置例子

  • 下面的配置参数可以在values.yaml中修改,决定nfs-server-provisioner的基础配置。

下面是一个建议的配置例子,当另外的storage class存在用于提供持久化:

persistence:
  enabled: true
  storageClass: "standard"
  size: 200Gi

storageClass:
  defaultClass: true

在很多集群上,cloud provider集成将创建一个 "standard" storage class,其将创建一个 volume (e.g. a Google Compute Engine Persistent Disk or Amazon EBS volume) 来提供持久性。

下面是没有另外的 storage class提供持久化的例子:

persistence:
  enabled: true
  storageClass: "-"
  size: 200Gi

storageClass:
  defaultClass: true

在这个配置中, PersistentVolume 必须为每一个复制创建,使其可用。安装Helm chart,然后查看 PersistentVolumeClaim 将会创建并为你的 PersistentVolume绑定提供需要的名称。

  • 在gce上部署基础nfs-server-provisioner服务

必要的 PersistentVolume例子:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: data-nfs-server-provisioner-0
spec:
  capacity:
    storage: 200Gi
  accessModes:
    - ReadWriteOnce
  gcePersistentDisk:
    fsType: "ext4"
    pdName: "data-nfs-server-provisioner-0"
  claimRef:
    namespace: kube-system
    name: data-nfs-server-provisioner-0
  • 在本地机器上部署基础nfs-server-provisioner服务

下面是运行在裸机上的配置例子,使用hostPath存储卷类型:

persistence:
  enabled: true
  storageClass: "-"
  size: 200Gi

storageClass:
  defaultClass: true

nodeSelector:
  kubernetes.io/hostname: {node-name}

在这个配置中, PersistentVolume 必须为每一个复制创建,使其可用。安装 Helm chart,然后查看 PersistentVolumeClaim's已经创建并为 PersistentVolume 的绑定提供需要的名称。

5.2 创建PV

必要的 PersistentVolume的例子:

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: kube-system
    name: data-nfs-server-provisioner-0

警告: hostPath volumes 不能在Kubernetes集群的不同节点机器间迁移。 因此,我们限制来了 nfs-server-provisioner pod运行在单个node上。这对于产品生产环境的部署来说不一定合适。

      至此,基于NFS的NFS提供者和PV卷已经部署完毕,可以通过创建PVC和使用PVC的Pod来访问,或者直接将PV服务mount到本地目录,可以直接读写。参见下面的5.3、5.4、5.5节内容。

5.3 创建PVC

保存下面的内容为nfs-pvc.yaml:

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

运行:

kubectl create -f nfs-pvc.yaml

到Persistent Volumes查看,将会为PVC自动创建一个PV。

5.4 使用PVC

在pod中,可以使用上面创建的pvc。保存下面的文件为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: v1
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

本Pod将进行一个写入文件操作。执行:

kubectl create -f nfs-pvc-client.yaml

然后到Dashboard的pods栏可以看到pod的启动情况,或者运行kubectl get pod -o wide查看列表。

⚠️注意

第一次部署上述的pod时,总是提示mount failed。在宿主机安装nfs的支持库后,刷新状态变为正常。

sudo apt install nfs-common nfs-kernel-server

如上所示,需要刷新Kubernetes的Dashboard控制面板。

5.5 直接连接

所创建的nfs-server是可以从外部通过nfs-client访问的,也可以mount到宿主机上去。如下操作:

sudo mount -t nfs 10.108.7.49:/export/pvc-faebddde-651e-11e8-a532-1831bfb4e036 /home/openthings/nfs

其中,10.108.7.49:/export/pvc-faebddde-651e-11e8-a532-1831bfb4e036 是上面通过pvc创建的pv,可以通过Kubernetes dashboard的Persistent Volumes查看里面的Source内容,然后替换进来。本地挂载目录 /home/openthings/nfs 需要用mkdir预先建好目录,可以替换成自己的目录。

© 著作权归作者所有

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

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

openthings
2018/09/15
610
0
用Helm Chart在Kubernetes上部署Fabric | 赠书活动

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/q48S71bCzBeYLOu9T0n/article/details/81611622 题图摄于犹他州 Bryce Canyon 我们之前的文章介绍了如何在 Ku...

亨利笔记
2018/08/12
0
0
Kubernetes-基于Rancher进行Kubernetes的离线安装

1、环境准备 在进行Kubernetes部署之前,需要提供其要求的软硬件环境。此文档描述的场景:在无法直接连接互联网的情况下,如何进行安装部署Kubernetes。 1.1 操作系统 操作系统推荐使用: Ub...

店家小二
2018/12/14
0
0
Kubernetes部署Fabric,使用Helm Chart

Hyperledger Fabric Deployment Using Helm Chart Posted on 2018/08/29 by Henry Zhang Henry Zhang, Jiahao Chen, Hui Hu, Wenkai Yin This blog post is to share the personal technical......

openthings
2018/09/19
129
0
Kubernetes运行监控-使用Helm快速部署Prometheus和Grafana

Kubernetes运行监控-使用Helm快速部署Prometheus和Grafana 使用Helm快速部署Pormetheus和Grafana非常方便,很多手工部署的方法不再需要了。 Kubernetes运行监控分为宿主机、容器以及Kuberne...

openthings
2018/06/12
2.5K
0

没有更多内容

加载失败,请刷新页面

加载更多

基于k8s的Ingress部署hexo博客(http和https)

注:kuberntes版本为1.15 什么是 Ingress Ingress 是一个提供对外服务的路由和负载均衡器,其本质是个nginx控制器服务。 k8s文档上Ingress经典数据链路图: internet | [ In...

Kanonpy
37分钟前
7
0
LNMP---访问控制

访问控制 扩展: curl命令用法: curl -v -A 'aaaaaspider/3.0' -e "1111" -x127.0.0.1:80 discuz.tobe.com -I -A 指定user-agent -e 指定referer -x 指定访问目标服务器的ip和por......

tobej
44分钟前
8
0
Python实现合并排序(归并排序)(一文看懂)

1、归并排序原理 归并排序采用分而治之的原理: 一、将一个序列从中间位置分成两个序列; 二、在将这两个子序列按照第一步继续二分下去; 三、直到所有子序列的长度都为1,也就是不可以再二分...

onedotdot
49分钟前
7
0
linux查询日志命令总结

【背景】 排查线上环境问题,少不了去线上查日志。而使用什么命令,能快速准确地查到我们需要查找地日志信息,也是我们需要掌握的一项技能。 【命令】 Linux查看命令有多种:tail,head,cat...

chen-chen-chen
今天
11
0
net/http 接收文件

代码展示,如何使用golang 自带net/http,将Form表单中提交上来的文件,指定位置保存。 ReadHtmlFile OutHtml(html网页,表单测试代码使用) SaveFile (处理提交文件) package mainimport...

听夜深窗外风
今天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部