地址: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

更多推荐