持久化存储是安装 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 插件:

多存储解决方案


如果打算安装多个存储插件,那么只能将其中一个设置为默认存储类型。否则,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-system
sources:
chart:
name: nfs-client-provisioner
path: /root/kubesphere-all-v3.1.1-offline-linux-amd64/charts
values:
- 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存储_5e

 

KubeSphere 添加NFS存储_存储系统_02

如果创建的通过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/