libvirt-qemu-用cgroup对虚拟机进行资源分割

(文章来自作者维护的社区微信公众号【虚拟化云计算】)
(目前有两个微信群《kvm虚拟化》和《openstack》,扫描二维码点击“云-交流”,进群交流提问)
    使用libvirt可以把创建的虚拟机放到cgroup划分的资源区中,从而实现所有虚拟机、部分虚拟机、单个虚拟机的资源控制,例如控制虚拟机的cpu使用情况、控制虚拟机在host上内存的使用大小等。
 
libvirt默认资源划分:
默认的libvirt使用cgroup创建一个名为machine的组:/sys/fs/cgroup/cpuset/machine/。
然后使用libvrit创建的虚拟机都在这个machine组中。
控制或改变machine组中的各个资源就可以控制虚拟机。
例如:
改变/sys/fs/cgroup/memory/machine/memory.limit_in_bytes的大小,就可以改变使用libvirt创建的所有虚拟机的实际占用host的总内存大小。
 
libvirt指定资源划分:
如果需要把部分虚拟机划分的一个资源组中,单独对这个资源组进行资源的控制,则需要手动创建资源组。
 
例如建立一个新的资源组名字为openstack.partition,步骤
1.在RESOURCE中建立目录:/sys/fs/cgroup/$RESOURCE/machine/openstack.partition/
(这里RESOURCE的取值为blkio cpu,cpuacct cpuset devices freezer memory net_cls perf_event)
 
2.根据需求修改/sys/fs/cgroup/$RESOURCE/machine/openstack.partition/中的资源,例如修改/sys/fs/cgroup/memory/machine/openstack.partition/memory.limit_in_bytes的大小。
 
3.在openstack.partition资源组中创建虚拟机。
libvirt的domain的xml:
 
<domain type='kvm' id='6'>
  ....
  <resource>
    <partition>/machine/openstack.partition</partition>
  </resource>
  ....
</domain>
4.启动虚拟机后,虚拟机的资源就收到了openstack.partition资源组的控制。
可以看到在/sys/fs/cgroup/memory/machine/openstack.partition/目录下多了此虚拟机的文件夹:instance-00000049.libvirt-qemu
 
注:
1./sys/fs/cgroup/中资源的控制是可以嵌套的,子目录的资源定制可以覆盖掉父目录的资源定制。
2.在上面例子是在ubuntu这种非systemd启动的系统中实践。在centos等systemd启动的系统中配置方式有所区别。
具体可参考libvirt文档: https://libvirt.org/cgroups.html
 
============================================================
关注微信公众号【虚拟化云计算】,阅读更多虚拟化云计算知识,纯技术干货更新不停。
 
 
 
### 使用 Docker 安装配置虚拟机 通常情况下,Docker 并不是用于直接安装虚拟机的技术;相反,它提供了一种轻量级的容器化解决方案。然而,在某些场景下可以通过运行支持虚拟化的 Docker 镜像来间接实现这一目标。 #### 创建支持 KVM 的环境 为了使 Docker 能够利用宿主机上的硬件辅助虚拟化功能(如 Intel VT-x 或 AMD-V),需要确保这些特性被传递给容器内的进程。这涉及到使用特定参数启动带有特权模式和支持设备直通特性的容器[^1]。 ```bash docker run --privileged -it --rm \ --device /dev/kvm \ ubuntu:latest bash ``` 上述命令会创建一个新的 Ubuntu 容器实例并挂载 `/dev/kvm` 设备文件到其中,从而允许内部应用程序访问物理 CPU 的扩展指令集来进行高效模拟。 #### 构建基于 QEMU/KVM 的镜像 接下来可以构建一个自定义的基础镜像,该镜像包含了必要的工具和服务以便于管理来宾操作系统: - `qemu-system-x86_64`: 主要负责执行客户 OS; - `virt-manager`, `libvirt-daemon-driver-qemu`: 提供图形界面管理和 API 接口; - 其他依赖库和驱动程序。 编写一份简单的 Dockerfile 来描述所需组件及其版本号,并通过官方仓库拉取最新稳定版软件包进行打包处理[^2]。 ```dockerfile FROM ubuntu:bionic RUN apt-get update && \ DEBIAN_FRONTEND=noninteractive apt-get install -y \ qemu-kvm libvirt-clients libvirt-daemon-system bridge-utils virtinst CMD ["virsh", "--connect=qemu:///system"] ``` 最后按照常规流程编译生成最终制品: ```bash docker build . -t my-virtualization-env ``` #### 启动与维护服务 一旦拥有了合适的映像资源之后就可以考虑将其部署上线了。考虑到长期稳定性因素建议采用后台守护方式保持在线状态,同时监听来自外部网络连接请求以方便远程操控[^3]。 ```bash docker run -d --name kvm-host --network host --restart unless-stopped \ --security-opt seccomp=unconfined \ --cap-add NET_ADMIN --cap-add SYS_NICE --cap-add IPC_LOCK \ --tmpfs /run --tmpfs /var/run \ --volume /sys/fs/cgroup:/sys/fs/cgroup:ro \ my-virtualization-env virsh --connect=qemu:///system ``` 以上操作完成后即成功搭建了一个简易但完整的 Linux 下虚拟平台框架结构,后续可根据实际需求进一步优化调整各项设置选项直至满足业务逻辑要求为止。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值