|
本文档采用自动化机器翻译技术翻译。 尽管我们力求提供准确的译文,但不对翻译内容的完整性、准确性或可靠性作出任何保证。 若出现任何内容不一致情况,请以原始 英文 版本为准,且原始英文版本为权威文本。 |
第三方存储支持
SUSE Virtualization 支持使用外部 容器存储接口 (CSI) 驱动程序来配置 root 卷和数据卷。此增强功能允许您选择满足特定要求的驱动程序,例如性能优化或与现有内部存储解决方案的无缝集成。
SUSE Virtualization 团队已验证以下 CSI 驱动程序:
-
Longhorn V2 数据引擎:
driver.longhorn.io -
LVM:
lvm.driver.harvesterhci.io -
NFS:
nfs.csi.k8s.io -
Rook (RADOS 块设备):
rook-ceph.rbd.csi.ceph.com
这些经过验证的 CSI 驱动程序具有以下功能:
| 存储解决方案 | 虚拟机镜像 | 虚拟机 root 磁盘 | 虚拟机数据磁盘 | 卷导出到虚拟机镜像 | 虚拟机模板生成器 | VM 实时迁移 | 虚拟机快照 | 虚拟机备份 |
|---|---|---|---|---|---|---|---|---|
Longhorn V2 数据引擎 |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
LVM |
✔ |
✔ |
✔ |
✔ |
✔ |
✖ |
✔ |
✖ |
NFS |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✖ |
✖ |
Rook (RADOS 块设备) |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✖ |
|
对第三方存储的支持等同于使用外部容器存储接口 (CSI) 驱动程序配置 root 卷和数据卷的支持。这意味着存储供应商可以使用SUSE Virtualization验证他们的存储设备,以确保更好的互操作性。 您可以在SUSE Rancher Prime文档中找到与SUSE Virtualization兼容的企业级存储解决方案的信息,该文档可以通过 SUSE客户中心访问。 |
先决条件
为了使SUSE Virtualization正常运行,请使用支持以下功能的CSI驱动程序:
-
卷扩展(在线调整大小)
-
快照创建(卷和虚拟机快照)
-
克隆(卷和虚拟机克隆)
-
在实时迁移中使用可读写多(RWX)卷
创建一个SUSE Virtualization集群
SUSE Virtualization的操作系统遵循不可变设计,这意味着大多数操作系统文件在重启后会恢复到其预配置状态。因此,在为第三方CSI驱动程序安装SUSE Virtualization集群之前,您可能需要进行额外的配置。
某些CSI驱动程序需要在主机上额外的持久路径。您可以将这些路径添加到os.persistent_state_paths。
某些CSI驱动程序需要在主机上额外的软件包。您可以使用os.after_install_chroot_commands安装这些软件包。
|
升级SUSE Virtualization会导致在`after-install-chroot`阶段对操作系统的更改丢失。您还必须配置`after-upgrade-chroot`以使您的更改在升级中保持持久。在升级SUSE Virtualization之前,请参考 运行时持久更改。 |
安装CSI驱动程序
安装SUSE Virtualization集群完成后,请参考我如何访问kubeconfig文件?以获取集群的kubeconfig。
通过SUSE Virtualization集群的kubeconfig,您可以按照每个CSI驱动程序的安装说明将第三方CSI驱动程序安装到集群中。您还必须参考 CSI 驱动程序文档,以在 SUSE Virtualization 集群中创建 StorageClass 和 VolumeSnapshotClass。
配置 SUSE Virtualization 集群
在您可以使用 SUSE Virtualization 的 备份与快照 功能之前,您需要通过 SUSE Virtualization csi-driver-config 设置进行一些基本配置。按照以下步骤进行这些配置:
-
登录到 SUSE Virtualization 界面,然后导航到 高级 → 设置。
-
找到并选择 csi-driver-config,然后选择 ⋮ → 编辑设置 以访问配置选项。
-
在设置中将 供应者 设置为第三方 CSI 驱动程序。
-
接下来,配置 卷快照类名称。此设置指向用于创建卷快照或虚拟机快照的
VolumeSnapshotClass的名称。
|
备份目前仅适用于以下内容:
如果您使用其他存储提供商,可以跳过 备份卷快照类名称 配置。有关更多信息,请参见 虚拟机备份兼容性。 如果 StorageClass 供应者不在 CDI 的 具有默认访问和卷模式的供应者 列表中,您必须使用 |
使用 CSI 驱动程序
一旦安装了 CSI 驱动程序并配置了 SUSE Virtualization 集群,就可以在涉及存储管理的任务中使用外部存储解决方案。
虚拟机映像创建
您可以使用外部存储解决方案来存储和管理虚拟机映像。
在使用上传虚拟机映像时,您必须在SUSE Virtualization UI (映像 → 创建)上选择外部存储解决方案的 StorageClass,位于*存储*选项卡上。在以下示例中,StorageClass 为 nfs-csi。
SUSE Virtualization将创建的映像存储在外部存储解决方案中。
虚拟机创建
您的虚拟机可以使用外部存储中的 root 卷和数据卷。
在使用创建虚拟机时,您必须在SUSE Virtualization UI (虚拟机 → 创建)的*卷*选项卡上执行以下操作:
-
选择存储在外部存储解决方案中的虚拟机映像,然后配置所需的设置。
-
添加数据卷。
在以下示例中,root 卷使用 NFS 创建,数据卷使用 Longhorn V2 数据引擎创建。
卷创建
您可以在外部存储解决方案中创建卷。
在使用创建卷时,您必须在SUSE Virtualization UI (卷 → 创建)上执行以下操作:
-
存储类:选择目标StorageClass(例如,nfs-csi)。
-
卷模式:选择相应的卷模式(例如,文件系统)。
高级主题
存储控制文件
您现在可以使用 CDI API 创建自定义 存储控制文件,以简化数据卷的定义。存储控制文件允许多个数据卷共享相同的配置设置。
以下是一个 LVM 存储控制文件的示例:
apiVersion: cdi.kubevirt.io/v1beta1
kind: StorageProfile
metadata:
name: lvm-node-1-striped
spec:
claimPropertySets:
- accessModes:
- ReadWriteOnce
volumeMode: Block
status:
claimPropertySets:
- accessModes:
- ReadWriteOnce
volumeMode: Block
cloneStrategy: snapshot
dataImportCronSourceFormat: pvc
provisioner: lvm.driver.harvesterhci.io
snapshotClass: lvm-snapshot
storageClass: lvm-node-1-striped
您可以定义字段以覆盖默认配置。有关更多信息,请参见 CDI 文档中的 存储控制文件。
|
避免直接更改存储控制文件或 CDI。相反,允许 SUSE Virtualization 控制器通过使用 CDI 注释 来同步和持久化存储控制文件配置。 |
局限性
-
备份支持目前仅限于 SUSE Storage 卷。SUSE Virtualization 无法创建外部存储中卷的备份。
-
CDI 中存在一个限制,阻止 SUSE Virtualization 将附加的 PVC 转换为虚拟机映像。在导出外部存储中的卷之前,请确保 PVC 未附加到工作负载。这会防止生成的映像卡在 导出中 状态。
NFS CSI 驱动程序部署
|
只有在 NFS 服务器已安装并运行时,您才能部署 NFS CSI 驱动程序。
如果服务器已经在运行,请检查 |
-
使用
csi-driver-nfsHelm 图表安装驱动程序。$ helm repo add csi-driver-nfs https://raw.githubusercontent.com/kubernetes-csi/csi-driver-nfs/master/charts $ helm install csi-driver-nfs csi-driver-nfs/csi-driver-nfs --namespace kube-system --version v4.10.0 -
为 NFS 创建 StorageClass。
有关参数的更多信息,请参见 Kubernetes NFS CSI 驱动程序文档中的 驱动程序参数:存储类使用。
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: nfs-csi provisioner: nfs.csi.k8s.io parameters: server: <your-nfs-server-ip> share: <your-nfs-share> # csi.storage.k8s.io/provisioner-secret is only needed for providing mountOptions in DeleteVolume # csi.storage.k8s.io/provisioner-secret-name: "mount-options" # csi.storage.k8s.io/provisioner-secret-namespace: "default" reclaimPolicy: Delete volumeBindingMode: Immediate allowVolumeExpansion: true mountOptions: - nfsvers=4.2创建后,您可以使用 StorageClass 创建虚拟机映像、root 卷和数据卷。
已知问题
1.无限图像下载循环
当图像的 StorageClass 使用 LVM CSI 驱动程序时,图像下载过程会无限循环。此问题与由 CDI 创建的临时卷有关,该卷用于临时存储图像数据。当您的环境中存在此问题时,您可能会在 importer-prime-xxx pod 日志中发现以下错误消息:
E0418 01:59:51.843459 1 util.go:98] Unable to write file from dataReader: write /scratch/tmpimage: no space left on device
E0418 01:59:51.861235 1 data-processor.go:243] write /scratch/tmpimage: no space left on device
unable to write to file
kubevirt.io/containerized-data-importer/pkg/importer.streamDataToFile
/home/abuild/rpmbuild/BUILD/go/src/kubevirt.io/containerized-data-importer/pkg/importer/util.go:101
kubevirt.io/containerized-data-importer/pkg/importer.(*HTTPDataSource).Transfer
/home/abuild/rpmbuild/BUILD/go/src/kubevirt.io/containerized-data-importer/pkg/importer/http-datasource.go:162
kubevirt.io/containerized-data-importer/pkg/importer.(*DataProcessor).initDefaultPhases.func2
/home/abuild/rpmbuild/BUILD/go/src/kubevirt.io/containerized-data-importer/pkg/importer/data-processor.go:173
kubevirt.io/containerized-data-importer/pkg/importer.(*DataProcessor).ProcessDataWithPause
/home/abuild/rpmbuild/BUILD/go/src/kubevirt.io/containerized-data-importer/pkg/importer/data-processor.go:240
kubevirt.io/containerized-data-importer/pkg/importer.(*DataProcessor).ProcessData
/home/abuild/rpmbuild/BUILD/go/src/kubevirt.io/containerized-data-importer/pkg/importer/data-processor.go:149
main.handleImport
/home/abuild/rpmbuild/BUILD/go/src/kubevirt.io/containerized-data-importer/cmd/cdi-importer/importer.go:188
main.main
/home/abuild/rpmbuild/BUILD/go/src/kubevirt.io/containerized-data-importer/cmd/cdi-importer/importer.go:148
runtime.main
消息 no space left on device 表示使用 scratch 卷创建的文件系统不足以存储图像数据。CDI 根据目标卷的大小创建 scratch 卷,但会有一些空间因文件系统开销而损失。默认的开销值为 0.055(相当于 5.5%),在大多数情况下是足够的。然而,如果图像大小小于 1 GB 且其虚拟大小非常接近图像大小,则默认开销可能不足。
解决方法是使用以下命令将文件系统开销增加到 20%:
# kubectl patch cdi cdi --type=merge -p '{"spec":{"config":{"filesystemOverhead":{"global":"0.2"}}}}'
一旦增加了文件系统开销,图像应该会被下载。
|
增加开销值不会影响图像 PVC 大小。图像导入后,scratch 卷会被删除。 |
2.多路径支持
multipathd 服务在 SUSE Virtualization 中默认是禁用的。然而,某些第三方 CSI 可能需要您启用该服务。
安装 SUSE Virtualization 后,您可以通过登录到每个集群节点并运行以下命令来启用并启动 multipathd:
systemctl enable multipathd
systemctl start multipathd
或者,您可以在每个主机的 /oem 目录中创建一个 SUSE® Rancher Prime: OS Manager CloudInit 文件(例如,/oem/99-start-multipathd.yaml),内容如下:
stages:
default:
- name: "start multipathd"
systemctl:
enable:
- multipathd
start:
- multipathd
此过程可以通过使用 CloudInit CRD 在 Harvester cluster 中自动化。
apiVersion: node.harvesterhci.io/v1beta1
kind: CloudInit
metadata:
name: start-mutlitpathd
spec:
matchSelector:
harvesterhci.io/managed: "true"
filename: 99-start-mutlitpathd
contents: |
stages:
default:
- name: "start multipathd"
systemctl:
enable:
- multipathd
start:
- multipathd
paused: false