KubeVirt 虚拟机克隆

虚拟机克隆

克隆由 clone.kubevirt.io 组 API 资源来实现。当前版本为 v1alpha1

克隆依赖快照和恢复快照,所以使用克隆前需要保证 KubeVirt 的快照和恢复快照功能可用。

克隆 YAML 清单

apiVersion: "clone.kubevirt.io/v1alpha1"
kind: VirtualMachineClone
metadata:
  name: testclone-my-vm
  namespace: default

spec:
  # source & target definitions
  source:
    apiGroup: kubevirt.io
    kind: VirtualMachine
    name: my-vm
  target:
    apiGroup: kubevirt.io
    kind: VirtualMachine
    name: vm-clone-my-vm

  # labels & annotations definitions
  labelFilters:
    - "*"
    - "!somekey/*"
  annotationFilters:
    - "anotherkey/*"

  # template labels & annotations definitions
  template:
    labelFilters:
      - "*"
      - "!somekey/*"
    annotationFilters:
      - "anotherkey/*"

  # other identity stripping specs:
  newMacAddresses:
    enp1s0: "00:50:56:35:1A:8C"
    enp2s0: "00:50:56:27:B9:AC"
  newSMBiosSerial: "my-vm-clone"
  • 克隆的 sourcetarget 目前只支持 VirtualMachinekubevirt.io API 组)和 VirtualMachineSnapshotsnapshot.kubevirt.io API 组)。
  • labelFiltersannotationFilters 是可选的,使用有如下限制:
    • 支持通配符(*),通配符需要在过滤器末尾。
    • 下述过滤器有效:
    • "*"
    • "some/key*"
    • 下述过滤器无效:
    • "some/*/key"
    • "*/key"
    • 否定字符 (!)可用于避免匹配某些键。否定只能用在过滤器的开头
  • template 用于将过滤某些组件附加的标签或注释,比方说某些网络 CNI(例如 Kube-OVN 或 OVN-Kubernetes)。
  • newMacAddresses 用于设置新网卡的 MAC 地址,是可选的。(需要 kube-mac-pool,不过感觉没什么用,可以通过编辑 VirtualMachine 添加 macAddress 字段来设置 MAC 地址。)
  • newSMBiosSerial 用于设置新虚拟机的序列号。

我这里 newMacAddressesnewSMBiosSerial 设置都没生效,不知道为什么。

部署 kube-mac-pool

[root@base-k8s-master-1 kubemacpool]# wget https://raw.githubusercontent.com/k8snetworkplumbingwg/kubemacpool/master/config/release/kubemacpool.yaml
mac_oui=02:`openssl rand -hex 1`:`openssl rand -hex 1`--2025-03-22 21:25:40--  https://raw.githubusercontent.com/k8snetworkplumbingwg/kubemacpool/master/config/release/kubemacpool.yaml

sed -i "s/02:00:00:00:00:00/$mac_oui:00:00:00/" kubemacpool.yamlConnecting to 192.168.50.199:10809... connected.

sed -i "s/02:FF:FF:FF:FF:FF/$mac_oui:FF:FF:FF/" kubemacpool.yaml
kubectl apply -f ./kubemacpool.yamlProxy request sent, awaiting response... 200 OK
Length: 9883 (9.7K) [text/plain]
Saving to: ‘kubemacpool.yaml’

kubemacpool.yaml                                         100%[=================================================================================================================================>]   9.65K  --.-KB/s    in 0.002s

2025-03-22 21:25:40 (4.21 MB/s) - ‘kubemacpool.yaml’ saved [9883/9883]

[root@base-k8s-master-1 kubemacpool]# mac_oui=02:`openssl rand -hex 1`:`openssl rand -hex 1`
[root@base-k8s-master-1 kubevirt]# echo $mac_oui
02:0a:b6
[root@base-k8s-master-1 kubemacpool]# sed -i "s/02:00:00:00:00:00/$mac_oui:00:00:00/" kubemacpool.yaml
[root@base-k8s-master-1 kubemacpool]# sed -i "s/02:FF:FF:FF:FF:FF/$mac_oui:FF:FF:FF/" kubemacpool.yaml
[root@base-k8s-master-1 kubemacpool]# kubectl apply -f ./kubemacpool.yaml
namespace/kubemacpool-system created
serviceaccount/kubemacpool-sa created
clusterrole.rbac.authorization.k8s.io/kubemacpool-manager-role created
clusterrolebinding.rbac.authorization.k8s.io/kubemacpool-manager-rolebinding created
configmap/kubemacpool-mac-range-config created
service/kubemacpool-service created
deployment.apps/kubemacpool-cert-manager created
deployment.apps/kubemacpool-mac-controller-manager created
mutatingwebhookconfiguration.admissionregistration.k8s.io/kubemacpool-mutator created

创建克隆并测试

修改克隆 YAML 清单的 MAC 地址:

 newMacAddresses:
    enp1s0: "02:0A:B6:35:1A:8C"
    enp2s0: "02:0A:B6:27:B9:AC"

克隆的虚拟机 MAC 地址没生效,有时间找找原因。

创建克隆:

[root@base-k8s-master-1 kubevirt]# kubectl apply -f vm-clone.yml
virtualmachineclone.clone.kubevirt.io/testclone-my-vm created
[root@base-k8s-master-1 kubevirt]# kubectl get vm
NAME             AGE    STATUS    READY
my-vm            19d    Running   True
...output omitted...
vm-clone-my-vm   7s     Stopped   False
[root@base-k8s-master-1 kubevirt]# virtctl start vm-clone-my-vm
VM vm-clone-my-vm was scheduled to start
[root@base-k8s-master-1 kubevirt]# virtctl ssh fedora@vm-clone-my-vm
Last login: Sun Mar 23 12:14:38 2025 from 10.100.239.49
[fedora@vm-dv ~]$ ip link show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1480 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
    link/ether 02:0a:b6:00:00:05 brd ff:ff:ff:ff:ff:ff
3: enp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
    link/ether 02:0a:b6:00:00:06 brd ff:ff:ff:ff:ff:ff
[fedora@vm-dv ~]$ ls /dev/disk/by-id
ata-QEMU_HARDDISK_QM00001        ata-QEMU_HARDDISK_QM00001-part2  ata-QEMU_HARDDISK_QM00001-part4
ata-QEMU_HARDDISK_QM00001-part1  ata-QEMU_HARDDISK_QM00001-part3  scsi-0QEMU_QEMU_HARDDISK_1234567890

检查克隆虚拟机的配置:

[root@base-k8s-master-1 kubevirt]# kubectl get vmi vm-clone-my-vm -o yaml
...output omitted...
      - disk:
          bus: scsi
        name: dv-blank
        serial: "1234567890"
      interfaces:
      - macAddress: 02:0a:b6:00:00:05
        masquerade: {}
        name: default
      - bridge: {}
        macAddress: 02:0a:b6:00:00:06
        name: net1
...output omitted...
KubeVirt 虚拟机克隆
https://www.linuxstudynotes.com/2025/03/31/k8s/kubevirt-%e8%99%9a%e6%8b%9f%e6%9c%ba%e5%85%8b%e9%9a%86/
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