vCenter中的虚拟机导入到Harvester

Harvester介绍

Harvester 是一款基于 Kubernetes 构建的现代、开放、可互操作的超融合基础架构(HCI)产品。它是一个开源替代方案,专为寻求云原生 HCI 解决方案的运维人员而设计。Harvester 运行在裸金属服务器上,提供集成的虚拟化和分布式存储功能。除了传统的虚拟机之外,Harvester 还通过与 Rancher 集成来支持容器化环境。它可以统一传统的虚拟化基础架构,同时支持在中心到边缘的位置采用容器。

架构

  • Linux 操作系统。Elemental for SLE-Micro 5.3 是 Harvester 的核心,它是一个不可变的 Linux 发行版,旨在尽量减少 Kubernetes 集群中节点的操作系统维护工作。
  • 建立在 Kubernetes 之上。Kubernetes 已成为主流的基础架构语言,而 Harvester 是包含 Kubernetes 的 HCI 解决方案。
  • 使用 Kubevirt 进行虚拟化管理。Kubevirt 在 Kubernetes 之上使用 KVM 来提供虚拟化管理。
  • 使用 Longhorn 进行存储管理。Longhorn 提供分布式块存储和分层。
  • 通过 Grafana 和 Prometheus 进行观察。Grafana 和 Prometheus 提供强大的监控和记录功能。

file

其他具体可以参考官方文档,地址:https://docs.harvesterhci.io/zh/v1.1/

环境

我的Harvester版本是1.20-rc2,linux系统版本是suse:sle-micro-rancher:5.3 ,k8s版本是v1.25.9+rke2r1

file

file

namespace如下:

file

导入

文档地址:https://docs.harvesterhci.io/zh/v1.1/advanced/vmimport

要使用 VM 导入功能,用户需要启用 vm-import-controller 插件。

我这里的设置如下:

file

创建源

apiVersion: migration.harvesterhci.io/v1beta1
kind: VmwareSource
metadata:
  name: vcsim
  # namespace自选,default也必须写,不写会报错
  namespace: default
spec:
  # endpoint为vCenter地址
  endpoint: "https://192.168.1.1/sdk"
  # dc为vCenter的数据中心
  dc: "Datacenter"
  credentials:
    name: vsphere-credentials
    # namespace要一致
    namespace: default
---
apiVersion: v1
kind: Secret
metadata:
  name: vsphere-credentials
  namespace: default
stringData:
  # vCenter用户名密码
  "username": "user"
  "password": "password"

kubectl apply -f vm.yaml
kubectl get VmwareSource

file

创建迁移任务

apiVersion: migration.harvesterhci.io/v1beta1
kind: VirtualMachineImport
metadata:
  name: wgh55
  # namespace和上面保持一致
  namespace: default
spec:
  # 官方文档中没有写folder这个参数,explain获取到的...,表示虚拟机在vCenter中的目录
  folder: "xxx"
  # 虚拟机名称
  virtualMachineName: "wgh5"
  networkMapping:
  # 源虚拟机网络,如果绑定了2个vSwitch,需要再写一个sourceNetwork,destinationNetwork。
  - sourceNetwork: "vSwitch0"
  # 目标虚拟机网络
    destinationNetwork: "harvester-public/vlan16"
  sourceCluster:
  # VmwareSource源
    name: vcsim
    namespace: default
    kind: VmwareSource
    apiVersion: migration.harvesterhci.io/v1beta1

kubectl apply -f importvm.yaml
kubectl get VirtualMachineImport

file

我这里状态是virtualMachineRunning,因为虚拟机已经导入成功了,正常刚创建任务后状态是sourceReady。

查看vm-import-controller日志

kubectl logs -f -n harvester-system vm-import-controller-harvester-vm-import-controller-6654889k26k

file

这里报错secret找不到不影响。

vCenter状态

VirtualMachineImport状态变为sourceReady后,vCenter上会创建一个导出OVF模板的任务,等待任务完成。

file

Harvester状态

导出模板后,Harvester的镜像页面上可以看到镜像正在下载。等待下载完成。下载速度和源虚拟机硬盘大小和网速有关。

file

同时,longhorn-system中也会启动pod,用来下载镜像。

kubectl logs backing-image-ds-default-image-gdgww -n longhorn-system

file

镜像下载到99%时,会开始计算校验和,即图中的报错:failed to get the checksum from a valid config during processing wrap-up, will directly calculated it then ,同步文件到本地后,下载完成。

查看虚拟机

镜像下载完成后,会自动启动一个虚拟机。但这个虚拟机是无法进入系统的,会进入急救模式。报错信息如下:

file

原因是自动启动的虚拟机,系统盘类型是VirtIO,和原有的硬盘类型SATA不兼容,导致找不到硬盘,无法挂载,进入系统。

file

自动生成的虚拟机内存也不是整数。

file

创建虚拟机

在下载好的镜像右边点击创建虚拟机,填写CPU,内存。添加镜像卷,类型选择disk,SATA,大小和源虚拟机保持一致。

file

网络模式选择e1000或者e1000e。保存启动。

file

file

虚拟机可以正常启动。

file

1.创建虚拟机导入任务失败

报错如下:time="2023-07-17T02:27:12Z" level=error msg="error syncing 'harvester-public/wgh5': handler virtualmachine-import-job-change: error in poweroff call: error finding vm in PowerOffVirtualMachine: vm '/Datacenter/vm/wgh5' not found, requeuing"

file

原因

vm-import-controller默认去/dc名称/vm/虚拟机名称路径下找虚拟机,而虚拟机不在这个路径下。所以需要加folder参数

实际路径在如下:Datacenter下面的文件夹。

file

2.镜像下载到99%重新下载

原因

计算镜像校验和同步文件失败。nginx默认的proxy_read/write时间太短了,镜像还没读取完就超时了。

解决

访问rancher。先点击支持。

file

再点击访问内嵌的 Rancher UI。

file

点击应用,已安装的应用,再点击ConfigMap rke2-ingress-nginx-controller

file

点击编辑配置,添加超时时间。根据硬盘大小来设置,一般120s就可以了,如果不行就加大超时时间。

proxy-read-timeout 600
proxy-write-timeout 600

file

保存,重启rke2-ingress-nginx-controller pod,再次下载即可。

3.虚拟机无法启动

原因

  • 镜像卷类型需要选择SATA,选择VirtIO就会无法启动。
  • 硬盘大小需要大于等于源虚拟机硬盘大小。重要!!!(CPU和内存不一致不影响启动)
0 0 投票数
文章评分
订阅评论
提醒
guest

0 评论
最旧
最新 最多投票
内联反馈
查看所有评论

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部
0
希望看到您的想法,请您发表评论x