当前位置: 代码迷 >> 综合 >> KubeSphere 添加NFS存储
  详细解决方案

KubeSphere 添加NFS存储

热度:65   发布时间:2023-09-30 12:41:23.0

持久化存储是安装 KubeSphere 的必备条件。使用 KubeKey 搭建 KubeSphere 集群时,可以安装不同的存储系统作为插件。在 Linux 上通过 KubeKey 安装 KubeSphere 的一般步骤如下:

  1. 安装 Kubernetes。
  2. 安装所提供的任何插件。
  3. 通过 ks-installer 安装 KubeSphere。

在第 2 步中,必须安装可用的 StorageClass,包括:

  • StorageClass 本身
  • 必要情况下,还需为 StorageClass 安装存储插件

备注

某些存储系统需要您预先准备存储服务器,以提供外部存储服务。

KubeKey 如何安装不同的存储系统


KubeKey 会为集群创建一个配置文件(默认为 config-sample.yaml),其中包含定义不同资源(包括各种插件)的全部必要参数。QingCloud CSI 等不同的存储系统也能通过 Helm Chart 或 YAML 作为插件进行安装。若要让 KubeKey 以预期的方式来安装这些存储系统,就必须为 KubeKey 提供这些存储系统的必要配置。

通常,有两种方法能使 KubeKey 应用即将安装的存储系统的配置。

  1. 直接在 config-sample.yaml 中的 addons 字段下输入必要的参数。
  2. 为插件创建一个单独的配置文件,列出所有必要的参数,并在 config-sample.yaml 中提供文件的路径,以便 KubeKey 在安装过程中引用该路径。

默认存储类型


KubeKey 支持安装不同的存储插件和存储类型。无论您要安装哪种存储系统,都可以在其配置文件中指定是否设为默认存储类型。如果 KubeKey 检测到未指定默认存储类型,则将默认安装 OpenEBS。

OpenEBS 本地 PV 动态供应器可以使用节点上的唯一 HostPath(目录)来创建 Kubernetes 本地持久卷,以持久化数据。用户没有特定的存储系统时,可以通过默认的 OpenEBS 快速上手。

支持的 CSI 插件


Kuberentes 此前已宣布将在 1.21 版本中移除树内 (in-tree) 存储插件。有关更多信息,请参见 Kubernetes In-Tree to CSI Volume Migration Moves to Beta。因此,建议您安装 CSI 插件。

支持的 CSI 插件:

  • neonsan-csi
  • qingcloud-csi
  • ceph-csi

多存储解决方案


如果打算安装多个存储插件,那么只能将其中一个设置为默认存储类型。否则,KubeKey 将无法识别使用哪种存储类型。

安装部署
上传? kubesphere master 节点,解压缩
[root@master01 charts]# ls
csi-neonsan  csi-qingcloud  nfs-client-provisioner[root@master01 nfs-client-provisioner]# pwd
/root/charts/nfs-client-provisioner[root@master01 nfs-client-provisioner]# ls
Chart.yaml  ci  OWNERS  README.md  templates  values.yaml
准备好 nfs 存储服务,本环境使?的为?件存储 vNAS IP 地址为:192.168.100.3,共享?录
为: /mnt/shared_dir ,存储权限: rw,insecure,sync,no_subtree_check,no_root_squash\
[root@jenkins-agent kubernetes]# pwd
/ifs/kubernetes[root@jenkins-agent kubernetes]# cat /etc/exports
/ifs/kubernetes 192.168.100.0/24(rw,sync,no_all_squash,no_subtree_check)[root@master01 ~]# showmount -e 192.168.100.3
Export list for 192.168.100.3:
/ifs/kubernetes 192.168.100.0/24

config-sample.yaml 添加如下对接nfs存储

  addons:- name: nfs-client namespace: kube-systemsources:chart:name: nfs-client-provisionerpath: /root/kubesphere-all-v3.1.1-offline-linux-amd64/chartsvalues:- nfs.server=192.168.0.22- nfs.path=/mnt/kube- image.repository=registry.cn-beijing.aliyuncs.com/kubesphereio/nfs-subdir-external-provisioner- image.tag=v4.0.2- storageClass.defaultClass=true

请特别注意 addons 字段,您必须在该字段下提供 NFS-client 的信息。

  • storageClass.defaultClass 字段决定是否将 NFS-client Provisioner 的存储类型设置为默认存储类型。如果您输入 false,KubeKey 将安装 OpenEBS 来提供本地存储卷,您在集群上创建工作负载时,不会动态供应本地存储卷。安装 KubeSphere 之后,您可以直接在控制台上更改默认存储类型。
