k8s部署虚拟机KubeVirt

地址:https://github.com/kubevirt/kubevirt

1.安装kubevirt

# 导出 KubeVirt 版本(例如 v1.6.2)
export KUBEVIRT_VERSION="v1.6.2"
# 部署 KubeVirt Operator 和 CRD
kubectl apply -f https://github.com/kubevirt/kubevirt/releases/download/${KUBEVIRT_VERSION}/kubevirt-operator.yaml
#多等会,确认ok以后再执行下面的命令 



# kubectl get ns
NAME              STATUS   AGE
......
kubevirt          Active   10s
​
# kubectl get pods -n kubevirt
NAME                               READY   STATUS    RESTARTS      AGE
...
virt-operator-6d56bb6986-jl66g     1/1     Running   1 (39m ago)   8s
virt-operator-6d56bb6986-vnnkn     1/1     Running   1 (39m ago)   8s


# 部署 KubeVirt 核心组件
kubectl apply -f https://github.com/kubevirt/kubevirt/releases/download/${KUBEVIRT_VERSION}/kubevirt-cr.yaml


# kubectl get pods -n kubevirt
NAME                               READY   STATUS    RESTARTS      AGE
virt-api-5888cc84c7-2zstl          1/1     Running   1 (39m ago)   62m
virt-api-5888cc84c7-tscw9          1/1     Running   1 (39m ago)   62m
virt-controller-546465698c-dh644   1/1     Running   1 (39m ago)   61m
virt-controller-546465698c-ptrqm   1/1     Running   1 (39m ago)   61m
virt-handler-jmqwg                 1/1     Running   1 (39m ago)   61m
virt-handler-q22tx                 1/1     Running   1 (39m ago)   61m
virt-operator-6d56bb6986-jl66g     1/1     Running   1 (39m ago)   64m
virt-operator-6d56bb6986-vnnkn     1/1     Running   1 (39m ago)   64m






第二种方案:
1. 添加KubeVirt Helm仓库
helm repo add kubevirt https://kubevirt.io/helm-charts
helm repo update

2. 安装KubeVirt Operator
kubectl create namespace kubevirt
helm install kubevirt kubevirt/kubevirt -n kubevirt --version v0.58.0


3. 验证安装
# 检查KubeVirt自定义资源定义
kubectl get crd | grep kubevirt.io

# 检查Pod状态
kubectl get pods -n kubevirt

# 检查KubeVirt自定义资源
kubectl get kubevirt -n kubevirt
​

2.安装kubevirt客户端

 wget https://github.com/kubevirt/kubevirt/releases/download/v1.6.2/virtctl-v1.6.2-linux-amd64
 chmod +x virtctl-v1.6.2-linux-amd64
 mv virtctl-v1.6.2-linux-amd64 /usr/local/bin/virtctl
 virtctl version

3.安装虚拟机

##cat vm.yaml 
apiVersion: kubevirt.io/v1
kind: VirtualMachine
metadata:
  name: testvm
spec:
  runStrategy: Halted
  template:
    metadata:
      labels:
        kubevirt.io/size: small
        kubevirt.io/domain: testvm
    spec:
      domain:
        devices:
          disks:
            - name: containerdisk
              disk:
                bus: virtio
            - name: cloudinitdisk
              disk:
                bus: virtio
          interfaces:
          - name: default
            masquerade: {}
        resources:
          requests:
            memory: 64M
      networks:
      - name: default
        pod: {}
      volumes:
        - name: containerdisk
          containerDisk:
            image: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/quay.io/kubevirt/cirros-container-disk-demo:latest
        - name: cloudinitdisk
          cloudInitNoCloud:
            userDataBase64: SGkuXG4=



###部署
kubectl apply -f vm.yaml


####查看虚拟机
kubectl get vm
NAME        AGE   STATUS    READY
testvm   61m   Stopped   False
####启动虚拟机
virtctl start testvm

4.使用虚拟机

kubectl get vm
NAME     AGE     STATUS    READY
testvm   2d22h   Running   True



kubectl get vmi
NAME     AGE     PHASE     IP              NODENAME    READY
testvm   2d20h   Running   10.233.81.148   k8s-node1   True



####访问虚拟机控制台
virtctl console testvm
Successfully connected to vm-cirros console. The escape sequence is ^] 显示这个信息时,需要按回车键,才能出现登录提示。

login as 'cirros' user. default password: 'gocubsgo'. use 'sudo' for root.
vm-cirros login: cirros 用户名
Password: gocubsgo 密码
$ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc pfifo_fast qlen 1000
    link/ether d6:b9:cf:6a:9b:0c brd ff:ff:ff:ff:ff:ff
    inet 10.233.74.81/32 brd 10.255.255.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::d4b9:cfff:fe6a:9b0c/64 scope link
       valid_lft forever preferred_lft forever




#######为虚拟机创建service并访问
virtctl expose virtualmachine testvm --name vmiservice-node --target-port 22 --port 24 --type NodePort
# kubectl get svc
NAME              TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
kubernetes        ClusterIP   10.233.0.1     <none>        443/TCP        15h
vmiservice-node   NodePort    10.233.48.20   <none>        24:30747/TCP   43m



