[沒接觸過kubevirt?]15分鍾快速入門kubevirt


@

本文介紹

本文有兩個版本,詳細版、簡潔版

前者適合新手,后者適合老手方便大家查找,從而過濾掉某些步驟,節約時間成本 所以大家按需查看喲。

詳細版 簡潔版

簡潔版:包含所有步驟,以及命令的執行過程(適合新手)

簡潔版:只包含命令(適合有一定熟練度的人)

前言

  • 什么是kubevirt?

    kubevirt是一個容器方式運行虛擬機的項目。kubevirt是附加kubernetes集群上的,它是通過 CustomResourceDefinition(CRD)部署到Kubernetes API變成資源對象。使用方式類似創建deploy、pod......這些資源清單。

環境准備

  • 環境保證網絡出外網
系統 服務
centos7 kubernetes集群

官網地址:https://kubevirt.io/

詳細版

搭建步驟

安裝KubeVirt

[root@master ~]# export RELEASE=v0.35.0
[root@master ~]# kubectl apply -f https://github.com/kubevirt/kubevirt/releases/download/${RELEASE}/kubevirt-operator.yaml
[root@master ~]# kubectl apply -f https://github.com/kubevirt/kubevirt/releases/download/${RELEASE}/kubevirt-cr.yaml
[root@master ~]# kubectl get pods -n kubevirt
NAME                               READY   STATUS    RESTARTS   AGE
virt-api-64999f7bf5-fblkh          1/1     Running   0          5m24s
virt-api-64999f7bf5-l8wzr          1/1     Running   0          5m24s
virt-controller-8696ccdf44-k9qpv   1/1     Running   0          4m52s
virt-controller-8696ccdf44-tpxwp   1/1     Running   0          4m52s
virt-handler-kl8tl                 1/1     Running   0          4m52s
virt-operator-78fbcdfdf4-468h4     1/1     Running   0          8m4s
virt-operator-78fbcdfdf4-nvvxx     1/1     Running   0          8m4s

所以服務啟動后,執行下面這條命令

[root@master ~]# kubectl -n kubevirt wait kv kubevirt --for condition=Available
kubevirt.kubevirt.io/kubevirt condition met

安裝virtctl客戶端工具

[root@master ~]# export VERSION=v0.41.0
[root@master ~]# wget https://github.com/kubevirt/kubevirt/releases/download/${VERSION}/virtctl-${VERSION}-linux-amd64
[root@master kubevirt]# cp virtctl-v0.41.0-linux-amd64 /usr/local/bin/virtctl
[root@master kubevirt]# chmod +x /usr/local/bin/virtctl ; ll /usr/local/bin/
total 64000
-r-xr-xr-x. 1 root root 17586312 Jan 11 10:52 docker-compose
-rwxr-xr-x. 1 root root 47944250 Apr 16 16:58 virtctl
[root@master kubevirt]# virtctl version
Client Version: version.Info{GitVersion:"v0.41.0", GitCommit:"b77b858ac9345ae6858cf409e1833f4548ec2809", GitTreeState:"clean", BuildDate:"2020-11-09T13:38:36Z", GoVersion:"go1.13.14", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{GitVersion:"{gitVersion}", GitCommit:"{gitCommit}", GitTreeState:"{gitTreeState}", BuildDate:"{buildDate}", GoVersion:"go1.13.14", Compiler:"gc", Platform:"linux/amd64"}

創建VirtualMachine

  • VirtualMachine(vm)類似於docker鏡像一個模板可以啟動很多運行實例vmi:
[root@master kubevirt]# cat test.yaml
apiVersion: kubevirt.io/v1alpha3
kind: VirtualMachine
metadata:
  labels:
    kubevirt.io/vm: vm-cirros
  name: vm-cirros
spec:
  running: false
  template:
    metadata:
      labels:
        kubevirt.io/vm: vm-cirros
    spec:
      domain:
        devices:
          disks:
          - disk:
              bus: virtio
            name: containerdisk
          - disk:
              bus: virtio
            name: cloudinitdisk
        machine:
          type: ""
        resources:
          requests:
            memory: 64M
      terminationGracePeriodSeconds: 0
      volumes:
      - name: containerdisk
        containerDisk:
          image: kubevirt/cirros-container-disk-demo:latest
      - cloudInitNoCloud:
          userDataBase64: IyEvYmluL3NoCgplY2hvICdwcmludGVkIGZyb20gY2xvdWQtaW5pdCB1c2VyZGF0YScK
        name: cloudinitdisk
[root@master kubevirt]# kubectl apply -f test.yaml
virtualmachine.kubevirt.io/vm-cirros created

[root@master kubevirt]# kubectl get vm
NAME        AGE   VOLUME
vm-cirros   21m

啟動VirtualMachineInstance

  • VirtualMachineInstance(vmi)類似於docker鏡像的運行實例容器:
[root@master kubevirt]# virtctl start vm-cirros
VM vm-cirros was scheduled to start
[root@master kubevirt]# kubectl get vmi
NAME        AGE   PHASE     IP            NODENAME
vm-cirros   62s   Running   10.244.0.15   master

[root@master kubevirt]# virtctl console vm-cirros  # 進入虛擬機
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:
$ ip a
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 2e:3e:2a:46:29:94 brd ff:ff:ff:ff:ff:ff
    inet 10.244.0.16/24 brd 10.244.0.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::2c3e:2aff:fe46:2994/64 scope link tentative flags 08
       valid_lft forever preferred_lft forever
       
$    #  按 ctrl+]  退出虛擬機
$ [root@master kubevirt]#

啟動和停止命令

spec.running 字段如果設置為true為啟動、false為停止**

  • 創建 VirtualMachine 后,可以像這樣打開或關閉它:
# Start the virtual machine:  啟動虛擬機
virtctl start vm   

# Stop the virtual machine:  停止虛擬機
virtctl stop vm
  • kubectl也可以使用:
# Start the virtual machine:  啟動虛擬機
kubectl patch virtualmachine vm --type merge -p \
    '{"spec":{"running":true}}'

# Stop the virtual machine:  停止虛擬機
kubectl patch virtualmachine vm --type merge -p \
    '{"spec":{"running":false}}'

vm作為服務公開

VirtualMachine 可以作為服務公開。實際服務將在 VirtualMachineInstance 啟動后可用。

例如, 在創建 VirtualMachine 后,將 SSH 端口 (22) 公開為NodePort服務

[root@master kubevirt]# virtctl expose virtualmachine  vm-cirros --name vmiservice-node  --target-port 22  --port 24 --type NodePort
Service vmiservice-node successfully exposed for virtualmachine vm-cirros
[root@master kubevirt]# kubectl get svc
NAME              TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
kubernetes        ClusterIP   10.96.0.1       <none>        443/TCP        95d
vmiservice-node   NodePort    10.106.62.191   <none>        24:31912/TCP   3s

最后使用遠程工具連接即可:

** 注意 端口使用svc NodePort端口,如圖所示:

255qE5oqA5pyvTG9ncw==,size_20,color_FFFFFF,t_70,g_se,x_16)在這里插入圖片描述在這里插入圖片描述

