欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 艺术 > kubervirt使用与运行策略

kubervirt使用与运行策略

2025/2/23 7:01:56 来源:https://blog.csdn.net/2301_82330629/article/details/144492118  浏览:    关键词:kubervirt使用与运行策略

三、KubeVirt基本命令

3.1查看virtctl版本,说明安装成功

[root@k8s-master ~]# virtctl version

3.2创建和管理虚拟机

列出所有可用的虚拟机实例

[root@master ~]# kubectl get vmi -n <namespace>

参数-n用于指定命名空间

查看特定虚拟机实例的详细信息

[root@master ~]# kubectl describe vmi <vmi-name> -n <namespace>

删除虚拟机实例

[root@master ~]# kubectl delete vmi <vmi-name> -n <namespace>

3.3创建和管理虚拟机定义

KubeVirt中的虚拟机定义(VirtualMachine)与虚拟机实例(VirtualMachinInstance,VM)不同。虚拟机定义是一个模版,可以用来启动多个虚拟机实例

创建一个新的虚拟机定义

[root@master ~]# kubectl create -f <file>.yaml

启动由虚拟机定义创建的虚拟机实例

[root@master ~]# kubectl patch vm <vm-name> -p '{"spec":{"running":true}}' --type=merge -n <namespace>

停止虚拟机实例

[root@master ~]# kubectl patch vm <vm-name> -p '{"spec":{"running":false}}' --type=merge -n <namespace>

查看KubeVirt组件的状态

[root@master ~]# kubectl -n kubevirt get all

连接到虚拟机控制台

[root@master ~]# kubectl virt console <vmi-name> -n <namespace>

四、KubeVirt运行策略

KubeVirt对象遵循kubernetes惯例,它们通常有Spec(规范)和Status(状态)节。该规范是用户可配置的,允许用户以声明的方式指示集群所需的状态。同时,状态部分不是用户可配置的,它反映了集群中食物的实际状态。简而言之,用户编辑规范,控制器编辑状态

Running

Running字段在VM的规范中,换句话说,运行(Running)VM是用户的意图。它不能反映虚拟机的实际运行(Running)状态

RunStrategy

通过使用“RunStrategy”这个名称,最终用户清楚地知道他们在请求状态,这当然是完全独立于系统实际提供的状态的。RunStrategy有助于解决命名术语的混淆,但它碰巧也是一个枚举值。因为Running是一个布尔值,只能为真或假。我们现在能够创建更有意义的状态来适应不同的案例

目前存在四种运行策略:

◎Always:如果一个VM由于任何原因被停止,一个新的实例将被派生

◎RerunOnFailure:如果VM在错误状态下结束执行,将会产生一个新的实例。这样就解决了上面所列的第二个问题。如果用户手动停止VM,则不会生成新的实例

◎Manual:KubeVirt不会尝试启动或者停止VM。为了改变状态,用户必须从API调用start/stop/restart。在virtctl命令行客户端中也有方便的函数

◎Halted:如果VM正在运行,它将被停止,并且将保持关闭状态

高可用性

如果不提到高可用性,对运行策略的讨论就不完整。毕竟,在RerunOnFailure和Always运行策略背后的含义是:VM应该始终可用。在大多数情况下,这是完全正确的,但有一个重要的场景需要注意:如果一个节点完全失败,例如网络或者电源丢失。如果没有自动检测节点不再活动的方法,KubeVirt将不知道VM已经失败。在使用中启用了MachineHealthCheck(MHC)的IPI安装的OpenShift集群上,可以检测失败节点并重新安排运行在那里的工作负载

例:创建一个 Always运行策略的 VM

 [root@k8s-master ~]# cat vm-f.yaml

apiVersion: kubevirt.io/v1

kind: VirtualMachine

metadata:

  labels:

    kubevirt.io/vm: vm-fedora

  name: vm-fedora

spec:

  runStrategy: Always

  template:

    metadata:

      labels:

        kubevirt.io/vm: vm-fedora

    spec:

      domain:

        resources:

          requests:

            memory: 1Gi

        devices:

          disks:

          - name: containerdisk

            disk:

              bus: virtio

      volumes:

      - name: containerdisk

        containerDisk:

          image: kubevirt/fedora-cloud-container-disk-demo:latest

      - name: cloudinitdisk

        cloudInitNoCloud:

          userDataBase64: SGkuXG4=

