本文档采用自动化机器翻译技术翻译。 尽管我们力求提供准确的译文,但不对翻译内容的完整性、准确性或可靠性作出任何保证。 若出现任何内容不一致情况,请以原始 英文 版本为准,且原始英文版本为权威文本。

上传镜像

目前,支持三种创建镜像的方式:通过 URL 上传镜像、通过本地文件上传镜像,以及通过卷创建镜像。

通过 URL 上传镜像

  • UI

  • API

  • Terraform

要在 镜像 页面导入虚拟机镜像,请输入一个可以从集群访问的 URL。描述和标签是可选的。

  • 镜像名称会自动填充为 URL 地址中的文件名。您可以随时自定义镜像名称。

  • 避免使用每日构建的 URL(例如, Ubuntu Jammy 每日构建)。当所有 Longhorn 后备镜像的副本丢失时,Longhorn 会尝试重新下载文件以进行自我修复。使用每日构建的 URL 是有问题的,因为 URL 本身会发生变化,导致校验和不匹配和冲突,从而导致副本丢失。

大型镜像文件可能会在 SUSE Virtualization 中造成内存问题,尤其是当您使用不支持 HTTP 范围请求的第三方 StorageClasses 的下载 URL 时(例如,Python 的 http.server)。为了可靠的下载,请使用 NGINX 或 Apache。(此问题在 v1.6.1 中已修复。)

upload image

要通过 API 从储存库导入虚拟机镜像,请创建一个 VirtualMachineImage 对象。您必须指定一个可以从集群访问的 URL。

示例:

apiVersion: harvesterhci.io/v1beta1
kind: VirtualMachineImage
metadata:
  name: opensuse-leap
  namespace: default
spec:
  description: A human-readable description for the VM image
  displayName: openSUSE-Leap
  sourceType: download
  url: "https://download.opensuse.org/repositories/Cloud:/Images:/Leap_15.5/images/openSUSE-Leap-15.5.x86_64-NoCloud.qcow2"
  checksum: 80c27afb7cd791ac86ee1b0b0c572a242f6142579db5beac841e71151d370cd6

有关更多信息,请参见 API 参考

resource "harvester_image" "opensuse154" {
  name      = "opensuse154"
  namespace = "harvester-public"

  display_name = "openSUSE-Leap-15.4.x86_64-NoCloud.qcow2"
  source_type  = "download"
  url          = "https://downloadcontent-us1.opensuse.org/repositories/Cloud:/Images:/Leap_15.4/images/openSUSE-Leap-15.4.x86_64-NoCloud.qcow2"
}

通过本地文件上传镜像

目前,支持 qcow2、raw 和 ISO 映像。

  • 请在文件上传完成之前不要刷新页面。

upload image local

HTTP 413 错误在 SUSE Rancher Prime 多集群管理中

您可以在 SUSE Rancher Prime 界面多集群管理 界面上传镜像。当镜像的状态为 _上传中 但进度指示器长时间显示 0% 时,请检查 HTTP 响应状态码。413 表示请求体的大小超过了限制。

img 413 code

最大请求体大小应特定于托管 SUSE Rancher Prime 的集群(例如,RKE2 集群的默认限制为 1 MB,但 K3s 集群没有此限制)。

当前的解决方法是从 SUSE Virtualization 界面 上传镜像。如果您选择从 SUSE Rancher Prime 界面上传镜像,您可能需要在入口服务器上配置相关设置(例如, proxy-body-size 在 NGINX 中)。

如果 SUSE Rancher Prime 部署在 RKE2 集群上,请执行以下步骤:

  1. 编辑 SUSE Rancher Prime 入口。

    kubectl -n cattle-system edit ingress rancher
  2. nginx.ingress.kubernetes.io/proxy-body-size 指定一个值。

    示例:

    img ingress client body

  3. 删除卡住的镜像,然后重新启动上传过程。

在 SUSE Rancher Prime 多集群管理中长时间上传大镜像

如果您从 多集群管理 屏幕在 SUSE Rancher Prime 界面上传大镜像(超过 10 GB),操作可能会比平常更长,镜像状态(上传中)可能不会改变。

此行为与入口配置中的 proxy-request-buffering 相关,这一配置也特定于托管 SUSE Rancher Prime 的集群。

当前的解决方法是从 *SUSE Virtualization 界面上传镜像。如果您选择从 SUSE Rancher Prime 界面上传镜像,您可能需要在入口服务器上配置相关设置(例如, proxy-request-buffering 在 NGINX 中)。

如果 SUSE Rancher Prime 部署在 RKE2 集群上,请执行以下步骤:

  1. 编辑 SUSE Rancher Prime 入口。

    kubectl -n cattle-system edit ingress rancher
  2. 关闭 nginx.ingress.kubernetes.io/proxy-request-buffering

    示例:

    img ingress request proxy buffering

  3. 删除卡住的镜像,然后重新启动上传过程。

上传之前从 SUSE Virtualization 下载的镜像

v1.5.5 开始,Longhorn 对用于下载的后备镜像进行压缩。如果您尝试上传压缩的后备镜像,SUSE Virtualization 会拒绝该尝试并显示消息 上传失败:上传的文件大小 xxxx 应为 512 字节的倍数,因为 Longhorn 默认使用 directIO,这是因为压缩数据违反了 Longhorn 的数据对齐要求。

在上传之前,使用命令 gzip -d <file name> 解压后备镜像。

通过卷创建镜像

在*卷*页面上,点击*导出镜像*。输入镜像名称并选择一个存储类以创建镜像。

export volume to image 1

镜像存储类

在创建镜像时,您可以选择一个存储类并使用其预定义参数,如副本、节点选择器和磁盘选择器。

镜像并不直接使用此处选择的`StorageClass`。它只是一个`StorageClass`模板。

相反,它在后台创建一个特殊的存储类,前缀名称为`longhorn-`。这由SUSE Virtualization后端自动完成,但它继承了您选择的存储类的参数。

image storageclass

镜像标签

您可以为镜像添加标签,这有助于更准确地识别操作系统类型。此外,如果需要,您还可以添加任何自定义标签以进行过滤。

如果您的镜像名称或 URL 包含任何有效信息,用户界面会自动识别操作系统类型和镜像类别。如果没有,您也可以在用户界面上手动指定相应的标签。

image labels