###另外一台机器上
 ssh -p30747  cirros@192.168.10.1

<think>好的,用户问的是在Kubernetes中使用KubeVirt是否必须开启内核的KVM支持。首先,我需要回忆一下KubeVirt的基本架构和它如何与Kubernetes集成。KubeVirt的作用是在K8s集群中管理虚拟机,通常用于传统虚拟机容器共存的场景。 接下来,我应该考虑KVM的作用。KVM是Linux内核的模块,允许用户空间程序访问硬件虚拟化扩展,比如Intel的VT-x或AMD的AMD-V。大多数情况下,虚拟机监控器(VMM)如QEMU/KVM依赖这些扩展来高效运行虚拟机。因此,KubeVirt默认情况下可能确实需要KVM支持,否则性能会受到影响,或者某些功能无法使用。 但用户的问题是否必须开启,可能存在例外情况。比如,是否可以使用纯软件模拟的方式,而不需要硬件虚拟化支持。这时候,QEMU可以模拟CPU和其他硬件,但性能会很差,且可能只适用于测试环境。这种情况下,可能不需要KVM,但功能和性能受限。 另外,需要考虑不同的虚拟化后端。KubeVirt是否支持其他虚拟化技术,比如Firecracker或其他不使用KVM的解决方案。但根据我的了解,KubeVirt主要与QEMU/KVM集成,因此可能还是依赖KVM。 还需要查看KubeVirt的官方文档是否有相关说明。比如,是否有配置选项可以在没有KVM的情况下运行,或者是否需要特定的设置来绕过硬件虚拟化需求。 可能用户的环境存在某些限制,比如云提供商不允许访问KVM模块,或者在容器化的环境中,节点没有启用嵌套虚拟化。这时候用户可能想知道是否有替代方案,或者是否必须迁移到支持KVM的环境。 另外,是否需要内核模块kvm和kvm_intel(或kvm_amd)都加载,还是其中一部分。如果节点没有这些模块,KubeVirt是否无法启动虚拟机,或者会回退到软件模拟。 总结一下,核心点应该是:KubeVirt在默认配置下需要KVM来有效运行虚拟机,尤其是生产环境。但在没有KVM的情况下,可能可以使用软件模拟,但性能差,不适合生产。需要明确用户是否需要生产级部署还是仅仅是测试,这可能影响答案的侧重点。</think>在 Kubernetes 中使用 KubeVirt 时,**通常需要内核开启 KVM(Kernel-based Virtual Machine)支持**,但具体依赖场景和需求有所不同。以下是关键点说明: --- ### **1. 默认情况下需要 KVM** - **性能与硬件虚拟化**: KubeVirt 默认使用 QEMU/KVM 作为虚拟化后端,依赖 KVM 实现硬件辅助虚拟化(如 Intel VT-x 或 AMD-V)。 开启 KVM 能显著提升虚拟机性能,接近物理机水平,适合生产环境。 - **必要条件**: 节点需满足: - 加载内核模块 `kvm`、`kvm_intel`(Intel CPU)或 `kvm_amd`(AMD CPU)。 - `/dev/kvm` 设备存在且容器运行时(如 Docker/Containerd)有权访问。 --- ### **2. 无 KVM 的替代方案** 若环境无法启用 KVM(如某些云环境限制),仍可通过 **纯软件模拟**(如 QEMU 的 TCG 模式)运行虚拟机,但需注意: - **性能严重下降**:CPU 和 I/O 操作由软件模拟,速度极低。 - **适用场景有限**:仅建议用于开发、测试或特殊兼容性需求。 - **配置调整**: 需在 KubeVirt 的 `VMI`(虚拟机实例)配置中禁用 KVM,例如: ```yaml spec: domain: features: kvm: # 禁用 KVM 支持 enabled: false devices: useVirtioTransitional: false ``` --- ### **3. 验证 KVM 支持** - **检查内核模块**: ```bash lsmod | grep kvm # 应输出 kvm_intel 或 kvm_amd 等模块。 ``` - **检查 `/dev/kvm` 设备**: ```bash ls -l /dev/kvm # 需存在该设备且容器运行时有权访问。 ``` --- ### **4. 特殊情况与注意事项** - **嵌套虚拟化**: 若 KubeVirt 运行在虚拟机中(嵌套虚拟化),需宿主机和嵌套层均启用 KVM 支持。 - **云环境限制**: 部分公有云可能限制嵌套虚拟化或直接访问 `/dev/kvm`,需确认提供商支持。 - **容器运行时权限**: 确保 Pod(如 `virt-handler`)有权限访问 `/dev/kvm`,通常需配置 `securityContext` 或特权模式。 --- ### **总结** - **生产环境**:**必须开启 KVM** 以获得高效、稳定的虚拟化性能。 - **开发/测试**:可禁用 KVM 使用软件模拟,但性能不适用于真实负载。 - **兼容性**:始终优先验证节点环境和 KubeVirt 配置是否满足虚拟化需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值