LXC (Linux 虚拟环境)简单介绍

简介: LXC是Linux containers的简称,操作系统级别的虚拟化技术。它可以在操作系统层次上为进程提供的虚拟的执行环境。一个虚拟的执行环境被称为一个容器(container)。可以为容器绑定特定的cpu和memory节点,分配特定比例的cpu时间、IO时间,限制可以使用的内存大小(包括内存和是swap空间),提供device访问控制,提供独立的namespace(网络、pid、ipc、mnt、uts)。

LXC是Linux containers的简称,操作系统级别的虚拟化技术。它可以在操作系统层次上为进程提供的虚拟的执行环境。一个虚拟的执行环境被称为一个容器(container)。可以为容器绑定特定的cpu和memory节点,分配特定比例的cpu时间、IO时间,限制可以使用的内存大小(包括内存和是swap空间),提供device访问控制,提供独立的namespace(网络、pid、ipc、mnt、uts)。

image.png


基本安装

Debian/Ubuntu系统下,使用apt安装:

sudo apt-get install lxc bridge-utils libvirt-bin debootstrap

注意修改/bin/sh,链接到/bin/bash。lxc在某些版本上有一个bug,声明为/bin/sh却使用bash语法,导致不如此链接会出现错误。


镜像和设定

使用lxc-create -n name -t template生成镜像。

在/usr/share/lxc/templates可以看到可用的模板。

在/var/cache/lxc/debian会缓存生成过程的临时文件。

生成的镜像需要在镜像内安装lxc,否则无法使用lxc-execute。


资源限制

在config文件内,写入cgroup限定规则。注意,使用内存限定的话,需要在内核参数中加入cgroup_enable=memory

在debian/ubuntu下,可以修改/etc/default/grub文件,使用update-grub重新生成规则。

GRUB_CMDLINE_LINUX_DEFAULT="cgroup_enable=memory quiet"

在config文件中可以如下限定:

lxc.cgroup.memory.limit_in_bytes = 512M # 限定内存

lxc.cgroup.cpuset.cpus = 0# 限定可以使用的核

lxc.cgroup.blkio.throttle.read_bps_device = 8:0100# 读取速率限定

lxc.cgroup.blkio.throttle.write_bps_device = 8:0100# 写入速率限定

lxc.cgroup.blkio.throttle.read_iops_device = 8:0100# 读取频率限定

lxc.cgroup.blkio.throttle.write_iops_device = 8:0100# 写入频率限定


执行

lxc-start -n name /bin/echo hello

还可以用以下指令,在已经启动的container里执行进程。

lxc-attach -n name /bin/echo hello

以下指令是用来在未启动的container里执行进程的。

lxc-execute -n name /bin/echo hello

** 注意,虽然系统初始化了所有资源,但是由于sysv-init没有执行,因此系统内初始化并没完成。这导致系统不完整,例如网络部分不可用。 **


网络隔离

自行设定的网络

lxc采用veth技术,每次虚拟机建立时,都会产生一对veth。虚拟机内的一般叫做eth0,虚拟机外的叫做vethXXX。这张网卡可以以任何linux许可的方式进行配置。

dnsmasq所产生的dhcp封包无法被debian guest的dhcp client承认,因此无法使用dnsmasq自动部署网络。


使用iptables配置访问

在开启br-nf后,所有bridge的包都会经过iptables的过滤。因而可以用iptables的FORWARD规则限制guest堆外网的访问。详细配置请参考此处。

相关文章
|
12天前
|
Ubuntu Linux Shell
(已解决)Linux环境—bash: wget: command not found; Docker pull报错Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled
(已成功解决)Linux环境报错—bash: wget: command not found;常见Linux发行版本,Linux中yum、rpm、apt-get、wget的区别;Docker pull报错Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled
168 68
(已解决)Linux环境—bash: wget: command not found; Docker pull报错Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled
|
3月前
|
安全 Linux 网络安全
Linux环境中安装和使用Paramiko
Linux环境中安装和使用Paramiko
182 12
|
3月前
|
Java 关系型数据库 MySQL
Linux环境
Linux环境
43 5
|
9天前
|
消息中间件 Java Kafka
【手把手教你Linux环境下快速搭建Kafka集群】内含脚本分发教程,实现一键部署多个Kafka节点
本文介绍了Kafka集群的搭建过程,涵盖从虚拟机安装到集群测试的详细步骤。首先规划了集群架构,包括三台Kafka Broker节点,并说明了分布式环境下的服务进程配置。接着,通过VMware导入模板机并克隆出三台虚拟机(kafka-broker1、kafka-broker2、kafka-broker3),分别设置IP地址和主机名。随后,依次安装JDK、ZooKeeper和Kafka,并配置相应的环境变量与启动脚本,确保各组件能正常运行。最后,通过编写启停脚本简化集群的操作流程,并对集群进行测试,验证其功能完整性。整个过程强调了自动化脚本的应用,提高了部署效率。
【手把手教你Linux环境下快速搭建Kafka集群】内含脚本分发教程,实现一键部署多个Kafka节点
|
2月前
|
缓存 Ubuntu Linux
Linux环境下测试服务器的DDR5内存性能
通过使用 `memtester`和 `sysbench`等工具,可以有效地测试Linux环境下服务器的DDR5内存性能。这些工具不仅可以评估内存的读写速度,还可以检测内存中的潜在问题,帮助确保系统的稳定性和性能。通过合理配置和使用这些工具,系统管理员可以深入了解服务器内存的性能状况,为系统优化提供数据支持。
42 4
|
3月前
|
Web App开发 搜索推荐 Unix
Linux系统之MobaXterm远程连接centos的GNOME桌面环境
【10月更文挑战第21天】Linux系统之MobaXterm远程连接centos的GNOME桌面环境
537 4
Linux系统之MobaXterm远程连接centos的GNOME桌面环境
|
2月前
|
关系型数据库 MySQL Linux
Linux环境下MySQL数据库自动定时备份实践
数据库备份是确保数据安全的重要措施。在Linux环境下,实现MySQL数据库的自动定时备份可以通过多种方式完成。本文将介绍如何使用`cron`定时任务和`mysqldump`工具来实现MySQL数据库的每日自动备份。
134 3
|
2月前
|
监控 关系型数据库 MySQL
Linux环境下MySQL数据库自动定时备份策略
在Linux环境下,MySQL数据库的自动定时备份是确保数据安全和可靠性的重要措施。通过设置定时任务,我们可以每天自动执行数据库备份,从而减少人为错误和提高数据恢复的效率。本文将详细介绍如何在Linux下实现MySQL数据库的自动定时备份。
56 3
|
3月前
|
Ubuntu 应用服务中间件 Linux
Linux下搭建Nginx环境的搭建
Linux下搭建Nginx环境的搭建
81 6
|
2月前
|
Linux UED iOS开发