前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >KubeVirt 进阶:设置超卖比、CPU/MEM 升降配、在线磁盘扩容

KubeVirt 进阶:设置超卖比、CPU/MEM 升降配、在线磁盘扩容

作者头像
SRE运维进阶之路
发布2025-01-08 12:35:19
发布2025-01-08 12:35:19
11000
代码可运行
举报
运行总次数:0
代码可运行

前两篇文章,我们分别介绍 Kubevirt 的安装、基本使用 以及 将 oVirt 虚拟机迁移到 KubeVirt,我们留了两个ToDo,一个是本地磁盘的动态分配,一个是固定 IP 的需求,本期我们先解决第一个,本地磁盘的动态分配。

使用 OpenEBS-LVM 替换 local-storage

OpenEBS-LVM 对比 local-storage,主要新增了容量限额、动态分配PV、resize 功能,本文不做过多介绍,后面会单独讲 。

创建 sc 时,注意两个点,开启卷扩展,allowVolumeExpansion: true,卷绑定方式选择延迟绑定,volumeBindingMode: WaitForFirstConsumer

kubevirt 进阶功能介绍

设置超卖比[1]

kubectl -n kubevirt edit kubevirts.kubevirt.io kubevirt

代码语言:javascript
代码运行次数:0
复制
...
spec:
  configuration:
    developerConfiguration:
      cpuAllocationRatio: 2 # CPU 超卖2倍
      memoryOvercommit: 200 # 内存超卖2倍
...

示例,设置虚拟机规格为 8c16g,不声明 Request

代码语言:javascript
代码运行次数:0
复制
...
    spec:
      domain:
        cpu:
          cores: 8
        memory:
          guest: 16Gi
...

创建成功后, 查看 Pod 的 Request 值,发现是设置值的1/2 ,符合预期

代码语言:javascript
代码运行次数:0
复制
      requests:
        cpu: "4"
        devices.kubevirt.io/kvm: "1"
        devices.kubevirt.io/tun: "1"
        devices.kubevirt.io/vhost-net: "1"
        ephemeral-storage: 50M
        memory: 8506Mi

登录虚拟机查看,为 8c16g,符合预期

如果声明了 Request 值,则优先走 Request 值

CPU/MEM 升配

修改 CPU/MEM 值, 重启 VM 即可

代码语言:javascript
代码运行次数:0
复制
virtctl restart <vmi>

Kubevirt 也支持热升配[2],不停机,但有些限制,比如内核版本,存储读写模式等,后续实践后分享

磁盘在线扩容[3]

开启磁盘扩容功能

kubectl -n kubevirt edit kubevirts.kubevirt.io kubevirt

代码语言:javascript
代码运行次数:0
复制
spec:
  configuration:
    developerConfiguration:
      featureGates:
      - ExpandDisks

查看当前数据盘大小,为500Gi

在线扩容到 600G 步骤, 手动修改关联 PVC 的大小即可, openebs-lvm 会自动扩容

代码语言:javascript
代码运行次数:0
复制
...
spec:
  resources:
    requests:
      storage: "600Gi"

登录服务器,扩容文件系统

代码语言:javascript
代码运行次数:0
复制
resize2fs /dev/vdb # ext4 文件系统,数据盘为 vdb

固定 IP、设置亲和性[4]

因为暂时还没实现固定 IP, 但是担心 虚拟机重启, IP 发生改变,对业务产生影响,所以暂时,指定 Node 进行分配 VM

从指定 的 Node 上选择 VMI IP:

代码语言:javascript
代码运行次数:0
复制
# 查看 Node 分配的 block
kubectl  get blockaffinities.crd.projectcalico.org
# 挑选一个 没有分配的 IP 
calicoctl ipam show --ip=$(ip_addr)
# 指定 Pod IP
...
spec:
  template:
    metadata:
      annotations:
        cni.projectcalico.org/ipAddrs: '["pod-ip"]'

指定 Node 亲和性

代码语言:javascript
代码运行次数:0
复制
...
    spec:
      nodeSelector:
        kubernetes.io/hostname: "nodename"
...

VM 完整 Yaml 文件如下:

代码语言:javascript
代码运行次数:0
复制
apiVersion: kubevirt.io/v1
kind:VirtualMachine
metadata:
labels:
    kubevirt.io/vm:<vmi-name>
name:<vmi-name>
spec:
running:false
template:
    metadata:
      labels:
        kubevirt.io/vm:<vmi-name>
      annotations:
        cni.projectcalico.org/ipAddrs:'["pod-ip"]'
    spec:
      nodeSelector:
        kubernetes.io/hostname:"nodename"
      domain:
        cpu:
          cores:8
        memory:
          guest:16Gi
        devices:
          disks:
          -disk:
              bus:virtio
            name:datavolumedisk1-sys
          -disk:
              bus:virtio
            name:datavolumedisk1-data
          interfaces:
          -name:default
            bridge:{}
        #resources:
        #  requests:
        #    memory: 8Gi
      networks:
      -name:default
        pod:{}
      volumes:
      -dataVolume:
          name:demo-1-sys
        name:datavolumedisk1-sys
      -dataVolume:
          name:demo-1-data
        name:datavolumedisk1-data
dataVolumeTemplates:
-metadata:
      name:demo-1-sys
    spec:
      storage:
        storageClassName:openebs-lvm
        accessModes:
        -ReadWriteOnce
        resources:
          requests:
            storage:80Gi
      source:
        http:
          url:<img_url>
-metadata:
      name:demo-1-data
    spec:
      storage:
        storageClassName:openebs-lvm
        accessModes:
        -ReadWriteOnce
        resources:
          requests:
            storage:500Gi
      source:
        blank:{}

参考链接:

[1] Node overcommit:https://kubevirt.io/user-guide/compute/node_overcommit/#node-overcommit

[2] CPU Hotplug:https://kubevirt.io/user-guide/compute/cpu_hotplug/#cpu-hotplug

Memory Hotplug:https://kubevirt.io/user-guide/compute/memory_hotplug/#memory-hotplug

[3] disk expansion https://kubevirt.io/user-guide/storage/disks_and_volumes/#disk-expansion

[4] Node assignment https://kubevirt.io/user-guide/compute/node_assignment/#node-assignment

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-01-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 SRE运维进阶之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 设置超卖比[1]
  • CPU/MEM 升配
  • 磁盘在线扩容[3]
  • 固定 IP、设置亲和性[4]
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档