容器是完全虚拟机(vm)的轻量级替代方案。它们使用运行在其上的主机系统的内核,而不是模拟一个完整的操作系统(OS)。这意味着容器可以直接访问主机系统上的资源。
容器的运行时成本很低,通常可以忽略不计。然而,也有一些缺点需要考虑:
只有Linux发行版可以在Proxmox容器中运行。它不可能在容器中运行其他操作系统,例如FreeBSD或Microsoft Windows。
出于安全原因,需要限制对主机资源的访问。因此,容器运行在它们自己独立的名称空间中。此外,容器内不允许某些系统调用(对Linux内核的用户空间请求)。
Proxmox VE使用Linux容器LXC作为其底层容器技术。“Proxmox容器工具包”(pct)通过提供一个抽象复杂任务的接口简化了LXC的使用和管理。
容器与Proxmox VE紧密集成。这意味着它们知道集群设置,它们可以使用与虚拟机相同的网络和存储资源。您还可以使用Proxmox VE防火墙,或者使用HA框架管理容器。
我们的主要目标是提供一个能够提供使用VM的好处,但又不会带来额外开销的环境。这意味着Proxmox容器可以被归类为“系统容器”,而不是“应用程序容器”。
请注意
如果要运行应用程序容器(例如Docker映像),建议在Proxmox Qemu虚拟机中运行它们。这将为您提供应用程序容器化的所有优点,同时也提供VMs所提供的优点,例如与主机的强隔离以及动态迁移的能力,否则容器就不可能做到这一点。
11.1、技术概述
- LXC
- 集成到Proxmox VE图形web用户界面(GUI)
- 易于使用的命令行工具pct
- 通过Proxmox VE REST API访问
- lxcfs提供容器化/proc文件系统
- 用于隔离和限制资源的控制组(cgroup)
- apmoror和seccomp提高安全性
- 现代Linux内核
- 基于镜像的部署(模板)
- 使用Proxmox VE存储库 (第七章)
- 从主机设置容器(网络,DNS,存储等)
11.2、容器的镜像
容器映像(有时也称为“模板”或“工具”)是tar存档,其中包含运行容器所需的所有内容。
Proxmox VE本身为最常见的Linux发行版提供了各种基本模板。可以使用GUI或pveam (Proxmox VE Appliance Manager的缩写)命令行工具下载。此外,还可以下载交钥匙Linux容器模板。
可用模板列表每天通过pve-daily-update计时器更新。你也可以通过执行以下命令手动触发更新:
# pveam update
要查看可用的图像列表,运行:
# pveam available
你可以通过指定你感兴趣的部分来限制这个大列表,例如基本系统映像:
列出可用的系统映像
# pveam available --section system
system alpine-3.10-default_20190626_amd64.tar.xz
system alpine-3.9-default_20190224_amd64.tar.xz
system archlinux-base_20190924-1_amd64.tar.gz
system centos-6-default_20191016_amd64.tar.xz
system centos-7-default_20190926_amd64.tar.xz
system centos-8-default_20191016_amd64.tar.xz
system debian-10.0-standard_10.0-1_amd64.tar.gz
system debian-8.0-standard_8.11-1_amd64.tar.gz
system debian-9.0-standard_9.7-1_amd64.tar.gz
system fedora-30-default_20190718_amd64.tar.xz
system fedora-31-default_20191029_amd64.tar.xz
system gentoo-current-default_20190718_amd64.tar.xz
system opensuse-15.0-default_20180907_amd64.tar.xz
system opensuse-15.1-default_20190719_amd64.tar.xz
system ubuntu-16.04-standard_16.04.5-1_amd64.tar.gz
system ubuntu-18.04-standard_18.04.1-1_amd64.tar.gz
system ubuntu-19.04-standard_19.04-1_amd64.tar.gz
system ubuntu-19.10-standard_19.10-1_amd64.tar.gz
在使用这样的模板之前,您需要将它们下载到您的一个存储中。如果不确定是哪一个,可以简单地使用本地命名存储来实现这个目的。对于集群安装,最好使用共享存储,这样所有节点都可以访问这些映像。
# pveam download local debian-10.0-standard_10.0-1_amd64.tar.gz
现在你已经准备好使用该映像创建容器了,你可以在storage local上列出所有下载的映像:
# pveam list local
local:vztmpl/debian-10.0-standard_10.0-1_amd64.tar.gz219.95MB
提示
您还可以使用Proxmox VE web界面GUI下载、列出和删除容器模板。
pct使用它们来创建一个新的容器,例如:
# pct create 999 local:vztmpl/debian-10.0-standard_10.0-1_amd64.tar.gz
上面的命令显示了完整的Proxmox VE卷标识符。它们包括存储名称,大多数其他Proxmox VE命令都可以使用它们。例如,你可以用下面的命令删除这张图片:
# pveam remove local:vztmpl/debian-10.0-standard_10.0-1_amd64.tar.gz
11.3、容器设置
11.3.1、一般设置
容器的一般设置包括
- 节点:运行容器的物理服务器
- CT ID:在这个Proxmox VE安装中用来标识您的容器的唯一编号
- Hostname:容器的主机名
- 资源池:容器和虚拟机的逻辑分组
- 密码:容器的root密码
- SSH公钥:SSH连接root帐号时使用的公钥
- 非特权容器:该选项允许在创建时选择是否创建特权或非特权容器。
非特权容器
非特权容器使用一种称为用户名称空间的新内核特性。容器内的根UID 0映射到容器外的非特权用户。这意味着这些容器中的大多数安全问题(容器转逃、资源滥用等)将影响随机的非特权用户,并将是一个通用的内核安全漏洞,而不是LXC问题。LXC团队认为,从设计上看,非特权容器是安全的。
这是创建新容器时的默认选项。
请注意
如果容器使用systemd作为init系统,请注意在容器中运行的systemd版本应该等于或大于220.
享有特权的容器
容器中的安全性是通过使用强制访问控制AppArmor限制、seccomp过滤器和Linux内核名称空间来实现的。LXC团队认为这种容器是不安全的,他们不会认为新的容器逃脱漏洞是值得使用CVE和快速修复的安全问题。这就是为什么特权容器只应该在受信任的环境中使用。
11.3.2、CPU
可以使用cores选项限制容器内可见cpu的数量。这是使用Linux cpuset cgroup (control group)实现的。pvestatd中的一个特殊任务试图定期将正在运行的容器分发到可用的cpu中。使用实例查看已分配的cpu。
# pct cpusets
---------------------
102: 6 7
105: 2 3 4 5
108:0 1
---------------------
容器直接使用宿主内核。容器内的所有任务都由主机CPU调度器处理。Proxmox VE默认使用Linux CFS(完全公平调度程序)调度程序,它有额外的带宽控制选项。
cpulimit: 可以使用此选项进一步限制分配的CPU时间。请注意,这是一个浮点数,因此将两个核分配给一个容器是完全有效的,但将总体CPU消耗限制为半个核。
核心:2
cpulimit: 0.5
cpuunits: 这是传递给内核调度器的相对权重。数字越大,则
这个容器获得的更多CPU时间。数量与所有其他运行容器的重量相关。缺省值为1024。您可以使用此设置对某些容器进行优先级排序。
11.3.3、内存
容器内存使用cgroup内存控制器控制。
内存: 限制总体内存使用。这对应 memory.limit_in_bytes cgroup设置。
swap: 允许容器使用来自主机交换空间的额外交换内存。这对应于memory.memsw.limit_in_bytes cgroup设置,它被设置为两个值(内存+ swap)的和。
11.3.4、挂载点
根挂载点配置了rootfs属性。您可以配置最多256个额外的挂载点。相应的选项称为mp0到mp255。它们可以包含以下设置:
rootfs: [volume=]
使用volume作为容器根。请参阅下面所有选项的详细描述。
mp[n]: [volume=]
使用容积作为容器安装点。
acl=
显式启用或禁用ACL支持。
backup=
是否在备份中包含挂载点(仅用于卷挂载点)。
mountoptions=
额外的挂载选项为rootfs/mps。
mp=
从容器内部看到的到挂载点的路径。
请注意
出于安全考虑,不能包含任何符号链接。
quota=
在容器内启用用户配额(zfs子卷不支持)
replicate=
将该卷包含到存储复制作业中。
ro=
只读的挂载点
shared=
将这个非卷挂载点标记为在所有节点上可用。
警告
这个选项不会自动共享挂载点,它假设已经共享了这个挂载点
size=
卷大小(只读值)。
volume=
要装入容器的卷、设备或目录。
目前有三种类型的挂载点:存储备份挂载点、绑定挂载和设备挂载。
典型的容器rootfs配置
**rootfs: thin1:base-100-disk-1,size=8G
存储支持的挂载点
**
存储支持的挂载点由Proxmox VE存储子系统管理,有三种不同的方式:
- 基于图像:这些是原始图像包含一个单独的ext4格式文件系统。
- ZFS子卷:从技术上讲,这些子卷是绑定挂载,但是有托管存储,因此允许调整大小和进行快照。
- 目录:传递size=0会触发一个特殊情况,即不是创建一个原始映像,而是创建一个目录。
请注意
特殊选项语法STORAGE_ID:SIZE_IN_GB用于存储备份挂载点卷将在指定的存储上自动分配指定大小的卷。例如,调用
pct set 100 -mp0 thin1:10,mp=/path/in/container
是否会在thin1上分配一个10GB的卷,用分配的卷ID替换卷ID位置持有人10,并在/path/in/container的容器中设置挂载点
绑定挂载点
绑定挂载允许您从容器中的Proxmox VE主机访问任意目录。一些潜在的用例是:
- 在guest中访问您的主目录
- 访问客户端的USB设备目录
- 在客户端中访问NFS挂载
绑定挂载被认为不受存储子系统的管理,因此不能在容器内创建快照或处理配额。使用非特权容器,您可能会遇到由用户映射引起的权限问题,不能使用acl。
请注意
使用vzdump时,不会备份绑定挂载点的内容。
警告
出于安全原因,绑定挂载应该只使用专为此目的保留的源目录建立,例如/mnt/bindmounts目录层次结构。永远不要把挂载系统目录(如/,/var或/etc)绑定到一个容器中——这会带来很大的安全风险。
请注意
绑定挂载的源路径不能包含任何符号链接。
例如,要使/shared目录下ID为100的容器中的目录/mnt/bindmounts/shared可以访问,可以在/etc/pve/lxc/100.conf中使用mp0:/mnt/bindmounts/shared,mp=/shared。或者,使用pct set 100 -mp0 /mnt/bindmounts/shared,mp=/shared
来达到相同的结果。
设备挂载点
设备挂载点允许将主机的块设备直接挂载到容器中。与绑定挂载类似,设备挂载不由Proxmox VE的存储子系统管理,但配额和acl选项将受到尊重。
请注意
设备挂载点只能在特殊情况下使用。在大多数情况下,存储支持的挂载点提供了同样的性能和更多的特性。
请注意
使用vzdump时,不会备份设备挂载点的内容。
11.3.5、网络
一个容器最多可以配置10个网络接口。对应的选项称为net0到net9,它们可以包含以下设置:
net[n]: name=
[,gw=
[,hwaddr=
[,ip6=<(IPv6/CIDR|auto|dhcp|manual)>] [,mtu=
[,rate=
[,type=
指定容器的网络接口。
bridge=
网桥连接网络设备。
firewall=
控制是否应该使用该接口的防火墙规则。
gw=
IPv4流量的默认网关。
gw6=
IPv6流量的默认网关。
hwaddr=
一个没有设置I/G(个人/组)位的通用MAC地址。
ip=<(IPv4/CIDR|dhcp|manual)>
IPv4 CIDR格式地址。
ip6=<(IPv6/CIDR|auto|dhcp|manual)>
CIDR格式的IPv6地址。
mtu=
接口的最大传输单元。(lxc.network.mtu)
name=
从容器内部看到的网络设备名称。(lxc.network.name)
rate=
对接口进行速率限制
tag=
接口的VLAN tag。
trunks=
接口需要通过的VLAN id
type=
网络接口类型。
11.3.6、自动启动和关闭容器
如果需要在主机系统启动时自动启动容器,请在web界面的容器选项面板中选择“start at boot”选项或执行以下命令:
# pct set CTID -onboot 1
启停指令
如果你想调整容器的引导顺序,你可以使用以下参数:
Start/Shutdown order:定义启动顺序优先级。例如,如果希望第一个启动CT,则将其设置为1。(我们使用反向的启动顺序来关闭,因此一个启动顺序为1的容器将是最后一个关闭的容器)
Startup delay:定义了这个容器启动和后续容器启动之间的时间间隔。例如,如果您希望在启动其他容器之前等待240秒,则将其设置为240。
Shutdown timeout:在发出Shutdown命令后,Proxmox VE应该等待容器离线的时间,以秒为单位。默认情况下,此值被设置为60,这意味着Proxmox VE将发出关机请求,等待60秒直到机器脱机,如果超过60秒机器仍然在线,则将通知关闭操作失败。
请注意,没有启动/关闭顺序参数的容器总是在设置了该参数的容器之后启动,而且该参数只在主机上本地运行的机器之间有意义,而不是在集群范围内。
11.3.7、挂钩脚本
您可以通过配置属性hookscript向CTs添加一个钩子脚本。
# pct set 100 -hookscript local:snippets/hookscript.pl
它将在来宾生命周期的各个阶段被调用。有关示例和文档,请参阅/usr/share/pve-docs/examples/guest-example-hookscript.pl下的示例脚本。
11.4、安全注意事项
容器使用主机系统的内核。这为恶意用户暴露了一个攻击面。通常,完整的虚拟机提供更好的隔离。如果集装箱是提供给未知或不可信的人,就应该考虑这一点。
为了减少攻击面,LXC使用了许多安全特性,如AppArmor、CGroups和内核名称空间。
11.4.1、AppArmor
AppArmor轮廓用于限制可能危险的行为。一些系统调用,例如mount,被禁止执行。
追踪AppArmor活动,使用:
# dmesg | grep apparmor
虽然不推荐,但可以禁用容器的AppArmor。这也带来了安全风险。如果系统配置错误,或者存在LXC或Linux内核漏洞,在容器内执行某些系统调用可能导致特权升级。
要禁用容器的AppArmor,在/etc/pve/ lxcc / ctid .conf文件中添加以下一行:
lxc.apparmor.profile = unconfined
警告
请注意,不建议在生产环境中使用。
11.5、客户操作系统设置
Proxmox VE尝试检测容器中的Linux发行版,并修改一些文件。以下是在container startup公司所做的一些事情:
set /etc/hostname
设置容器名称
modify /etc/hosts
允许查找本地主机名
network setup
将完整的网络设置传递给容器
configure DNS
传递关于DNS服务器的信息
adapt the init system
例如,确定生成的getty进程的数量
set the root password
当创建一个新的容器时
rewrite ssh_host_keys
这样每个容器都有唯一的键
randomize crontab
这样cron就不会在所有容器上同时启动
Proxmox VE所做的更改被注释标记括起来:
# --- BEGIN PVE ---
<data>
# --- END PVE ---
这些标记将被插入到文件中的一个合理位置。如果这样的部分已经存在,它将被更新到位,不会被移动。
可以通过添加.pve-ignore来阻止对文件的修改。文件。例如,如果文件/etc/.pve-ignore.host存在,那么/etc/hosts文件将不会被修改。这可以是一个简单的空文件,通过以下方式创建:
# touch /etc/.pve-ignore.hosts
大多数修改都与操作系统相关,因此它们在不同的发行版和版本之间有所不同。您可以通过手动将ostype设置为非托管来完全禁用修改。
OS类型检测是通过测试容器内的某些文件来完成的。Proxmox VE首先检查/etc/os-release文件。如果该文件不存在,或者它不包含清晰可识别的发行版标识符,那么将检查以下特定于发行版的发行版文件。
Ubuntu
检查/etc/lsb-release (DISTRIB_ID = Ubuntu)
Debian
测试/etc/debian_version
Fedora
测试/etc/fedora-release
RedHat or CentOS
测试/etc/redhat-release
ArchLinux
测试/etc/arch-release
Alpine
测试/etc/alpine-release
Gentoo
测试/etc/gentoo-release
请注意
如果配置的ostype与自动检测到的类型不同,则容器启动失败。
11.6、容器存储
Proxmox VE LXC容器存储模型比传统的容器存储模型更灵活。一个容器可以有多个挂载点。这使得为每个应用程序使用最适合的存储成为可能。
例如,容器的根文件系统可以处于缓慢且廉价的存储状态,而数据库可以通过第二个挂载点处于快速且分布式的存储状态。有关更多细节,请参阅挂载点一节。
可以使用Proxmox VE存储库支持的任何存储类型。这意味着容器可以存储在本地(例如lvm、zfs或目录)、共享外部(如iSCSI、NFS)或甚至分布式存储系统(如Ceph)上。如果底层存储支持快照或克隆等高级存储特性,则可以使用它们。vzdump备份工具可以使用快照提供一致的容器备份。
此外,可以使用绑定挂载直接挂载本地设备或本地目录。这使得访问容器内的本地资源的开销几乎为零。绑定挂载可以作为在容器之间共享数据的一种简单方式。
11.6.1、FUSE挂载
警告
由于Linux内核的freeze子系统中存在一些问题,所以强烈建议不要在容器中使用FUSE,因为容器需要被冻结以进行挂起或快照模式备份。
如果其他安装机制或存储技术无法替换FUSE安装,则可以在Proxmox主机上建立FUSE安装,并使用绑定安装点使其在容器内可访问。
11.6.2、在容器内使用配额
配额允许在容器内为每个用户可以使用的磁盘空间数量设置限制。
请注意
这只适用于基于ext4映像的存储类型,并且目前只适用于特权容器。
激活配额选项将导致对一个挂载点使用以下挂载选项:usrjquota=aquota.user,grpjquota=aquota。这允许像在任何其他系统上一样使用配额。可以初始化 /aquota.user和/aquota.group文件通过运行:
# quotacheck -cmug /
# quotaon /
然后使用edquota命令编辑配额。有关详细信息,请参阅在容器内运行的发行版的文档。
请注意
您需要为每个挂载点运行上述命令,传递挂载点的路径,而不只是/。
11.6.3、在容器内使用acl
标准Posix访问控制列表也可以在容器内部使用。与传统的用户/组/其他人模型相比,acl允许您设置更详细的文件所有权。
11.6.4、备份容器挂载点
要在backups中包含一个挂载点,请在容器配置中为它启用备份选项。对于现有的挂载点mp0
mp0: guests:subvol-100-disk-1,mp=/root/files,size=8G
添加backup=1来启用它。
mp0: guests:subvol-100-disk-1,mp=/root/files,size=8G,backup=1
请注意
在GUI中创建新的挂载点时,默认情况下启用此选项。
要禁用挂载点的备份,按照上面描述的方式添加backup=0,或者在GUI上取消选中backup复选框。
11.6.5、复制容器挂载点
默认情况下,在复制根磁盘时复制附加的挂载点。如果希望Proxmox VE存储复制机制跳过某个挂载点,可以为该挂载点设置skip replication选项。在Proxmox VE 5.0中,复制需要zfspool类型的存储。当容器配置了复制时,向不同类型的存储添加一个挂载点需要为该挂载点启用跳过复制。
11.7、备份和恢复
11.7.1、容器的备份
可以使用vzdump工具进行容器备份。详情请参考vzdump手册页面。
11.7.2、容器恢复备份
可以使用pct restore命令还原vzdump所做的容器备份,默认情况下,pct restore将尝试还原尽可能多的已备份的容器配置。可以通过在命令行上手动设置容器选项来覆盖备份的配置(详细信息请参阅pct手册页)。
请注意
pvesm extractconfig可用于查看vzdump归档文件中包含的备份配置。
有两种基本的恢复模式,只是不同于它们对挂载点的处理:
“简单”恢复模式
**
如果没有显式设置rootfs参数和任何可选的mpX参数,则使用以下步骤从备份的配置文件中恢复挂载点配置:
- 从备份中提取挂载点及其选项
2. 为存储创建卷支持的挂载点(在带有storage参数的存储上,如果没有设置,则在默认的本地存储上)
3.从备份存档中提取文件
4. 向恢复的配置添加绑定点和设备挂载点(仅限于root用户)
web界面中的容器恢复操作也使用这种简单模式。请注意
由于绑定和设备挂载点永远不会备份,所以在最后一步中不会恢复任何文件,而只恢复配置选项。假设这样的挂载点要么用另一种机制进行备份(例如,绑定挂载到许多容器中的NFS空间),要么根本不打算进行备份。
“高级”恢复模式
通过设置rootfs参数(或者mpX参数的任意组合),pct restore命令会自动切换到高级模式。这种高级模式完全忽略rootfs和mpX配置选项包含在备份存档中,而只是使用显式提供的选项作为参数。
该模式允许在恢复时灵活配置挂载点设置,例如:
- 为每个挂载点分别设置目标存储、卷大小和其他选项
- 根据新的挂载点方案重新分发备份文件
- 恢复到设备和/或绑定挂载点(仅限于root用户)
11.8、使用pct管理容器
“Proxmox容器工具箱”(pct)是管理Proxmox VE容器的命令行工具。它允许您创建或销毁容器,以及控制容器的执行(启动、停止、重启、迁移等)。它可以用于在容器的配置文件中设置参数,例如网络配置或内存限制。
11.8.1、CLI用法示例
基于Debian模板创建一个容器(前提是您已经通过web界面下载了模板)
# pct create 100 /var/lib/vz/template/cache/debian-10.0-standard_10.0-1_amd64.tar.gz
启动容器100
# pct start 100
通过getty启动登录会话
# pct console 100
输入LXC名称空间并以root用户的身份运行shell
# pct enter 100
显示配置
# pct config 100
添加一个名为eth0的网络接口,它桥接到主机桥vmbr0,在它运行时设置地址和网关
# pct set 100 -net0 name=eth0,bridge=vmbr0,ip=192.168.15.147/24,gw=192.168.15.1
将容器内存减少到512MB
# pct set 100 -memory 512
11.8.2、获取调试日志
如果pct start无法启动特定的容器,通过运行lxc-start(用容器的ID替换ID)收集调试输出可能会有帮助:
# lxc-start -n ID -F -l DEBUG -o /tmp/lxc-ID.log
这个命令将尝试以前台模式启动容器,为了停止容器,在第二个终端中运行pct shutdown ID或pct stop ID。
收集到的调试日志写入“/tmp/lxc-ID.log”。
请注意
如果自上次尝试使用pct start以来更改了容器的配置,则需要至少运行pct start一次,以更新lxc-start使用的配置。
11.9、迁移
如果你有一个集群,你可以用它来迁移你的容器
# pct migrate <ctid> <target>
只要您的容器处于脱机状态,这就可以工作。如果它定义了本地卷或挂载点,那么如果在目标主机上定义了相同的存储,那么迁移将通过网络将内容复制到目标主机。
由于技术限制,运行的容器不能实时迁移。您可以执行重新启动迁移,即关闭、移动和再次启动目标节点上的容器。由于容器是非常轻量级的,这通常只会导致数百毫秒的停机时间。
重新启动迁移可以通过web接口或使用pct migrate命令中的——restart标志来完成。
重新启动迁移将关闭容器,并在指定超时(默认为180秒)之后终止它。然后,它将像脱机迁移一样迁移容器,完成后,在目标节点上启动容器。
11.10、配置
/etc/pve/ lxcx /
请注意
< 100的ctid保留给内部使用,并且ctid必须是集群范围内唯一的。
容器配置示例
ostype: debian
arch: amd64
hostname: www
memory: 512
swap: 512
net0: bridge=vmbr0,hwaddr=66:64:66:64:64:36,ip=dhcp,name=eth0,type=veth
rootfs: local:107/vm-107-disk-1.raw,size=7G
配置文件是简单的文本文件。您可以使用普通的文本编辑器(例如vi或nano)编辑它们。有时,这对于进行小的修改是有用的,但是请记住,您需要重新启动容器来应用这些更改。
由于这个原因,使用pct命令来生成和修改这些文件,或者使用GUI完成整个操作通常是更好的。我们的工具箱足够聪明,可以立即对运行中的容器应用大多数更改。该特性称为“热插拔”,在这种情况下不需要重新启动容器。
在不能热插拔更改的情况下,它将被注册为一个挂起的更改(在GUI中以红色显示)。它们只会在重新启动容器后应用。
11.10.1、文件格式
容器配置文件使用一个简单的冒号分隔的键/值格式。每行有以下格式:
# this is a comment
OPTION: value
这些文件中的空行会被忽略,以#字符开头的行会被视为注释,也会被忽略。
可以直接添加低级的LXC样式配置,例如:
lxc.init_cmd: /sbin/my_own_init
或
lxc.init_cmd = /sbin/my_own_init
设置直接传递给LXC低级工具。
11.10.2、快照
当您创建一个快照时,pct在快照时将配置存储到同一个配置文件中的一个单独的快照部分中。例如,在创建一个名为“testsnapshot”的快照后,您的配置文件将如下所示:
带有快照的容器配置
memory: 512
swap: 512
parent: testsnaphot
...
[testsnaphot]
memory: 512
swap: 512
snaptime: 1457170803
...
有一些快照相关的属性,如parent和snaptime。parent属性用于存储快照之间的父/子关系。snaptime是快照创建时间戳(Unix epoch)。
11.10.3、选项
arch:
操作系统体系结构类型。
cmode:
控制台模式。默认情况下,控制台命令尝试打开到一个可用tty设备的连接。通过将cmode设置为console,它会尝试连接到/dev/console。如果您将cmode设置为shell,它只是在容器内调用shell(无需登录)。
console:
将一个控制台设备(/dev/console)连接到容器上。
cores:
分配给容器的内核数。默认情况下,容器可以使用所有可用的核心。
cpulimit:
CPU使用限制。
请注意
如果计算机有2个CPU,它总共有2个CPU时间。取值为0表示不做CPU限制。
cpuunits:
虚拟机的CPU权重。参数在内核公平调度程序中使用。这个数字越大,虚拟机获得的CPU时间就越多。“数量”相对于其他所有运行中的虚拟机的权重。
请注意
您可以通过将此设置为0来禁用公平调度程序配置。
debug:
尽量啰嗦些。目前,这仅在启动时启用调试日志级别。
description:
容器的描述。仅用于web配置界面。
features: [force_rw_sys=<1|0>] [,fuse=<1|0>] [,keyctl=<1|0>]
[,mknod=<1|0>] [,mount=
允许容器访问高级功能。
force_rw_sys=
在非特权容器中,将/sys挂载为rw,而不是mixed。这可能会破坏在较新的(>= v245)系统网络使用下的网络。
fuse=
允许在容器中使用fuse文件系统。注意,fuse和冻结器c组之间的交互可能会潜在地导致I/O死锁。
keyctl=
仅对非特权容器:允许使用keyctl()系统调用。这是在容器中使用docker所必需的。默认情况下,非特权容器将认为这个系统调用不存在。这主要是systemd-networkd的一种解决方案,因为当内核由于缺乏权限而拒绝某些keyctl()操作时,它会将其视为致命错误。本质上,你可以选择运行systemd-networkd还是docker。
mknod=
允许非特权容器使用mknod()来添加某些设备节点。这需要一个具有seccomp陷阱的内核来支持用户空间(5.3或更新版本)。这是实验。
mount=
允许挂载特定类型的文件系统。这应该是与mount命令一起使用的文件系统类型列表。请注意,这可能会对容器的安全性产生负面影响。通过访问循环设备,挂载文件可以绕过设备cgroup的mknod权限,挂载NFS文件系统可以完全阻塞主机的I/O并阻止它重新启动,等等。
nesting=
允许嵌套。最好用于带有附加id映射的非特权容器。注意,这将向客户公开主机的procfs和sysfs内容。
hookscript:
将在容器生存期内的各个步骤中执行的脚本。
hostname:
设置容器的主机名。
lock: <backup | create | destroyed | disk | fstrim | migrate |
mounted | rollback | snapshot | snapshot-delete>
锁定/解锁VM。
memory:
虚拟机的内存量(MB)。
mp[n]: [volume=]
[,mountoptions=
[,ro=<1|0>] [,shared=<1|0>] [,size=
使用容积作为容器安装点。
acl=
显式启用或禁用ACL支持。
backup=
是否在备份中包含挂载点(仅用于卷挂载点)。
mountoptions=
额外的挂载选项为rootfs/mps。
mp=
从容器内部看到的到挂载点的路径。
请注意
出于安全考虑,不能包含任何符号链接。
quota=
在容器内启用用户配额(zfs子卷不支持)
replicate=
将该卷包含到存储复制作业中。
ro=
只读的挂载点
shared=
将这个非卷挂载点标记为在所有节点上可用。
警告
这个选项不会自动共享挂载点,它假设它已经被共享了!
size=
卷大小(只读值)。
volume=
要装入容器的卷、设备或目录。
nameserver:
设置容器的DNS服务器IP地址。如果您既不设置searchdomain也不设置nameserver, Create将自动从主机使用设置。
net[n]: name=
[,gw=
[,hwaddr=
[,ip6=<(IPv6/CIDR|auto|dhcp|manual)>] [,mtu=
[,rate=
[,type=
指定容器的网络接口。
bridge=
网桥连接网络设备。
firewall=
控制是否应该使用该接口的防火墙规则。
gw=
IPv4流量的默认网关。
gw6=
IPv6流量的默认网关。
hwaddr=
一个没有设置I/G(个人/组)位的通用MAC地址。
ip=<(IPv4/CIDR|dhcp|manual)>
IPv4 CIDR格式地址。
ip6=<(IPv6/CIDR|auto|dhcp|manual)>
CIDR格式的IPv6地址。
mtu=
接口的最大传输单元。(lxc.network.mtu)
name=
从容器内部看到的网络设备名称。(lxc.network.name)
rate=
对接口进行速率限制
tag=
接口的VLAN tag。
trunks=
接口需要通过的VLAN id
type=
网络接口类型。
onboot:
虚拟机是否在系统启动时启动。
ostype: <alpine | archlinux | centos | debian | fedora | gentoo |
opensuse | ubuntu | unmanaged>
操作系统类型。这用于在容器内设置配置,对应于/usr/share/ lxcc /config/
protection:
设置容器的保护标志。这将阻止CT或CT的磁盘移除/更新操作。
rootfs: [volume=]
[,mountoptions=
[,ro=<1|0>] [,shared=<1|0>] [,size=
使用volume作为容器根。
acl=
显式启用或禁用ACL支持。
mountoptions=
额外的挂载选项为rootfs/mps。
quota=
在容器内启用用户配额(zfs子卷不支持)
replicate=
将该卷包含到存储复制作业中。
ro=
只读的挂载点
shared=
将这个非卷挂载点标记为在所有节点上可用。
警告
这个选项不会自动共享挂载点,它假设它已经被共享了!
size=
卷大小(只读值)。
volume=
要装入容器的卷、设备或目录。
searchdomain:
为容器设置DNS搜索域。如果您既不设置searchdomain也不设置nameserver, Create将自动从主机使用设置。
startup: [[order=]\d+] [,up=\d+] [,down=\d+]
启动和关闭行为。Order是一个非负数,定义了一般启动顺序
用倒序完成关机。此外,您还可以设置以秒为单位的启动或关闭延迟时间,即在下一个虚拟机启动或停止前的等待时间。
swap:
虚拟机的交换空间大小(MB)。
tags:
容器的标签。这只是元信息。
template:
启用/禁用模板。
timezone:
容器使用的时区。如果没有设置option,则不会执行任何操作。可以设置为host以匹配主机时区,或者从/usr/share/zoneinfo/zone.tab中任意设置时区选项
tty:
指定容器可用tty的数量
unprivileged:
使容器作为非特权用户运行。(不应该手动修改。)
unused[n]: [volume=]
引用未使用的卷。这是内部使用的,不应该手动修改。
volume=
当前未使用的卷。
11.11、锁
容器迁移、快照和备份(vzdump)设置一个锁,以防止受影响的容器上不兼容的并发操作。有时您需要手动移除这样的锁(例如,在电源故障后)。
# pct unlock <CTID>
谨慎
只有当您确定设置锁的操作不再运行时,才执行此操作。