虚拟化技术调研

  • Post author:
  • Post category:其他




虚拟化技术调研



容器/虚拟化技术

容器是一种轻量级虚拟化技术,它可以在一台宿主机上共享内核,并且在运行应用程序时具有独立的文件系统空间、网络空间、进程空间和用户空间。常见的容器技术有Docker和LXC。



KVM虚拟化技术

KVM是一种全虚拟化技术,它允许在虚拟机上运行不同的操作系统,同时为每个虚拟机提供独立的硬件资源。KVM使用硬件虚拟化技术,使虚拟机能够直接运行在物理硬件上,而不需要修改虚拟机的操作系统。



XEN虚拟化技术

XEN也是一种全虚拟化技术,它提供了一个虚拟化的层来运行多个虚拟机。XEN可以在X86体系结构上运行,它使用PV和HVM来支持虚拟化。PV(Para-Virtualization)是一种半虚拟化技术,它允许虚拟机操作系统和宿主机之间进行通信,并共享底层硬件资源。而HVM(Hardware Virtual Machine)是一种硬件虚拟化技术,它让虚拟机可以在KVM上运行,可以直接使用CPU虚拟化技术。



嵌入式linux的虚拟化

由于项目中需要用到虚拟化技术来隔离部分代码,防止进程间的干扰和冲突,所以我们选用了容器来分离代码,LXC比较不错。



LXC介绍

LXC(Linux Containers)是一种轻量级虚拟化技术,它能够在单个Linux主机上运行多个操作系统实例,每个实例都能够独立地运行应用程序。另外,LXC只需要一个宿主机系统内核,能够在不需要硬件虚拟化的情况下实现虚拟化。

在嵌入式Linux的虚拟化中,LXC可以用来为每个应用程序提供隔离的环境,以避免应用程序之间相互干扰。比如,当在同一嵌入式设备上运行多个应用程序时,LXC可以将每个应用程序打包成一个容器(container),从而实现多个应用程序之间的隔离,确保它们的运行和数据安全。

因此,LXC可以用于嵌入式Linux的虚拟化,为嵌入式设备中多个应用程序提供隔离的虚拟化环境。



LXC下载

你可以在LXC官方网站上下载相应版本的LXC:https://linuxcontainers.org/lxc/downloads/在这个页面上你可以看到列有多个LXC版本,包括最新版本和旧版本。

git clone https://github.com/lxc/lxc.git
meson setup -Dprefix=/usr build
meson compile -C build

在第二步,编译的时候报错:

meson.build:280:4: ERROR: Dependency "dbus-1" not found, tried pkgconfig and cmake

原因为dbus没安装,安装dbus

sudo apt-get install libdbus-1-dev

安装后依然报错

meson.build:329:8: ERROR: Problem encountered: missing required docbook2x or docbook-utils dependency

安装docbook2

sudo apt-get install docbook2x

继续编译,成功

执行安装

meson compile -C build

meson install -C build



LXC的使用

在编译完成 LXC 后,你可以使用 make install 命令将编译好的文件安装到系统中。安装完成后,你就可以开始使用 LXC 实现容器化了。

LXC 的使用方式有多种,以下是 LXC 的基本使用:

创建容器

创建一个名为 my-container 的容器:

lxc-create -n my-container -t download

这将下载并创建一个 Ubuntu 容器。

启动容器

lxc-start -n my-container

进入容器

lxc-attach -n my-container

在容器中可以执行任意命令,类似与在一个独立的操作系统中运行。

停止容器

lxc-stop -n my-container

其他高级功能,如在容器中执行应用程序,访问容器的网络等功能也可以使用 LXC 来实现。



非嵌入式 安装lxc

sudo apt-get install lxc

sudo apt install lxc-utils

遇到问题:

sudo apt update

sudo apt install lxc-utils



LXC应用

lxc-create -n my-container -t download
lxc-create: my-container: ../src/lxc/parse.c: lxc_file_for_each_line_mmap: 78 No such file or directory - Failed to open file "/home/test/.config/lxc/default.conf"
lxc-create: my-container: ../src/lxc/utils.c: get_template_path: 900 No such file or directory - bad template: download
lxc-create: my-container: ../src/lxc/lxccontainer.c: __lxcapi_create: 1799 Template "download" not found
lxc-create: my-container: tools/lxc_create.c: main: 317 Failed to create container my-container

需要安装的程序

[root@SYL4 ~]# yum -y install epel-release
[root@SYL4 ~]# yum -y install lxc lxc-templates bridge-utils lxc-libs libcgroup libvirt
lxc           #主程序包
lxc-templates #lxc的配置模板
bridge-utils  #网桥管理工具
lxc-libs      #lxc所需的库文件
libcgroup     #cgroup是为Linux内核提供任务聚集和划分的机制,通过一组参数集合将一些任务组织成一个或多个子系统。
libvirt       #管理Linux的虚拟化功能所需的服务器端守护程序。 需要针对特定驱动程序的管理程序。
sudo snap install lxd



命令列表

# ubuntu版本
sudo lsb_release -a
# 初始化配置 Initial configuration
sudo lxd init
# container 创建ubuntu容器样例
lxc launch ubuntu:16.04 first
# 显示可用镜像
lxc image list images: | less
lxc image list images: ‘centos’
# LXD/LXC 2.0使用清华镜像加速的方法:
创建一个remote链接,指向镜像站即可,或替换掉默认的images链接。
lxc remote add tuna-images  https://mirrors.tuna.tsinghua.edu.cn/lxc-images/ --protocol=simplestreams --public
# 显示可用清华镜像
lxc image list tuna-images:
# 显示当前远程可用
lxc remote list
# 显示容器网络
lxc network show lxdbr0
# 显示容器
lxc list
# 运行容器bash
lxc exec first – /bin/bash
# 直接运行容器命令
lxc exec first – apt-get update
# 文件传输下载
lxc file pull first/etc/hosts .
# 文件传输上传
lxc file push hosts first/tmp/
# 停止容器
lxc stop first
# 删除容器
lxc delete first
# 显示容器信息
lxc info first
# 本地配置
lxc config edit <container>
# 显示容器详细信息
lxc config show first
lxc config show <container>
# 内存查看 free -m
lxc exec first – free -m
# 设置内存最大值
lxc config set first limits.memory 2048MB
# 执行升级
lxc exec first – apt-get update
lxc exec first – apt-get dist-upgrade -y
lxc exec first – apt-get autoremove --purge -y
# 暂停
lxc pause <container>
# 快照 Snapshots -stateful选项包含所有状态
lxc snapshot first clean
# 列出所有的快照
lxc info <container>
lxc snapshot <container> <snapshot name>
# 快照恢复
lxc restore first clean
# 从快照生成容器镜像
lxc publish first/clean --alias clean-ubuntu
# 启动快照容器镜像
lxc launch clean-ubuntu second
# 删除容器镜像方式一
lxc delete --force second
# 删除容器镜像方式二
lxc delete -f second
# 删除一个快照
lxc delete <container>/<snapshot name>
# 从快照中创建一个新的容器
lxc copy <source container>/<snapshot name> <destination container>
# 给快照重命名
lxc move <container>/<snapshot name> <container>/<new snapshot name>
# lxc运行docker
lxc config set first security.nesting true
lxc restart first
**# 本地镜像导出
lxc publish ${HOST}/auto-backup --alias ${BACKUP_NAME}
lxc image list
lxc image export ${BACKUP_NAME} BACKUPDIR/{BACKUP_NAME}
**# 本地镜像删除
lxc image delete <container>



版权声明:本文为Little_Eyelash原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。