製作KubeVirt映象

FuShudi發表於2024-07-23

目錄
  • 製作KubeVirt映象
    • 1. 準備磁碟檔案
    • 2. 編寫Dockerfile
    • 3. 構建映象
    • 4. 上傳映象到倉庫(可選)
    • 5. 匯出映象
    • 6. 虛擬機器yaml檔案
    • 7. 啟動虛擬機器
    • 8. 啟動虛擬機器報錯

製作KubeVirt映象

我們現在已經安裝好了Kubevirt並且也執行了第一個虛擬機器,但是這個虛擬機器並不是我們想要的,我們現在想要自定義映象

Kubernetes版本 1.28.2

1. 準備磁碟檔案

openEuler的qcow2檔案下載地址

我這裡構建的是openeuler虛擬機器,qcow2的檔案我可以直接在各大映象站下載到,下載完後是一個壓縮檔案,我們還需要解壓

[root@master ~]# wget https://mirrors.tuna.tsinghua.edu.cn/openeuler/openEuler-22.03-LTS-SP4/virtual_machine_img/x86_64/openEuler-22.03-LTS-SP4-x86_64.qcow2.xz
[root@master ~]# xz -d openEuler-22.03-LTS-SP4-x86_64.qcow2.xz

這樣一個磁碟檔案我們就準備好了,當然也可以透過其他的方式去獲取,例如透過KVM建立一個虛擬機器然後把磁碟檔案拿出來,或者透過openstack來得到qcow2檔案

2. 編寫Dockerfile

我們需要將這個磁碟檔案傳到容器映象內部

[root@master ~]# mkdir -p kubevirt/images
[root@master ~]# cd kubevirt/images
[root@master images]# cp ~/openEuler-22.03-LTS-SP4-x86_64.qcow2 .
[root@master images]# ls
openEuler-22.03-LTS-SP4-x86_64.qcow2

檔案放在這個地方,然後我們開始編寫dockerfile

FROM openeuler/openeuler:22.03
ADD openEuler-22.03-LTS-SP4-x86_64.qcow2 /disk/openEuler-22.03-LTS-SP4-x86_64.qcow2

就只需要寫這2行就可以瞭然後開始構建映象

3. 構建映象

[root@master images]# docker build -t openeuler2203-sp4:v1 .

接下來等待構建完成

4. 上傳映象到倉庫(可選)

如果你沒有私有映象倉庫的話,這一步可以不做,直接將映象匯出然後使用ctr匯入(等會會說)

我們現在需要將映象上傳到私有倉庫,所以我們得先修改映象tag

[root@master images]# docker tag openeuler2203-sp4:v1 harbor.test.com/openeuler2203-sp4:v1
[root@master images]# docker push harbor.test.com/openeuler2203-sp4:v1

推送映象之前得先登入,自行登入就好了,這裡映象就上傳好了

5. 匯出映象

如果你沒有私有倉庫的話,就做這一步

[root@master images]# docker save -o openeuler.tar openeuler2203-sp4:v1
[root@master images]# ctr -n k8s.io image import  openeuler.tar

匯入完成之後我們就可以使用這個映象來啟動虛擬機器了,接下來我們準備一個虛擬機器的啟動模板

6. 虛擬機器yaml檔案

[root@master images]# vim oe-vm.yaml


apiVersion: kubevirt.io/v1
kind: VirtualMachine
metadata:
  name: openeuler
spec:
  running: false
  template:
    metadata:
      labels:
        kubevirt.io/domain: openeuler
    spec:
      domain:
        devices:
          disks:
          - name: rootfs
            disk:
              bus: virtio
          - name: cloudinit
            disk:
              bus: virtio
          interfaces:
          - name: default
            bridge: {}
        resources:
          requests:
            memory: 1Gi
          limits:
            memory: 1Gi
      networks:
      - name: default
        pod: {}
      volumes:
        - name: rootfs
          containerDisk:
            image: openeuler2203-sp4:v1
             # 這個地方填寫剛剛傳進去的磁碟檔名
            path: /disk/openEuler-22.03-LTS-SP4-x86_64.qcow2                    
        #- name: cloudinit
        #  cloudInitNoCloud:
        #    userData: |-
        #      #cloud-config
        #      password: openeuler
        #      chpasswd: { expire: False }
        #      ssh_pwauth: True
        #      packages:
        #       - nginx
        #     runcmd:
        #       - systemctl enable nginx
        #       - systemctl start nginx

最後面這一段是cloud-init,但是openeuler預設沒有安裝這個服務,所以寫上也沒用,換成其他的系統是完全OK的,這裡的cloud-init是讓他執行一些個性化的操作,我這裡就是寫的安裝nginx並修改root的密碼,在我這裡不生效,所以我註釋了

7. 啟動虛擬機器

我們準備好了映象以及yaml檔案,那麼我們現在可以開始啟動虛擬機器了

[root@master images]# kubectl apply -f oe-vm.yaml
[root@master kubevirt]# kubectl get vms
NAME        AGE     STATUS    READY
openeuler   41s     Stopped   False

接下來我們啟動這個虛擬機器

[root@master kubevirt]# virtctl start openeuler
VM openeuler was scheduled to start
[root@master kubevirt]# kubectl get vms
NAME        AGE     STATUS    READY
openeuler   1m17s   Running   True

現在他已經變成running了,我們就可以連線進去了

[root@master kubevirt]# virtctl console openeuler
Successfully connected to openeuler console. The escape sequence is ^]

openeuler login: root
Password: 

Authorized users only. All activities may be monitored and reported.


Welcome to 5.10.0-216.0.0.115.oe2203sp4.x86_64

System information as of time: 	Tue Jul 23 09:32:59 AM UTC 2024

System load: 	0.38
Memory used: 	3.7%
Swap used: 	0.0%
Usage On: 	4%
IP address: 	10.244.219.127
Users online: 	1


[root@openeuler ~]#

這個映象的預設密碼是openEuler12#$

或者直接透過ssh連線,他的IP地址是10.244.219.127

[root@master kubevirt]# ssh root@10.244.219.127

Authorized users only. All activities may be monitored and reported.
root@10.244.219.127's password: 

也是可以連線上的

8. 啟動虛擬機器報錯

[root@master kubevirt]# kubectl apply -f oe-vm.yaml 
Warning: kubevirt.io/v1alpha3 is now deprecated and will be removed in a future release.
The request is invalid: spec.template.spec.volumes[2]: HostDisk feature gate is not enabled

如果你報這個錯的話是因為沒有開啟這個hostDisk特性,我們將他開啟就好了

[root@master kubevirt]# kubectl edit -n kubevirt kv kubevirt 


spec:
  configuration:
    developerConfiguration:
      featureGates:
      - HostDisk

找到這一段,將內容改成這樣,然後儲存退出即可解決報錯

相關文章