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


声明:本文转载自https://my.oschina.net/u/2306127/blog/1820434,转载目的在于传递更多信息,仅供学习交流之用。如有侵权行为,请联系我,我会及时删除。

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

简介

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

安装Chart

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

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

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

卸载 Chart

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

$ helm delete my-release

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

配置

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

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作为例子。

持久化

该 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.

建议的持久化配置例子

下面是一个建议的配置例子,当另外的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绑定提供需要的名称。

必要的 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 

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

persistence:   enabled: true   storageClass: "-"   size: 200Gi  storageClass:   defaultClass: true  nodeSelector:   kubernetes.io/hostname: {node-name} 

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

必要的 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上。这对于产品生产环境的部署来说不一定合适。

本文发表于2018年05月29日 22:00
(c)注:本文转载自https://my.oschina.net/u/2306127/blog/1820434,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如有侵权行为,请联系我们,我们会及时删除.

阅读 4548 讨论 1 喜欢 0

抢先体验

扫码体验
趣味小程序
文字表情生成器

闪念胶囊

你要过得好哇,这样我才能恨你啊,你要是过得不好,我都不知道该恨你还是拥抱你啊。

直抵黄龙府,与诸君痛饮尔。

那时陪伴我的人啊,你们如今在何方。

不出意外的话,我们再也不会见了,祝你前程似锦。

这世界真好,吃野东西也要留出这条命来看看

快捷链接
网站地图
提交友链
Copyright © 2016 - 2021 Cion.
All Rights Reserved.
京ICP备2021004668号-1