[root@master01 charts]# helm upgrade --install nfs-client  --set nfs.server=192.168.0.22 --set nfs.path=/mnt/kube --set image.repository=registry.cn-beijing.aliyuncs.com/kubesphereio/nfs-subdir-external-provisioner --set image.tag=v4.0.2 nfs-client-provisioner  -n kube-system 
Release "nfs-client" does not exist. Installing it now.
NAME: nfs-client
LAST DEPLOYED: Mon Aug  2 15:39:08 2021
NAMESPACE: kube-system
STATUS: deployed
REVISION: 1
TEST SUITE: None
You have new mail in /var/spool/mail/root
[root@master01 ~]# helm list -A
NAME                	NAMESPACE                   	REVISION	UPDATED                                	STATUS  	CHART                       	APP VERSION
ks-redis            	kubesphere-system           	1       	2021-08-31 19:40:21.389229637 +0800 CST	deployed	redis-ha-3.9.0              	5.0.5      
nfs-client          	kube-system                 	1       	2021-08-31 19:38:50.206108647 +0800 CST	deployed	nfs-client-provisioner-1.2.8	3.1.0      
notification-manager	kubesphere-monitoring-system	1       	2021-08-31 19:41:44.671151912 +0800 CST	deployed	notification-manager-1.0.0  	1.0.0      
snapshot-controller 	kube-system                 	1       	2021-08-31 19:40:07.967542711 +0800 CST	deployed	snapshot-controller-0.1.0   	2.1.1  
[root@master01 ~]# kubectl get pvc --all-namespaces
NAMESPACE                      NAME                                 STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
kubesphere-monitoring-system   prometheus-k8s-db-prometheus-k8s-0   Bound    pvc-01e67c5e-50f4-4bd4-ae40-b188c86c5293   20Gi       RWO            nfs-client     36m
kubesphere-monitoring-system   prometheus-k8s-db-prometheus-k8s-1   Bound    pvc-61e2d87a-e56c-43cd-96f6-a6552efbea6a   20Gi       RWO            nfs-client     36m
kubesphere-system              data-redis-ha-server-0               Bound    pvc-45eb62a4-312f-47c4-8419-6fedebd332a9   2Gi        RWO            nfs-client     38m
kubesphere-system              data-redis-ha-server-1               Bound    pvc-f65e220f-2c2d-4d43-999a-a5f97cfa27f2   2Gi        RWO            nfs-client     38m
kubesphere-system              data-redis-ha-server-2               Bound    pvc-3320370f-f0d9-47ba-8967-a21afcb14d7e   2Gi        RWO            nfs-client     37m[root@master01 ~]# kubectl get pv
NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                                                             STORAGECLASS   REASON   AGE
pvc-01e67c5e-50f4-4bd4-ae40-b188c86c5293   20Gi       RWO            Delete           Bound    kubesphere-monitoring-system/prometheus-k8s-db-prometheus-k8s-0   nfs-client              37m
pvc-3320370f-f0d9-47ba-8967-a21afcb14d7e   2Gi        RWO            Delete           Bound    kubesphere-system/data-redis-ha-server-2                          nfs-client              38m
pvc-45eb62a4-312f-47c4-8419-6fedebd332a9   2Gi        RWO            Delete           Bound    kubesphere-system/data-redis-ha-server-0                          nfs-client              38m
pvc-61e2d87a-e56c-43cd-96f6-a6552efbea6a   20Gi       RWO            Delete           Bound    kubesphere-monitoring-system/prometheus-k8s-db-prometheus-k8s-1   nfs-client              37m
pvc-f65e220f-2c2d-4d43-999a-a5f97cfa27f2   2Gi        RWO            Delete           Bound    kubesphere-system/data-redis-ha-server-1                          nfs-client              38m

nfs目录名称=命名空间+命名空间下的pvc_name+pv_name 

[root@jenkins-agent kubernetes]# ls
default-my-pvc3-pvc-3d36c173-2846-4b60-81b3-72c9ea710b2e
kubesphere-monitoring-system-prometheus-k8s-db-prometheus-k8s-0-pvc-01e67c5e-50f4-4bd4-ae40-b188c86c5293
kubesphere-monitoring-system-prometheus-k8s-db-prometheus-k8s-1-pvc-61e2d87a-e56c-43cd-96f6-a6552efbea6a
kubesphere-system-data-redis-ha-server-0-pvc-45eb62a4-312f-47c4-8419-6fedebd332a9
kubesphere-system-data-redis-ha-server-1-pvc-f65e220f-2c2d-4d43-999a-a5f97cfa27f2
kubesphere-system-data-redis-ha-server-2-pvc-3320370f-f0d9-47ba-8967-a21afcb14d7e
[root@jenkins-agent kubernetes]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1        20G   13G  5.8G  70% /

KubeSphere 添加NFS存储

 KubeSphere 添加NFS存储

如果创建的通过sc创建的pvc处于pending状态,查看信息如下 

 failed to provision volume with StorageClass "nfs-storage-provisioner": unable to create directory to provision new pv: permission denied

那么chmod -R 777 nfs_path

[root@jenkins-agent ~]# ls -ld /ifs
drwxrwxrwx 3 root root 4096 Aug 23 20:43 /ifs
[root@jenkins-agent ~]# ls -ld /ifs/kubernetes/
drwxrwxrwx 8 root root 4096 Aug 31 19:41 /ifs/kubernetes/