KubeVirt 虚拟机生命周期管理(一)

虚拟机生命周期管理

说虚拟机生命周期管理之前先说一下 virtualmachines.kubevirt.iovirtualmachineinstances.kubevirt.io

[root@base-k8s-master-1 kubevirt]# kubectl api-resources | grep -i virt
...output omitted...
virtualmachineinstances              vmi,vmis                                                  kubevirt.io/v1                     true         VirtualMachineInstance
virtualmachines                      vm,vms                                                    kubevirt.io/v1                     true         VirtualMachine
...output omitted...
[root@base-k8s-master-1 kubevirt]# kubectl get vm
NAME    AGE     STATUS    READY
vm-dv   7m53s   Running   True
[root@base-k8s-master-1 kubevirt]# kubectl get vmis
NAME    AGE    PHASE     IP              NODENAME                        READY
vm-dv   5m1s   Running   10.100.223.30   base-k8s-worker-1.example.com   True
[root@base-k8s-master-1 kubevirt]# kubectl get vm
NAME    AGE   STATUS    READY
vm-dv   93s   Stopped   False

这个资源是 KubeVirt 中的 CRD(Custom Resource Definitions,自定义资源定义),用于管理虚拟机(VM)和虚拟机实例(VMI)。

  • VM(VirtualMachine)

    • VM 是一个 KubeVirt 的 "虚拟机模板",用于创建 VMI。
    • VM 本身不会运行,它只是定义了一个虚拟机的规格(CPU、内存、磁盘等)。
    • 如果 spec.running=true,VM 会自动创建一个 VMI 并启动它。
    • VM 可以停止(running=false)后再重新启动,VMI 不能。
  • VMI(VirtualMachineInstance)

    • VMI 是 KubeVirt 中运行中的虚拟机实例。
    • 每个 VMI 对应一个运行中的虚拟机 Pod,封装了一个 KVM/QEMU 虚拟机。
    • 一旦 VMI 终止(如关机、崩溃),它不会自动重启。

简单点讲,VM 就类似 Deployment,VMI 就类似 POD,区别就是 VM 会一直存在并显示虚拟机当前的状态,而 VMI 只有虚拟机开机的时候才会被创建。

[root@base-k8s-master-1 kubevirt]# kubectl get vm
NAME    AGE   STATUS    READY
vm-dv   4s    Stopped   False
[root@base-k8s-master-1 kubevirt]# kubectl get vm
NAME    AGE   STATUS     READY
vm-dv   19s   Starting   False
[root@base-k8s-master-1 kubevirt]# kubectl get vm
NAME    AGE   STATUS   READY
vm-dv   21m   Paused   False
[root@base-k8s-master-1 kubevirt]# kubectl get vm
NAME    AGE     STATUS    READY
vm-dv   7m53s   Running   True

创建虚拟机

[root@base-k8s-master-1 kubevirt]# kubectl apply -f vm-dv.yml
virtualmachine.kubevirt.io/vm-dv created

具体 vm-dv.yml 怎么写看 virtctl 章节。

列出虚拟机

# 列出所有虚拟机
[root@base-k8s-master-1 kubevirt]# kubectl get vmis
NAME    AGE   PHASE     IP              NODENAME                        READY
vm-dv   14s   Running   10.100.223.32   base-k8s-worker-1.example.com   True

# 列出特定虚拟机
[root@base-k8s-master-1 kubevirt]# kubectl get vmis vm-dv
NAME    AGE   PHASE     IP              NODENAME                        READY
vm-dv   39s   Running   10.100.223.32   base-k8s-worker-1.example.com   True

删除虚拟机

[root@base-k8s-master-1 kubevirt]# kubectl delete vm vm-dv
virtualmachine.kubevirt.io "vm-dv" deleted

启动和关闭虚拟机

启动

[root@base-k8s-master-1 kubevirt]# kubectl get vm
NAME    AGE   STATUS    READY
vm-dv   4s    Stopped   False
[root@base-k8s-master-1 kubevirt]# virtctl start vm-dv -n default
VM vm-dv was scheduled to start
[root@base-k8s-master-1 kubevirt]# kubectl get vm
NAME    AGE   STATUS     READY
vm-dv   19s   Starting   False
[root@base-k8s-master-1 kubevirt]# kubectl get vmis
NAME    AGE   PHASE     IP              NODENAME                        READY
vm-dv   8s    Running   10.100.223.33   base-k8s-worker-1.example.com   True

关闭

[root@base-k8s-master-1 kubevirt]# virtctl stop vm-dv
VM vm-dv was scheduled to stop
[root@base-k8s-master-1 kubevirt]# kubectl get vm
NAME    AGE   STATUS     READY
vm-dv   56s   Stopping   False
[root@base-k8s-master-1 kubevirt]# kubectl get vm
NAME    AGE   STATUS    READY
vm-dv   93s   Stopped   False

# 强制关机
[root@base-k8s-master-1 kubevirt]# virtctl stop vm-dv --grace-period 0 --force
VM vm-dv was scheduled to stop

暂停和取消暂停虚拟机

暂停

[root@base-k8s-master-1 kubevirt]# kubectl get vm
NAME    AGE     STATUS    READY
vm-dv   7m53s   Running   True
[root@base-k8s-master-1 kubevirt]# kubectl get vmis
NAME    AGE    PHASE     IP              NODENAME                        READY
vm-dv   5m1s   Running   10.100.223.30   base-k8s-worker-1.example.com   True
[root@base-k8s-master-1 kubevirt]# virtctl pause vm vm-dv
VMI vm-dv was scheduled to pause
[root@base-k8s-master-1 kubevirt]# kubectl get vmis
NAME    AGE    PHASE     IP              NODENAME                        READY
vm-dv   5m8s   Running   10.100.223.30   base-k8s-worker-1.example.com   False
[root@base-k8s-master-1 kubevirt]# kubectl get vm
NAME    AGE    STATUS   READY
vm-dv   8m4s   Paused   False
[root@base-k8s-master-1 kubevirt]# kubectl get vmi vm-dv -o=jsonpath='{.status.conditions[?(@.type=="Paused")].message}{"\n"}'
VMI was paused by user

virtctl pause vmi vm-dv 也可以。

取消暂停

[root@base-k8s-master-1 kubevirt]# virtctl unpause vm vm-dv
VMI vm-dv was scheduled to unpause
[root@base-k8s-master-1 kubevirt]# kubectl get vmis
NAME    AGE    PHASE     IP              NODENAME                        READY
vm-dv   7m8s   Running   10.100.223.30   base-k8s-worker-1.example.com   True
[root@base-k8s-master-1 kubevirt]# kubectl get vm
NAME    AGE   STATUS    READY
vm-dv   10m   Running   True

virtctl unpause vmi vm-dv 也可以。

KubeVirt 虚拟机生命周期管理(一)
https://www.linuxstudynotes.com/2025/03/02/k8s/kubevirt-%e8%99%9a%e6%8b%9f%e6%9c%ba%e7%94%9f%e5%91%bd%e5%91%a8%e6%9c%9f%e7%ae%a1%e7%90%86%ef%bc%88%e4%b8%80%ef%bc%89/
暂无评论

发送评论 编辑评论


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