Kubernetes(k8s)

我们上一章介绍了Docker基本情况,目前在规模较大的容器集群基本都是Kubernetes,但是Kubernetes涉及的东西和概念确实是太多了,而且随着版本迭代功能在还增加,笔者有些功能也确实没用过,所以只能按照我自己的理解来讲解。

我们上小节介绍kubevirt的安装和用一个案例来演示了创建一个虚拟机,今天我们就来详细介绍如何把自己的业务封装在虚拟机里面,然后使用Kubernetes来进行调度。

1.准备一个qcow2镜像

这个镜像我们是在里面放置一个Nginx服务,然后开机启动,没有数据盘,因为核心目的是让我们学会做把虚拟机里面的业务放到Kubernetes集群里面进行使用。需要把虚拟机里面的IP配置成DHCP,否则这个虚拟机启动以后网络无法联通。如果对虚拟机的不熟悉,可以翻看我的历史文章:KVM虚拟化。

2.构建成容器镜像

代码语言:javascript代码运行次数:0运行复制
# 使用空镜像(仅包含磁盘文件)
FROM scratch

# 添加虚拟机磁盘文件到 /disk 目录(固定路径)
ADD kubevirt-nginx.qcow2 /disk/

为了方便测试,我这里是在Docker环境进行构建的。下图的时间是0,是因为我已经跑过多次,这里使用缓存。qcow2文件需要提前给755权限。

3.创建kubevirt

这里只配置了一个系统盘,也没有初始化配置,机器的密码使用镜像自带的密码。

代码语言:javascript代码运行次数:0运行复制
apiVersion: kubevirt.io/v1
kind: VirtualMachine
metadata:
  name: nginx-vm
spec:
  running: true  # 创建后自动启动
  template:
    metadata:
      labels:
        kubevirt.io/domain: nginx-vm
    spec:
      domain:
        devices:
          disks:
          - name: rootdisk
            disk:
              bus: virtio  # 磁盘总线类型
        resources:
          requests:
            memory: 1Gi
            cpu: 1
      volumes:
      - name: rootdisk
        containerDisk:
          image: 192.168.31.43:5000/kubevirt-nginx:latest  # 引用容器镜像
          path: /disk/kube-virt-nginx.qcow2  # 镜像内磁盘路径

4.查看虚拟机

下图是qcow2镜像使用手工配置IP和Pod分配的地址无法不一致,是不能使用的错误示范。这个也是为什么上面提到的虚拟机需要是DHCP的原因。

下图则是把qcow2镜像改成dhcp方式这样容器虚拟机的ip保持一致,这样这个虚拟机或者说Pod就可以和其他Pod一样正常提供服务。

5.测试虚拟机

代码语言:javascript代码运行次数:0运行复制
#这里是请求虚拟机里面的nginx服务
[root@master01 ~]# curl -o /dev/null -s -w \"%{http_code}\n" 
200
[root@master01 ~]# 

测试虚拟机(Pod)的ssh和磁盘。

6.总结

1.镜像文件必须预先添加755权限,否则无法启动虚拟机。

2.镜像文件必须使用关闭静态IP,开启dhcp,网络配置才会正常。

3.这里是考虑了功能实现,未考虑其他,比如IP固定,数据持久化等问题,有兴趣可以下去自己研究。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。原始发表:2025-03-29,如有侵权请联系 cloudcommunity@tencent 删除配置虚拟机kubernetes磁盘镜像