创建、查看VM

[root@k8s-master~]# kubectl delete -f vm-fedora.yaml

[root@k8s-master ~]# kubectl get vm

[root@k8s-master ~]# kubectl get vmi

4.1容器与虚拟机的统一管理

KubeVirt 是一个基于 Kubernetes 的扩展项目,旨在实现对虚拟机(VM)和容器的统一管理。通过将虚拟机作为 Kubernetes 中的原生资源(Custom Resources),KubeVirt 使得虚拟机可以像容器一样进行管理,允许用户在同一平台上运行容器化应用和传统虚拟化工作负载。

传统的虚拟化技术(如 KVM)和容器技术(如 Docker)在管理、调度和操作方式上存在很大差异。KubeVirt 通过 Kubernetes 提供的资源调度、自动化扩展、集群管理等能力,解决了这些差异,并提供了跨虚拟机与容器的统一平台。

4.2Kubernetes 与虚拟化的结合

Kubernetes 是一个开源的容器编排平台,主要用于管理容器化应用的部署、扩展、负载均衡等。它通过一组统一的 API 让开发者和运维人员能够以声明式的方式管理应用。

虚拟化技术(如 QEMU/KVM)则提供了独立的操作系统实例,通常用于运行传统的非容器化应用。虚拟化技术与 Kubernetes 结合时,KubeVirt 充当桥梁,实现容器与虚拟机资源的统一调度。

通过在 Kubernetes 中引入虚拟机,用户能够将现有的虚拟机基础设施与新兴的容器化工作负载无缝集成,从而简化集群管理,提高资源利用率

使用 KubeVirt 管理虚拟机与容器,提供对容器化和虚拟化工作负载的统一管理

我们可以动手感受一下,先创建一个虚拟机以及一个容器

[root@k8s-master ~]# cat vm.gl.yaml

apiVersion: kubevirt.io/v1

kind: VirtualMachine

metadata:

  name: test-vm

  namespace: default

spec:

  running: false  # 保持为 false,允许手动启动

  template:

    metadata:

      labels:

        kubevirt.io/vm: test-vm

    spec:

      domain:

        cpu:

          cores: 2

        memory:

          guest: 2Gi  # 设置虚拟机的内存为 2Gi

        devices:

          disks:

            - disk:

                bus: virtio

              name: disk0

      volumes:

        - name: disk0

          containerDisk:

            image: quay.io/kubevirt/cirros-registry-disk-demo

[root@k8s-master ~]# kubectl create -f vm.gl.yaml

查看虚拟机的状态(这里我们可以想想为什么可以用kubectl直接来查看虚拟机)

[root@k8s-master ~]# kubectl get virtualmachines -n default

访问虚拟机控制台

[root@k8s-master ~]# virtctl console test-vm

创建容器应用

[root@k8s-master ~]# cat app-deployment.yaml

apiVersion: apps/v1

kind: Deployment

metadata:

  name: nginx

  namespace: default

spec:

  replicas: 1

  selector:

    matchLabels:

      app: nginx

  template:

    metadata:

      labels:

        app: nginx

    spec:

      containers:

      - name: nginx

        image: nginx:latest

        ports:

        - containerPort: 80

[root@k8s-master ~]# kubectl create -f app-deployment.yaml

查看容器的运行状态

[root@k8s-master ~]# kubectl get pods -n default

通过上面的示例,我们可以发现,通过 KubeVirt,你可以使用 kubectl 来管理虚拟机和容器资源。虽然 Kubernetes 本身并不支持原生的虚拟机管理,但是 KubeVirt 扩展了 Kubernetes,使其能够像管理容器一样管理虚拟机。

那如果我们没有安装KubeVirt去查看集群内是否有虚拟机会出现什么

[root@k8s-master ~]# kubectl get virtualmachines -A

系统会提示你,Kubernetes API 服务器没有找到 virtualmachines 资源类型,这就要我们安装KubeVirt服务了

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词