持久化存储是安装 KubeSphere 的必备条件。使用 KubeKey 搭建 KubeSphere 集群时,可以安装不同的存储系统作为插件。在 Linux 上通过 KubeKey 安装 KubeSphere 的一般步骤如下:
- 安装 Kubernetes。
- 安装所提供的任何插件。
- 通过 ks-installer 安装 KubeSphere。
在第 2 步中,必须安装可用的 StorageClass,包括:
- StorageClass 本身
- 必要情况下,还需为 StorageClass 安装存储插件
备注
某些存储系统需要您预先准备存储服务器,以提供外部存储服务。
KubeKey 如何安装不同的存储系统
KubeKey 会为集群创建一个配置文件(默认为 config-sample.yaml
),其中包含定义不同资源(包括各种插件)的全部必要参数。QingCloud CSI 等不同的存储系统也能通过 Helm Chart 或 YAML 作为插件进行安装。若要让 KubeKey 以预期的方式来安装这些存储系统,就必须为 KubeKey 提供这些存储系统的必要配置。
通常,有两种方法能使 KubeKey 应用即将安装的存储系统的配置。
- 直接在
config-sample.yaml
中的addons
字段下输入必要的参数。 - 为插件创建一个单独的配置文件,列出所有必要的参数,并在
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 将无法识别使用哪种存储类型。
[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
[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% /
如果创建的通过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/