持久化存储配置说明
目前,Installer 支持以下类型的存储作为存储服务端,为 KubeSphere 提供持久化存储 (更多的存储类型持续更新中):
- NFS
- Ceph RBD
- GlusterFS
- QingCloud 云平台块存储
- QingStor NeonSAN
- 阿里云块存储
- 腾讯云块存储
- Local Volume (默认,仅部署测试使用)
Installer 对接的开源存储服务端和客户端,以及 CSI 插件,已测试过的版本信息如下:
名称 | 版本 | 参考 |
---|---|---|
Ceph RBD Server | v0.94.10 | 若用于测试部署可参考 部署 Ceph 存储服务端,如果是正式环境搭建请参考 Ceph 官方文档 |
Ceph RBD Client | v12.2.5 | 在安装 KubeSphere 前仅需在 common.yaml 配置相应参数即可对接其存储服务端,参考 Ceph RBD |
GlusterFS Server | v3.7.6 | 若用于测试部署可参考 部署 GlusterFS 存储服务端, 如果是正式环境搭建请参考 Gluster 官方文档 或 Gluster Docs ,并且需要安装 Heketi 管理端 (v3.0.0) |
GlusterFS Client | v3.12.10 | 在安装 KubeSphere 前仅需在 common.yaml 配置相应参数即可对接其存储服务端,配置详见 GlusterFS |
NFS Client | v3.1.0 | 在安装 KubeSphere 前仅需在 common.yaml 配置相应参数即可对接其存储服务端,详见 NFS Client |
QingCloud-CSI | v0.2.0.1 | 在安装 KubeSphere 前仅需在 common.yaml 配置相应参数,详见 QingCloud CSI |
NeonSAN-CSI | v0.3.0 | 在安装 KubeSphere 前仅需在 common.yaml 配置相应参数,详见 Neonsan-CSI |
阿里云 CSI | v1.14.5 | 在安装 KubeSphere 前仅需在 plugin-aliyun.yaml 配置相应参数,详见 Aliyun CSI |
腾讯云 CSI | v1.0.0 | 在安装 KubeSphere 前仅需在 plugin-tencentcloud.yaml 配置相应参数,详见 TencentCloud-CSI |
说明:集群中不可同时存在两个默认存储类型,若要指定默认存储类型前请先确保当前集群中无默认存储类型。
配置文件释义
准备了满足要求的存储服务端后,只需要参考以下表中的参数说明,在 conf/common.yaml
中,根据您存储服务端所支持的存储类型,在配置文件的相应部分参考示例或注释修改对应参数,即可完成集群存储类型的配置。以下对 common.yaml
存储相关的参数配置做简要说明 (参数详解请参考 storage classes )。
Local Volume(仅限开发测试环境)
Local Volume 配置文件(点击展开)
local_volume_enabled: true
local_volume_is_default_class: true
local_volume_storage_class: local
···
Local Volume 表示挂载的本地存储设备,如磁盘、分区或目录,仅建议用于测试部署与开发环境,在 conf/common.yaml
配置的释义如下。
Local Volume | Description |
---|---|
local_volume_provisioner_enabled | 是否使用 local volume 作为持久化存储, 是:true;否:false |
local_volume_provisioner_storage_class | 存储类型的名称, 默认:local |
local_volume_is_default_class | 是否设定为默认存储类型, 是:true;否:false |
NFS
NFS 配置文件(点击展开)
nfs_client_enabled: false
nfs_client_is_default_class: false
# Hostname of the NFS server(ip or hostname)
nfs_server: SHOULD_BE_REPLACED
# Basepath of the mount point
nfs_path: SHOULD_BE_REPLACED
nfs_vers3_enabled: false
nfs_archiveOnDelete: false
···
NFS 即网络文件系统,它允许网络中的计算机之间通过 TCP/IP 网络共享资源。需要预先准备 NFS 服务端,支持标准 NFS 协议的文件存储作为 NFS 服务端,例如:
- 阿里云 NAS
- QingCloud vNAS
- 华为云 SFS(NFS 协议的弹性文件服务)
- NetApp
- 以及其它的标准 NFS 协议的文件存储
在 conf/common.yaml
配置的释义如下。
关于在安装前如何配置 QingCloud vNas,本文档在 常见问题 - 安装前如何配置 QingCloud vNas 给出了一个详细的示例供参考,其它云平台的 NFS 存储可参考上述相关文档。
NFS | Description |
---|---|
nfs_client_enable | 是否使用 NFS 作为持久化存储,是:true;否:false |
nfs_client_is_default_class | 是否设定为默认存储类型,是:true;否:false 注:系统中存在多种存储类型时,只能设定一种为默认存储类型 |
nfs_server | 允许其访问的 NFS 服务端地址,可以是 IP 或 Hostname |
nfs_path | NFS 共享目录,即服务器上共享出去的文件目录,可参考 Kubernetes 官方文档 |
nfs_vers3_enabled | 指定要使用的 NFS 协议版本,默认 false 表示 v4,设置 true 则为 v3 |
nfs_archiveOnDelete | 指定 archiveOnDelete 为 false 时,则会自动删除 oldPath 下的所有数据,即 Pod 对应的数据持久化存储数据 |
Ceph RBD
Ceph RBD 配置文件(点击展开)
ceph_rbd_enabled: false
ceph_rbd_is_default_class: false
ceph_rbd_storage_class: rbd
# Ceph rbd monitor endpoints, for example
#
# ceph_rbd_monitors:
# - 172.24.0.1:6789
# - 172.24.0.2:6789
# - 172.24.0.3:6789
ceph_rbd_monitors:
- SHOULD_BE_REPLACED
# ceph admin account name
ceph_rbd_admin_id: admin
# ceph admin secret, for example,
# ceph_rbd_admin_secret: AQAnwihbXo+uDxAAD0HmWziVgTaAdai90IzZ6Q==
ceph_rbd_admin_secret: TYPE_ADMIN_ACCOUNT_HERE
ceph_rbd_pool: rbd
ceph_rbd_user_id: admin
# e.g. ceph_rbd_user_secret: AQAnwihbXo+uDxAAD0HmWziVgTaAdai90IzZ6Q==
ceph_rbd_user_secret: TYPE_ADMIN_SECRET_HERE
ceph_rbd_fsType: ext4
ceph_rbd_imageFormat: 1
# Additional ceph configurations
# ceph_rbd_imageFeatures: layering
···
Ceph RBD 是一个分布式存储系统,在 conf/common.yaml
配置的释义如下。
Ceph_RBD | Description |
---|---|
ceph_rbd_enabled | 是否使用 Ceph RBD 作为持久化存储,是:true;否:false |
ceph_rbd_storage_class | 存储类型名称 |
ceph_rbd_is_default_class | 是否设定为默认存储类型, 是:true;否:false 注:系统中存在多种存储类型时,只能设定一种为默认存储类型 |
ceph_rbd_monitors | 根据 Ceph RBD 服务端配置填写,可参考 Kubernetes 官方文档 |
ceph_rbd_admin_id | 能够在存储池中创建的客户端 ID ,默认: admin |
ceph_rbd_admin_secret | Admin_id 的 secret,安装程序将会自动在 kube-system 项目内创建此 secret |
ceph_rbd_pool | 可使用的 Ceph RBD 存储池 |
ceph_rbd_user_id | 用于映射 RBD 的 ceph 客户端 ID 默认: admin |
ceph_rbd_user_secret | User_id 的 secret,需注意在所使用 rbd image 的项目内都需创建此 Secret |
ceph_rbd_fsType | 存储卷的文件系统,kubernetes 支持 fsType,默认:ext4 |
ceph_rbd_imageFormat | Ceph RBD 格式,默认:"1" |
ceph_rbd_imageFeatures | 当 ceph_rbd_imageFormat 字段不为 1 时需填写此字段 |
注: 存储类型中创建 secret 所需 ceph secret 如
ceph_rbd_admin_secret
和ceph_rbd_user_secret
可在 ceph 服务端通过以下命令获得:
$ ceph auth get-key client.admin
GlusterFS
GlusterFS 配置文件(点击展开)
glusterfs_provisioner_enabled: false
glusterfs_provisioner_is_default_class: false
glusterfs_provisioner_storage_class: glusterfs
glusterfs_provisioner_restauthenabled: true
# e.g. glusterfs_provisioner_resturl: http://192.168.0.4:8080
glusterfs_provisioner_resturl: SHOULD_BE_REPLACED
# e.g. glusterfs_provisioner_clusterid: 6a6792ed25405eaa6302da99f2f5e24b
glusterfs_provisioner_clusterid: SHOULD_BE_REPLACED
glusterfs_provisioner_restuser: admin
glusterfs_provisioner_secretName: heketi-secret
glusterfs_provisioner_gidMin: 40000
glusterfs_provisioner_gidMax: 50000
glusterfs_provisioner_volumetype: replicate:2
# e.g. jwt_admin_key: 123456
jwt_admin_key: SHOULD_BE_REPLACED
···
GlusterFS 是一个开源的分布式文件系统,配置时需提供 heketi 所管理的 glusterfs 集群,在 conf/common.yaml
配置的释义如下。
GlusterFS | Description |
---|---|
glusterfs_provisioner_enabled | 是否使用 GlusterFS 作为持久化存储,是:true;否:false |
glusterfs_provisioner_storage_class | 存储类型的名称 |
glusterfs_is_default_class | 是否设定为默认存储类型,是:true;否:false 注:系统中存在多种存储类型时,只能设定一种为默认存储类型 |
glusterfs_provisioner_restauthenabled | Gluster 启用对 REST 服务器的认证 |
glusterfs_provisioner_resturl | Heketi 服务端 url |
glusterfs_provisioner_clusterid | Gluster 集群 id,登录 heketi 服务端输入 heketi-cli cluster list 得到 Gluster 集群 id |
glusterfs_provisioner_restuser | 能够在 Gluster pool 中创建 volume 的 Heketi 用户 |
glusterfs_provisioner_secretName | Secret 名称,安装程序将会在 kube-system 项目内自动创建此 Secret |
glusterfs_provisioner_gidMin | glusterfs_provisioner_storage_class 中 GID 的最小值,参数配置请参考 Kubernetes 官方文档 |
glusterfs_provisioner_gidMax | glusterfs_provisioner_storage_class 中 GID 的最大值,参数配置请参考 Kubernetes 官方文档 |
glusterfs_provisioner_volumetype | Volume 类型,参数配置请参考 Kubernetes 官方文档 |
jwt_admin_key | heketi 服务器中 /etc/heketi/heketi.json 的 jwt.admin.key 字段 |
注: Glusterfs 存储类型中所需的
glusterfs_provisioner_clusterid
可在 glusterfs 服务端通过以下命令获得:
$ export HEKETI_CLI_SERVER=http://localhost:8080
$ heketi-cli cluster list
QingCloud 云平台块存储
KubeSphere 支持使用 QingCloud 云平台块存储作为平台的存储服务,如果希望体验动态分配 (Dynamic Provisioning) 方式创建存储卷,推荐使用 QingCloud 云平台块存储,平台已集成 QingCloud-CSI 块存储插件支持对接块存储,仅需简单配置即可使用 QingCloud 云平台各种性能的块存储服务,并且支持扩容、拓扑、创建/删除快照以及基于快照创建 PVC。
QingCloud-CSI 块存储插件实现了 CSI 接口,并且支持 KubeSphere 使用 QingCloud 云平台的存储资源。块存储插件部署后,用户在 QingCloud 云平台可创建访问模式 (Access Mode) 为 单节点读写(ReadWriteOnce) 的存储卷并挂载至工作负载,包括以下几种类型:
- 容量型
- 基础型
- SSD 企业型
- 超高性能型
- 企业级分布式块存储 NeonSAN
注意:在 KubeSphere 集群内使用到性能型、超高性能型、企业型或基础型硬盘时,集群的主机类型也应与硬盘的类型保持一致。
在安装 KubeSphere 时配置 QingCloud-CSI 插件的参数说明如下三个表所示,安装配置 QingCloud-CSI 插件和 QingCloud 负载均衡器插件都需要下载 API 密钥来对接 QingCloud API。
QingCloud-API | Description |
---|---|
qingcloud_access_key_id , qingcloud_secret_access_key | 通过QingCloud 云平台控制台 的右上角账户图标选择 API 密钥 创建密钥获得 |
qingcloud_zone | zone 应与 Kubernetes 集群所在区相同,CSI 插件将会操作此区的存储卷资源。例如:zone 可以设置为 sh1a(上海一区-A)、sh1b(上海1区-B)、 pek2(北京2区)、pek3a(北京3区-A)、gd1(广东1区)、gd2a(广东2区-A)、ap1(亚太1区)、ap2a(亚太2区-A) |
qingcloud_host | QingCloud 云平台 api 地址,例如 api.qingcloud.com (若对接私有云则以下值都需要根据实际情况填写) |
qingcloud_port | API 请求的端口,默认 https 端口 (443) |
qingcloud_protocol | 网络协议,默认 https 协议 |
qingcloud_uri | URI 路径,默认值 iaas |
qingcloud_connection_retries | API 连接重试时间 (默认 3 秒) |
qingcloud_connection_timeout | API 连接超时时间 (默认 30 秒) |
在 plugin-qingcloud.yaml
中完成上表中的 API 相关配置后,再修改 QingCloud-CSI 配置安装 QingCloud 块存储插件。
QingCloud-CSI | Description |
---|---|
qingcloud_csi_enabled | 是否使用 QingCloud-CSI 作为持久化存储,是:true; 否:false |
qingcloud_csi_is_default_class | 是否设定为默认的存储类型, 是:true;否:false 注:系统中存在多种存储类型时,只能设定一种为默认的存储类型 |
qingcloud_type | QingCloud 云平台硬盘的类型 性能型是 0 容量型是 2 超高性能型是 3 企业级分布式块存储 NeonSAN 是 5 基础型是 100 SSD 企业型是 200 详情见 QingCloud 官方文档 |
qingcloud_minSize, qingcloud_maxSize | 即单块硬盘的最小容量和最大容量,限制存储卷类型的存储卷容量范围,单位为 GiB |
qingcloud_stepSize | 设置用户所创建存储卷容量的增量,单位为 GiB |
qingcloud_fsType | 存储卷的文件系统,支持 ext3, ext4, xfs. 默认为 ext4 |
disk_replica | 硬盘的副本策略,支持单副本和多副本,1 表示单副本,2 表示多副本 |
硬盘类型与主机适配性
性能型硬盘 | 容量型硬盘 | 超高性能型硬盘 | NeonSAN 硬盘 | 基础型硬盘 | SSD 企业型硬盘 | |
---|---|---|---|---|---|---|
性能型主机 | ✓ | ✓ | - | ✓ | - | - |
超高性能型主机 | - | ✓ | ✓ | ✓ | - | - |
基础型主机 | - | ✓ | - | ✓ | ✓ | - |
企业型主机 | - | ✓ | - | ✓ | - | ✓ |
各区应设置的 minSize, maxSize 和 stepSize 参数
下表中的值对应的格式为:qingcloud_minSize - qingcloud_maxSize,qingcloud_stepSize。
性能型硬盘 | 容量型硬盘 | 超高性能型硬盘 | NeonSAN 硬盘 | 基础型硬盘 | SSD 企业型硬盘 | |
---|---|---|---|---|---|---|
北京2区 | 10 - 1000, 10 | 100 - 5000, 50 | 10 - 1000,10 | - | - | - |
北京3区-A | 10 - 2000, 10 | 100 - 5000, 50 | 10 - 2000,10 | - | - | - |
广东1区 | 10 - 1000, 10 | 100 - 5000, 50 | 10 - 1000,10 | - | - | - |
上海1区-A | - | 100 - 5000, 50 | - | 100 - 50000, 100 | 10 - 2000, 10 | 10 - 2000, 10 |
亚太1区 | 10 - 1000, 10 | 100 - 5000, 50 | - | - | - | - |
亚太2区-A | - | 100 - 5000, 50 | - | - | 10 - 2000, 10 | 10 - 2000, 10 |
QingCloud 各类型块存储的最低配额
注意,使用 QingCloud 云平台块存储作为存储服务,安装前需要确保用户账号在当前 Zone 资源配额满足最低要求。在没有配置安装 GitLab 和 Harbor 的前提下,Multi-node 安装最少需要 14
块硬盘,请参考以下的最低配额表核对您账号的存储配额,若硬盘数量和容量配额不够请提工单申请配额。
注意,GitLab 和 Harbor 作为可选安装项,若安装前需要配置则需要考虑硬盘数量和容量的配额是否满足要求:Harbor 安装需要额外挂载
5
块硬盘,GitLab 安装需要额外挂载4
块硬盘,若 KubeSphere 部署在云平台则需要考虑硬盘数量是否满足配额要求。
最低配额 \ 硬盘类型 | 性能型硬盘 | 容量型硬盘 | 超高性能型硬盘 | NeonSAN 硬盘 | 基础型硬盘 | SSD 企业型硬盘 |
---|---|---|---|---|---|---|
块数 (块) / 容量 (GB) | 14 / 230 | 14 / 1400 | 14 / 230 | 14 / 1400 | 14 / 230 | 14 / 230 |
QingStor NeonSAN
NeonSAN-CSI 插件支持对接青云自研的企业级分布式存储 QingStor NeonSAN 作为存储服务,若您准备好 NeonSAN 物理服务端后,即可在 conf/plugin-qingcloud.yaml
配置 NeonSAN-CSI 插件对接其存储服务端。详见 NeonSAN-CSI 参数释义。
NeonSAN | Description |
---|---|
neonsan_csi_enabled | 是否使用 NeonSAN 作为持久化存储,是:true;否:false |
neonsan_csi_is_default_class | 是否设定为默认存储类型,是:true;否:false 注:系统中存在多种存储类型时,只能设定一种为默认存储类型 |
neonsan_csi_protocol | NeonSAN 服务端传输协议,如 TCP 或 RDMA |
neonsan_server_address | NeonSAN 服务端地址 |
neonsan_cluster_name | NeonSAN 服务端集群名称 |
neonsan_server_pool | Kubernetes 插件从哪个 pool 内创建存储卷,默认值为 kube |
neonsan_server_replicas | NeonSAN image 的副本个数,默认为 1 |
neonsan_server_stepSize | 用户所创建存储卷容量的增量,单位为 GiB,默认为 1 |
neonsan_server_fsType | 存储卷的文件系统格式,默认为 ext4 |
阿里云平台块存储
KubeSphere 支持使用阿里云平台块存储作为平台的存储服务,KubeSphere Installer 已集成 Alibaba Cloud-CSI 块存储插件支持对接阿里云块存储,若您准备在阿里云上搭建具备存储持久化的集群,建议配置此插件使用阿里云块存储进行安装。
Alibaba Cloud-CSI | Description |
---|---|
alicloud_disk_csi_enabled | 是否使用 Alibaba Cloud-CSI 作为持久化存储,是:true; 否:false |
alicloud_disk_csi_is_default_class | |
ali_access_key_id , ali_access_key_secret | 通过阿里云平台控制台 的右上角账户图标选择 AccessKey管理 创建密钥获得 |
ali_disk_zoneId | zone id 应与 Kubernetes 集群所在区相同,CSI 插件将会操作此区的存储卷资源。 |
ali_disk_regionId | region id 同上与Kubernetes 集群所在区相同 |
ali_disk_fsType | 存储卷的文件系统格式,默认为ext4 |
ali_disk_type | 云盘类型 |
安装前请注意:
openldap_volume_size
和redis_volume_size
的默认值为 2Gi, 若使用阿里云平台块存储作为默认存储类型,安装前需要在conf/common.yaml
更改至最低 10 Gi,否则 PVC 会创建失败。- KubeSphere 2.1.1 在
conf/common.yaml
新增的elasticsearch_master_volume_size
字段来指定 ES master 节点的挂盘大小,默认值为4
Gi,同理需要在conf/common.yaml
更改至最低10
Gi,否则 PVC 会创建失败。- 如果还开启了其他插件比如 DevOps,配置方法类似,把相应的 Volume 大小(这里对应就是
jenkins_volume_size
)在conf/common.yaml
设置为最低 10 Gi。
安装完成后,通过执行以下命令来检查存储卷的挂载状态,若 STATUS
均为 Bound
,则说明安装正常。
kubectl get pvc -A
腾讯云平台块存储
KubeSphere 支持使用腾讯云平台块存储作为平台的存储服务,平台已集成Tencent Cloud-CSI块存储插件支持对接块存储。
Tencent Cloud-CSI | Description |
---|---|
tencentcloud_cbs_csi_enabled | 是否使用 Tencent Cloud-CSI 作为持久化存储,是:true; 否:false |
tencentcloud_cbs_csi_is_default_class | 是否设定为默认的存储类型, 是:true;否:false |
tecentcloud_cbs_api_secret_id , tecentcloud_cbs_api_secret_key | 通过腾讯云平台控制台 的个人账户页面选择 访问密钥 创建密钥获得,需要base64编码 |
ali_disk_zoneId | zone id 应与 Kubernetes 集群所在区相同,CSI 插件将会操作此区的存储卷资源。 |
tencentcloud_disk_type | 云盘类型 |
其中,tecentcloud_cbs_api_secret_id
,tecentcloud_cbs_api_secret_key
为平台密钥的 base64 编码:
# get tecentcloud_cbs_api_secret_id
echo -n <SecretId> | base64
# get tecentcloud_cbs_api_secret_key
echo -n <SecretKey> | base64
说明:
openldap_volume_size
和redis_volume_size
的默认值为2Gi, 若使用腾讯云平台块存储作为默认存储类型,安装前需要在conf/common.yaml
更改至最低 10 Gi,否则 PVC 会创建失败。- KubeSphere 2.1.1 在
conf/common.yaml
新增的elasticsearch_master_volume_size
字段来指定 ES master 节点的挂盘大小,默认值为 4Gi,同理需要在conf/common.yaml
更改至最低10
Gi,否则 PVC 会创建失败。- 如果还开启了其他插件比如 DevOps,配置方法类似,把相应的 volume 大小(这里对应就是
jenkins_volume_size
)在conf/common.yaml
设置为最低 10 Gi。
安装完成后,通过执行kubectl get pvc -A
来检查CSI插件运行状态,若 STATUS
均为 Bound
,则说明安装正常。
kubectl get pvc -A