簡潔版

安裝KubeVirt

export RELEASE=v0.35.0
kubectl apply -f https://github.com/kubevirt/kubevirt/releases/download/${RELEASE}/kubevirt-operator.yaml
kubectl apply -f https://github.com/kubevirt/kubevirt/releases/download/${RELEASE}/kubevirt-cr.yaml
kubectl get pods -n kubevirt
kubectl -n kubevirt wait kv kubevirt --for condition=Available

安裝virtctl客戶端工具

export VERSION=v0.41.0
wget https://github.com/kubevirt/kubevirt/releases/download/${VERSION}/virtctl-${VERSION}-linux-amd64
cp virtctl-v0.41.0-linux-amd64 /usr/local/bin/virtctl
chmod +x /usr/local/bin/virtctl ; ll /usr/local/bin/
virtctl version

創建VirtualMachine

[root@master kubevirt]# cat test.yaml
apiVersion: kubevirt.io/v1alpha3
kind: VirtualMachine
metadata:
  labels:
    kubevirt.io/vm: vm-cirros
  name: vm-cirros
spec:
  running: false
  template:
    metadata:
      labels:
        kubevirt.io/vm: vm-cirros
    spec:
      domain:
        devices:
          disks:
          - disk:
              bus: virtio
            name: containerdisk
          - disk:
              bus: virtio
            name: cloudinitdisk
        machine:
          type: ""
        resources:
          requests:
            memory: 64M
      terminationGracePeriodSeconds: 0
      volumes:
      - name: containerdisk
        containerDisk:
          image: kubevirt/cirros-container-disk-demo:latest
      - cloudInitNoCloud:
          userDataBase64: IyEvYmluL3NoCgplY2hvICdwcmludGVkIGZyb20gY2xvdWQtaW5pdCB1c2VyZGF0YScK
        name: cloudinitdisk
[root@master kubevirt]# kubectl apply -f test.yaml
virtualmachine.kubevirt.io/vm-cirros created

[root@master kubevirt]# kubectl get vm
NAME        AGE   VOLUME
vm-cirros   21m

啟動VirtualMachineInstance

virtctl start vm-cirros
kubectl get vmi
virtctl console vm-cirros  # 進入虛擬機
按 ctrl+]  退出虛擬機

啟動和停止命令

virtctl start vm   
virtctl stop vm

# Start the virtual machine:  啟動虛擬機
kubectl patch virtualmachine vm --type merge -p \
    '{"spec":{"running":true}}'

# Stop the virtual machine:  停止虛擬機
kubectl patch virtualmachine vm --type merge -p \
    '{"spec":{"running":false}}'

vm作為服務公開

[root@master kubevirt]# virtctl expose virtualmachine  vm-cirros --name vmiservice-node  --target-port 22  --port 24 --type NodePort
[root@master kubevirt]# kubectl get svc


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM