实例选项

实例选项是与实例直接相关的配置选项。

有关如何设置实例选项的说明,请参见 配置实例选项

键值配置是命名空间的。以下选项可用

请注意,虽然为每个选项定义了一个类型,但所有值都存储为字符串,并且应通过 REST API 导出为字符串(这使得支持任何额外的值成为可能,而不会破坏向后兼容性)。

杂项选项

除了以下部分列出的配置选项外,还支持以下实例选项

agent.nic_config

是否使用默认网络接口的名称和 MTU

agent.nic_config
类型

bool

默认值

false

实时更新

条件

虚拟机

对于容器,默认网络接口的名称和 MTU 用于实例设备。对于虚拟机,将此选项设置为 true 以将默认网络接口的名称和 MTU 设置为与实例设备相同。

cluster.evacuate

撤离实例时要做什么

cluster.evacuate
类型

string

默认值

auto

实时更新

cluster.evacuate 提供对集群成员被撤离时如何处理实例的控制。

可用模式

  • auto (默认): 系统将根据实例的类型和配置的设备自动确定最佳撤离方法

    • 如果任何设备不适合迁移,则不会迁移实例(只会停止)。

    • 实时迁移仅适用于启用了 migration.stateful 设置且所有设备也可以迁移的虚拟机。

  • live-migrate: 实例被实时迁移到另一台服务器。这意味着实例在迁移过程中保持运行和操作,从而确保最小的中断。

  • migrate: 在此模式下,实例被迁移到集群中的另一台服务器。迁移过程不会实时进行,这意味着实例在迁移过程中会短暂停机。

  • stop: 实例不会被迁移。相反,它们将在当前服务器上停止。

  • stateful-stop: 实例不会被迁移。相反,它们将在当前服务器上停止,但其运行时状态(内存)将存储在磁盘上,以便在恢复时恢复。

  • force-stop: 实例不会被迁移。相反,它们将被强制停止。

有关更多信息,请参见 撤离和恢复集群成员

linux.kernel_modules

在启动实例之前要加载的内核模块

linux.kernel_modules
类型

string

实时更新

yes

条件

容器

将内核模块指定为逗号分隔的列表。

linux.sysctl.*

覆盖容器中相应的 sysctl 设置

linux.sysctl.*
类型

string

实时更新

条件

容器

user.*

自由格式的用户键值存储

user.*
类型

string

实时更新

用户键可以在搜索中使用。

environment.*

实例的环境变量

environment.*
类型

string

实时更新

yes (exec)

您可以将键值环境变量导出到实例。然后为 incus exec 设置这些变量。

cloud-init 配置

以下实例选项控制实例的 cloud-init 配置

cloud-init.network-config

cloud-init 的网络配置

cloud-init.network-config
类型

string

默认值

DHCP on eth0

实时更新

条件

如果镜像支持

内容用作 cloud-init 的种子值。

cloud-init.user-data

cloud-init 的用户数据

cloud-init.user-data
类型

string

默认值

#cloud-config

实时更新

条件

如果镜像支持

内容用作 cloud-init 的种子值。

cloud-init.vendor-data

cloud-init 的供应商数据

cloud-init.vendor-data
类型

string

默认值

#cloud-config

实时更新

条件

如果镜像支持

内容用作 cloud-init 的种子值。

user.network-config

cloud-init.network-config 的旧版本

user.network-config
类型

string

默认值

DHCP on eth0

实时更新

条件

如果镜像支持

user.user-data

cloud-init.user-data 的旧版本

user.user-data
类型

string

默认值

#cloud-config

实时更新

条件

如果镜像支持

user.vendor-data

cloud-init.vendor-data 的旧版本

user.vendor-data
类型

string

默认值

#cloud-config

实时更新

条件

如果镜像支持

对这些选项的支持取决于使用的镜像,并不保证。

如果同时指定了 cloud-init.user-datacloud-init.vendor-data,则将合并两个选项的内容。因此,请确保在这些选项中指定的 cloud-init 配置不包含相同的键。

资源限制

以下实例选项指定实例的资源限制

limits.cpu

向实例公开哪些 CPU

limits.cpu
类型

string

默认值

1 (VM)

实时更新

yes

向实例公开的 CPU 数量或特定范围。

有关更多信息,请参阅 CPU 固定

limits.cpu.allowance

可以使用的 CPU 份额

limits.cpu.allowance
类型

string

默认值

100%

实时更新

yes

条件

容器

要控制可以使用多少 CPU,请指定百分比 (50%) 用于软限制,或指定时间段 (25ms/100ms) 用于硬限制。

有关更多信息,请参阅 配额和优先级 (仅限容器)

limits.cpu.nodes

将实例 CPU 放置在哪些 NUMA 节点上

limits.cpu.nodes
类型

string

实时更新

yes

将实例 CPU 放置在的 NUMA 节点 ID 或范围的逗号分隔列表。或者,可以使用值 balanced 使 Incus 在启动时选择最不繁忙的 NUMA 节点。

有关更多信息,请参阅 配额和优先级 (仅限容器)

limits.cpu.priority

与其他实例相比的 CPU 调度优先级

limits.cpu.priority
类型

整数

默认值

10 (最高)

实时更新

yes

条件

容器

在超额分配资源时,指定与共享相同 CPU 的其他实例相比的 CPU 调度优先级。指定 0 到 10 之间的整数。

有关更多信息,请参阅 配额和优先级 (仅限容器)

limits.disk.priority

实例 I/O 请求的优先级

limits.disk.priority
类型

整数

默认值

5 (中等)

实时更新

yes

控制在负载下对实例 I/O 请求的优先级。

指定 0 到 10 之间的整数。

limits.hugepages.1GB

1 GB 大页数量限制

limits.hugepages.1GB
类型

string

实时更新

yes

条件

容器

用于限制 1 GB 大页数量的固定值(以字节为单位)。支持各种后缀(请参阅 存储、内存和网络限制的单位)。

有关更多信息,请参阅 大页限制

limits.hugepages.1MB

1 MB 大页数量限制

limits.hugepages.1MB
类型

string

实时更新

yes

条件

容器

用于限制 1 MB 大页数量的固定值(以字节为单位)。支持各种后缀(请参阅 存储、内存和网络限制的单位)。

有关更多信息,请参阅 大页限制

limits.hugepages.2MB

2 MB 大页数量限制

limits.hugepages.2MB
类型

string

实时更新

yes

条件

容器

用于限制 2 MB 大页数量的固定值(以字节为单位)。支持各种后缀(请参阅 存储、内存和网络限制的单位)。

有关更多信息,请参阅 大页限制

limits.hugepages.64KB

64 KB 大页数量限制

limits.hugepages.64KB
类型

string

实时更新

yes

条件

容器

用于限制 64 KB 大页数量的固定值(以字节为单位)。支持各种后缀(请参阅 存储、内存和网络限制的单位)。

有关更多信息,请参阅 大页限制

limits.memory

主机内存使用限制

limits.memory
类型

string

默认值

1GiB (VM)

实时更新

yes

主机内存的百分比或以字节为单位的固定值。支持各种后缀。

有关详细信息,请参阅存储、内存和网络限制的单位

limits.memory.enforce

内存限制是hard还是soft

limits.memory.enforce
类型

string

默认值

hard

实时更新

yes

条件

容器

如果实例的内存限制为hard,则实例不能超过其限制。如果它为soft,则实例可以在有额外主机内存可用时超过其内存限制。

limits.memory.hugepages

是否使用巨页支持实例

limits.memory.hugepages
类型

bool

默认值

false

实时更新

条件

虚拟机

如果此选项设置为false,则使用常规系统内存。

limits.memory.swap

控制实例的交换使用情况

limits.memory.swap
类型

string

默认值

true

实时更新

yes

条件

容器

当设置为truefalse时,它控制容器是否可能被内核交换掉部分内存。或者,它可以设置为字节值,然后允许容器通过交换使用额外的内存。

limits.memory.swap.priority

阻止实例被交换到磁盘

limits.memory.swap.priority
类型

整数

默认值

10 (最高)

实时更新

yes

条件

容器

指定 0 到 10 之间的整数。值越高,实例越不可能被交换到磁盘。

limits.processes

可以在实例中运行的进程的最大数量

limits.processes
类型

整数

默认值

empty

实时更新

yes

条件

容器

如果留空,则不设置限制。

limits.kernel.*

每个实例的内核资源

limits.kernel.*
类型

string

实时更新

条件

容器

您可以对实例设置内核限制,例如,您可以限制打开的文件数量。有关更多信息,请参阅内核资源限制

CPU 限制

您可以选择不同的方法来限制 CPU 使用率

  • limits.cpu设置为限制实例可以看到和使用的 CPU。有关如何设置此选项,请参阅CPU 固定

  • limits.cpu.allowance设置为限制实例可以在可用 CPU 上施加的负载。此选项仅适用于容器。有关如何设置此选项,请参阅配额和优先级(仅限容器)

可以同时设置这两个选项,以限制实例可见的 CPU 和这些实例的允许使用情况。但是,如果您将limits.cpu.allowance与时间限制一起使用,您应该避免额外使用limits.cpu,因为这会对调度程序施加很多约束,并可能导致分配效率降低。

CPU 限制是通过cpusetcpu cgroup 控制器混合实现的。

CPU 固定

limits.cpu通过cpuset控制器导致 CPU 固定。您可以指定哪些 CPU 或有多少个 CPU 对实例可见且可用

  • 要指定要使用的 CPU,请将limits.cpu设置为一组 CPU(例如,1,2,3)或一个 CPU 范围(例如,0-3)。

    要固定到单个 CPU,请使用范围语法(例如,1-1)将其与 CPU 数量区分开来。

  • 如果您指定了一个 CPU 数量(例如,4),Incus 将对所有未固定到特定 CPU 的实例进行动态负载均衡,尝试将负载分散在机器上。每当实例启动或停止时,以及每当向系统添加 CPU 时,都会重新平衡实例。

虚拟机的 CPU 限制

注意

Incus 支持实时更新limits.cpu选项。但是,对于虚拟机,这仅意味着相应的 CPU 处于热插拔状态。根据客户机操作系统的不同,您可能需要重新启动实例或完成一些手动操作才能将新的 CPU 联机。

Incus 虚拟机默认只分配一个 vCPU,它显示为与主机 CPU 供应商和类型匹配,但只有一个内核,没有线程。

limits.cpu设置为单个整数时,Incus 会分配多个 vCPU,并将其作为完整内核公开给客户机。这些 vCPU 不会固定到主机上的特定物理内核。vCPU 的数量可以在 VM 运行时更新。

limits.cpu设置为 CPU ID 的范围或逗号分隔列表(如incus info --resources提供)时,vCPU 会固定到这些物理内核。在这种情况下,Incus 会检查 CPU 配置是否与真实的硬件拓扑结构相符,如果相符,它将在客户机中复制该拓扑结构。在进行 CPU 固定时,无法在 VM 运行时更改配置。

例如,如果固定配置包括八个线程,每个线程对来自同一个内核,并且跨两个 CPU 分布了偶数个内核,则客户机将显示两个 CPU,每个 CPU 都有两个内核,每个内核都有两个线程。NUMA 布局也会类似地复制,在这种情况下,客户机很可能最终会有两个 NUMA 节点,每个 CPU 插槽一个。

在具有多个 NUMA 节点的这种环境中,内存也会类似地跨 NUMA 节点划分,并相应地固定在主机上,然后公开给客户机。

所有这些都允许在客户机中执行非常高性能的操作,因为客户机调度程序可以正确地推断插槽、内核和线程,以及在共享内存或将进程跨 NUMA 节点移动时考虑 NUMA 拓扑结构。

配额和优先级(仅限容器)

limits.cpu.allowance驱动 CFS 调度程序配额(当传递时间约束时),或通用 CPU 共享机制(当传递百分比值时)

  • 时间约束(例如,20ms/50ms)是一个硬限制。例如,如果您想允许容器使用不超过一个 CPU,请将limits.cpu.allowance设置为类似100ms/100ms的值。该值相对于一个 CPU 的时间值,因此要限制为两个 CPU 的时间值,请使用类似100ms/50ms200ms/100ms的值。

  • 在使用百分比值时,限制是一个软限制,仅在负载下应用。它用于计算实例的调度程序优先级,相对于任何其他使用相同 CPU 或 CPU 的实例。例如,要将容器的 CPU 使用率限制为负载下的一个 CPU,请将limits.cpu.allowance设置为100%

limits.cpu.priority是另一个因素,用于在多个实例共享一组 CPU 并且分配给它们的 CPU 百分比相同的情况下,计算调度程序优先级得分。

巨页限制

Incus 允许通过limits.hugepage.[size]键限制容器可用的巨页数量。

体系结构通常公开多个巨页大小。可用的巨页大小取决于体系结构。

为巨页设置限制在 Incus 配置为拦截hugetlbfs文件系统的mount系统调用(在无特权容器中)时特别有用。当 Incus 拦截hugetlbfsmount系统调用时,它会为容器挂载hugetlbfs文件系统,并使用正确的uidgid值作为挂载选项。这使得从无特权容器使用巨页成为可能。但是,建议通过limits.hugepages.[size]限制容器可用的巨页数量,以阻止容器耗尽主机可用的巨页。

限制巨型页面的操作通过 hugetlb cgroup 控制器完成,这意味着主机系统必须在旧版或统一 cgroup 层次结构中公开 hugetlb 控制器,才能应用这些限制。

内核资源限制

对于容器实例,Incus 公开了通用的命名空间键 limits.kernel.*,可用于设置资源限制。

它之所以通用,是因为 Incus 不会对在 limits.kernel.* 前缀之后指定的资源进行任何验证。Incus 不可能了解给定内核支持的所有可能的资源。相反,Incus 只会在 limits.kernel.* 前缀之后传递相应的资源键及其值给内核。内核将进行相应的验证。这允许用户在其系统上指定任何支持的限制。

一些常见的限制包括

limits.kernel.as

进程虚拟内存的最大大小

limits.kernel.as
类型

string

资源

RLIMIT_AS

limits.kernel.core

进程核心转储文件的大小上限

limits.kernel.core
类型

string

资源

RLIMIT_CORE

limits.kernel.cpu

进程可消耗的 CPU 时间量的秒数限制

limits.kernel.cpu
类型

string

资源

RLIMIT_CPU

limits.kernel.data

进程数据段的最大大小

limits.kernel.data
类型

string

资源

RLIMIT_DATA

limits.kernel.fsize

进程可创建文件的最大大小

limits.kernel.fsize
类型

string

资源

RLIMIT_FSIZE

limits.kernel.locks

此进程可建立的文件锁数量的限制

limits.kernel.locks
类型

string

资源

RLIMIT_LOCKS

limits.kernel.memlock

进程可在 RAM 中锁定的内存字节数的限制

limits.kernel.memlock
类型

string

资源

RLIMIT_MEMLOCK

limits.kernel.nice

进程的优先级值可提高到的最大值

limits.kernel.nice
类型

string

资源

RLIMIT_NICE

limits.kernel.nofile

进程可打开的文件的最大数量

limits.kernel.nofile
类型

string

资源

RLIMIT_NOFILE

limits.kernel.nproc

可为调用进程的用户创建的进程的最大数量

limits.kernel.nproc
类型

string

资源

RLIMIT_NPROC

limits.kernel.rtprio

可为此进程设置的实时优先级的最大值

limits.kernel.rtprio
类型

string

资源

RLIMIT_RTPRIO

limits.kernel.sigpending

进程可在 RAM 中锁定的内存字节数的限制

limits.kernel.sigpending
类型

string

资源

RLIMIT_SIGPENDING

有关所有可用限制的完整列表,请参阅 getrlimit(2)/setrlimit(2) 系统调用的手册页。

要在 limits.kernel.* 命名空间中指定限制,请使用小写的资源名称,不使用 RLIMIT_ 前缀。例如,RLIMIT_NOFILE 应指定为 nofile

限制由两个冒号分隔的值指定,这些值可以是数字或单词 unlimited(例如,limits.kernel.nofile=1000:2000)。可以使用单个值作为快捷方式,将软限制和硬限制都设置为相同的值(例如,limits.kernel.nofile=3000)。

没有明确配置限制的资源将继承启动容器的进程的限制。请注意,这种继承不是由 Incus 强制执行的,而是由内核强制执行的。

迁移选项

以下实例选项控制实例从一台 Incus 服务器移动到另一台时的行为

migration.incremental.memory

是否使用增量内存传输

migration.incremental.memory
类型

bool

默认值

false

实时更新

yes

条件

容器

使用实例内存的增量内存传输可以减少停机时间。

migration.incremental.memory.goal

在停止实例之前要同步的内存百分比

migration.incremental.memory.goal
类型

整数

默认值

70

实时更新

yes

条件

容器

migration.incremental.memory.iterations

在停止实例之前要经历的传输操作的最大数量

migration.incremental.memory.iterations
类型

整数

默认值

10

实时更新

yes

条件

容器

migration.stateful

是否允许有状态的停止/启动和快照

migration.stateful
类型

bool

默认值

false

实时更新

启用此选项将阻止使用与之不兼容的一些功能。

NVIDIA 和 CUDA 配置

以下实例选项指定实例的 NVIDIA 和 CUDA 配置

nvidia.driver.capabilities

实例需要的驱动程序功能

nvidia.driver.capabilities
类型

string

默认值

compute,utility

实时更新

条件

容器

指定的驱动程序功能用于设置 libnvidia-container NVIDIA_DRIVER_CAPABILITIES

nvidia.require.cuda

所需的 CUDA 版本

nvidia.require.cuda
类型

string

实时更新

条件

容器

指定的版本表达式用于设置 libnvidia-container NVIDIA_REQUIRE_CUDA

nvidia.require.driver

所需的驱动程序版本

nvidia.require.driver
类型

string

实时更新

条件

容器

指定的版本表达式用于设置 libnvidia-container NVIDIA_REQUIRE_DRIVER

nvidia.runtime

是否将主机 NVIDIA 和 CUDA 运行时库传递到实例中

nvidia.runtime
类型

bool

默认值

false

实时更新

条件

容器

原始实例配置覆盖

以下实例选项允许直接与 Incus 本身使用的后端功能进行交互

raw.apparmor

AppArmor 配置文件条目

raw.apparmor
类型

blob

实时更新

yes

指定的条目将追加到生成的配置文件中。

raw.idmap

原始 idmap 配置

raw.idmap
类型

blob

实时更新

条件

无特权容器

例如:both 1000 1000

raw.lxc

要追加到生成的 LXC 配置的原始 LXC 配置

raw.lxc
类型

blob

实时更新

条件

容器

raw.qemu

要追加到生成的命令行的原始 QEMU 配置

raw.qemu
类型

blob

实时更新

条件

虚拟机

raw.qemu.conf

对生成的 qemu.conf 文件的添加/覆盖

raw.qemu.conf
类型

blob

实时更新

条件

虚拟机

更多信息请参见 覆盖 QEMU 配置

raw.qemu.qmp.early

在 Incus QEMU 初始化之前运行的 QMP 命令

raw.qemu.qmp.early
类型

blob

实时更新

条件

虚拟机

raw.qemu.qmp.post-start

虚拟机启动后运行的 QMP 命令

raw.qemu.qmp.post-start
类型

blob

实时更新

条件

虚拟机

raw.qemu.qmp.pre-start

在 Incus QEMU 初始化之后,虚拟机启动之前运行的 QMP 命令

raw.qemu.qmp.pre-start
类型

blob

实时更新

条件

虚拟机

raw.qemu.scriptlet

在早期、预启动和启动后阶段运行的 QEMU 脚本

raw.qemu.scriptlet
类型

string

实时更新

条件

虚拟机

raw.seccomp

原始 Seccomp 配置

raw.seccomp
类型

blob

实时更新

条件

容器

重要

设置这些 raw.* 键可能会以非明显的方式破坏 Incus。因此,您应该避免设置任何这些键。

覆盖 QEMU 配置

对于虚拟机实例,Incus 通过配置文件来配置 QEMU,该文件使用 -readconfig 命令行选项传递给 QEMU。此配置文件在每个实例启动之前生成。它位于 /run/incus/<instance_name>/qemu.conf

默认配置适用于 Incus 最常见的用例:具有 VirtIO 设备的现代 UEFI 来宾。但是,在某些情况下,您可能需要覆盖生成的配置。例如

  • 运行不支持 UEFI 的旧来宾操作系统。

  • 当来宾操作系统不支持 VirtIO 时,指定自定义虚拟设备。

  • 在机器启动之前添加 Incus 不支持的设备。

  • 删除与来宾操作系统冲突的设备。

要覆盖配置,请设置 raw.qemu.conf 选项。它支持类似于 qemu.conf 的格式,但也有一些补充。由于它是一个多行配置选项,因此您可以使用它来修改多个部分或键。

  • 要替换生成的配置文件中的部分或键,请添加一个具有不同值的节。

    例如,使用以下节来覆盖默认的 virtio-gpu-pci GPU 驱动程序

    raw.qemu.conf: |-
        [device "qemu_gpu"]
        driver = "qxl-vga"
    
  • 要删除一个节,请指定一个没有任何键的节。例如

    raw.qemu.conf: |-
        [device "qemu_gpu"]
    
  • 要删除一个键,请指定一个空字符串作为值。例如

    raw.qemu.conf: |-
        [device "qemu_gpu"]
        driver = ""
    
  • 要添加一个新的节,请指定配置文件中不存在的节名称。

QEMU 使用的配置文件格式允许具有相同名称的多个节。以下是 Incus 生成的配置的一部分

[global]
driver = "ICH9-LPC"
property = "disable_s3"
value = "1"

[global]
driver = "ICH9-LPC"
property = "disable_s4"
value = "1"

要指定要覆盖的节,请指定一个索引。例如

raw.qemu.conf: |-
    [global][1]
    value = "0"

节索引从 0 开始(当未指定时,这是默认值),因此上面的示例将生成以下配置

[global]
driver = "ICH9-LPC"
property = "disable_s3"
value = "1"

[global]
driver = "ICH9-LPC"
property = "disable_s4"
value = "0"

覆盖 QEMU 运行时对象

虽然 raw.qemuraw.qemu.conf 可用于更改传递给 QEMU 的参数和配置文件,但现在很多设备都是通过 QMP 添加的。

Incus 使用它来添加可能需要在运行时重新配置的任何设备,实际上就是可以热插拔的任何设备。

这些设备无法通过配置或命令行来覆盖,而是可以使用其他配置键来直接运行 QMP 命令。

固定命令可以通过 raw.qemu.earlyraw.qemu.pre-startraw.qemu.post-start 配置键提供。这些键接受一个 JSON 编码的 QMP 命令列表来运行。

这些钩子对应于

  • early 在 Incus 通过 QMP 添加任何设备之前运行

  • pre-start 在 Incus 添加完所有设备后,虚拟机启动之前运行

  • post-start 在虚拟机启动后立即运行

对于需要动态 QMP 交互的任何人,例如在修改或生成新对象之前检索某些对象的当前值,也可以使用脚本将这些钩子附加到这些钩子上。

这可以通过 raw.qemu.scriptlet 完成。脚本必须定义 qemu_hook(hook_name) 函数。

以下命令公开给该脚本

  • log_info 将记录一条 INFO 消息

  • log_warn 将记录一条 WARNING 消息

  • log_error 将记录一条 ERROR 消息

  • run_qmp 将运行任意 QMP 命令(JSON)并返回其输出

  • run_command 将使用可选的参数列表运行指定的命令并返回其输出

此外,以下别名命令(在内部使用 run_command)也可用于简化脚本

  • blockdev_add

  • blockdev_del

  • chardev_add

  • chardev_change

  • chardev_remove

  • device_add

  • device_del

  • netdev_add

  • netdev_del

  • object_add

  • object_del

  • qom_get

  • qom_list

  • qom_set

安全策略

以下实例选项控制实例的 安全 策略

security.agent.metrics

是否查询 incus-agent 以获取状态信息和指标

security.agent.metrics
类型

bool

默认值

true

实时更新

条件

虚拟机

security.csm

是否使用支持 UEFI 不兼容操作系统的固件

security.csm
类型

bool

默认值

false

实时更新

条件

虚拟机

启用此选项时,请将 security.secureboot 设置为 false

security.guestapi

是否在实例中存在 /dev/incus

security.guestapi
类型

bool

默认值

true

实时更新

更多信息请参见 实例与主机之间的通信

security.guestapi.images

控制 /1.0/images API 在 guestapi 上的可用性

security.guestapi.images
类型

bool

默认值

false

实时更新

条件

容器

security.idmap.base

用于分配的基主机 ID

security.idmap.base
类型

整数

实时更新

条件

无特权容器

设置此选项将覆盖自动检测。

security.idmap.isolated

是否为该实例使用唯一的 idmap

security.idmap.isolated
类型

bool

默认值

false

实时更新

条件

无特权容器

如果指定,则用于该实例的 idmap 在设置了此选项的实例中是唯一的。

security.idmap.size

要使用的 idmap 的大小

security.idmap.size
类型

整数

实时更新

条件

无特权容器

security.nesting

是否支持在实例中运行 Incus(嵌套)

security.nesting
类型

bool

默认值

false

实时更新

yes

条件

容器

security.privileged

是否以特权模式运行实例

security.privileged
类型

bool

默认值

false

实时更新

条件

容器

security.protection.delete

防止删除实例

security.protection.delete
类型

bool

默认值

false

实时更新

yes

security.protection.shift

是否保护文件系统免受 UID/GID 偏移

security.protection.shift
类型

bool

默认值

false

实时更新

yes

条件

容器

将此选项设置为 true 以防止实例的文件系统在启动时发生 UID/GID 偏移。

security.secureboot

是否使用默认的 Microsoft 密钥启用 UEFI 安全启动

security.secureboot
类型

bool

默认值

true

实时更新

条件

虚拟机

禁用此选项时,请考虑启用 security.csm

security.sev

是否为此虚拟机启用 AMD SEV(安全加密虚拟化)

security.sev
类型

bool

默认值

false

实时更新

条件

虚拟机

security.sev.policy.es

是否为此虚拟机启用 AMD SEV-ES(SEV 加密状态)

security.sev.policy.es
类型

bool

默认值

false

实时更新

条件

虚拟机

security.sev.session.data

客户机所有者的 base64 编码的会话 blob

security.sev.session.data
类型

string

默认值

true

实时更新

条件

虚拟机

security.sev.session.dh

客户机所有者的 base64 编码的 Diffie-Hellman 密钥

security.sev.session.dh
类型

string

默认值

true

实时更新

条件

虚拟机

security.syscalls.allow

允许的系统调用列表

security.syscalls.allow
类型

string

实时更新

条件

容器

允许的系统调用的 \n 分隔列表。此列表必须与 security.syscalls.deny* 互斥。

security.syscalls.deny

拒绝的系统调用列表

security.syscalls.deny
类型

string

实时更新

条件

容器

拒绝的系统调用的 \n 分隔列表。此列表必须与 security.syscalls.allow 互斥。

security.syscalls.deny_compat

是否阻止 compat_* 系统调用(仅限 x86_64

security.syscalls.deny_compat
类型

bool

默认值

false

实时更新

条件

容器

x86_64 上,此选项控制是否阻止 compat_* 系统调用。在其他架构上,此选项将被忽略。

security.syscalls.deny_default

是否启用默认的系统调用拒绝

security.syscalls.deny_default
类型

bool

默认值

true

实时更新

条件

容器

security.syscalls.intercept.bpf

是否处理 bpf() 系统调用

security.syscalls.intercept.bpf
类型

bool

默认值

false

实时更新

条件

容器

security.syscalls.intercept.bpf.devices

是否允许 BPF 程序

security.syscalls.intercept.bpf.devices
类型

bool

默认值

false

实时更新

条件

容器

此选项控制是否允许在统一层次结构中的设备 cgroup 中加载 BPF 程序。

security.syscalls.intercept.mknod

是否处理 mknodmknodat 系统调用

security.syscalls.intercept.mknod
类型

bool

默认值

false

实时更新

条件

容器

这些系统调用允许创建字符/块设备的有限子集。

security.syscalls.intercept.mount

是否处理 mount 系统调用

security.syscalls.intercept.mount
类型

bool

默认值

false

实时更新

条件

容器

security.syscalls.intercept.mount.allowed

可以挂载的文件系统

security.syscalls.intercept.mount.allowed
类型

string

实时更新

yes

条件

容器

指定一个以逗号分隔的列表,列出可以安全地挂载到实例内部进程的文件系统。

security.syscalls.intercept.mount.fuse

应重定向到 FUSE 实现的文件系统

security.syscalls.intercept.mount.fuse
类型

string

实时更新

yes

条件

容器

指定应重定向到其 FUSE 实现的给定文件系统的挂载点(例如,ext4=fuse2fs)。

security.syscalls.intercept.mount.shift

是否对系统调用拦截使用 idmapped 挂载

security.syscalls.intercept.mount.shift
类型

bool

默认值

false

实时更新

yes

条件

容器

security.syscalls.intercept.sched_setcheduler

是否处理 sched_setscheduler 系统调用

security.syscalls.intercept.sched_setcheduler
类型

bool

默认值

false

实时更新

条件

容器

此系统调用允许提高进程优先级。

security.syscalls.intercept.setxattr

是否处理 setxattr 系统调用

security.syscalls.intercept.setxattr
类型

bool

默认值

false

实时更新

条件

容器

此系统调用允许设置受限扩展属性的有限子集。

security.syscalls.intercept.sysinfo

是否处理 sysinfo 系统调用

security.syscalls.intercept.sysinfo
类型

bool

默认值

false

实时更新

条件

容器

此系统调用可用于获取基于 cgroup 的资源使用情况信息。

快照调度和配置

以下实例选项控制 实例快照 的创建和过期。

snapshots.expiry

何时删除快照

snapshots.expiry
类型

string

实时更新

指定类似 1M 2H 3d 4w 5m 6y 的表达式。

snapshots.pattern

快照名称模板

snapshots.pattern
类型

string

默认值

snap%d

实时更新

指定一个表示快照名称的 Pongo2 模板字符串。此模板用于计划的快照和未命名的快照。

有关详细信息,请参阅 自动快照名称

snapshots.schedule

自动实例快照的计划

snapshots.schedule
类型

string

默认值

empty

实时更新

指定 cron 表达式(<minute> <hour> <dom> <month> <dow>)、以逗号和空格分隔的计划别名列表(@startup@hourly@daily@midnight@weekly@monthly@annually@yearly),或留空以禁用自动快照。

请注意,与大多数其他配置键不同,此键必须以逗号和空格分隔,而不能只是逗号分隔,因为 cron 表达式本身可能包含逗号。

snapshots.schedule.stopped

是否自动快照已停止的实例

snapshots.schedule.stopped
类型

bool

默认值

false

实时更新

自动快照名称

snapshots.pattern 选项接受一个 Pongo2 模板字符串来格式化快照名称。

要向快照名称添加时间戳,请使用 Pongo2 上下文变量 creation_date。请确保在模板字符串中格式化日期,以避免快照名称中出现禁止的字符。例如,将 snapshots.pattern 设置为 {{ creation_date|date:'2006-01-02_15-04-05' }},以根据快照创建的时间(精确到秒)对快照进行命名。

避免名称冲突的另一种方法是在模式中使用占位符 %d。对于第一个快照,占位符将被替换为 0。对于后续的快照,将考虑现有的快照名称,以查找占位符位置处最大的数字。然后,将该数字加一,以生成新的名称。

易失性内部数据

以下易失性键目前由 Incus 在内部使用,用于存储特定于实例的内部数据

volatile.<name>.apply_quota

磁盘配额

volatile.<name>.apply_quota
类型

string

磁盘配额将在实例下次启动时应用。

volatile.<name>.ceph_rbd

Ceph 磁盘设备的 RBD 设备路径

volatile.<name>.ceph_rbd
类型

string

volatile.<name>.host_name

主机上的网络设备名称

volatile.<name>.host_name
类型

string

volatile.<name>.hwaddr

网络设备 MAC 地址

volatile.<name>.hwaddr
类型

string

当设备本身未设置 hwaddr 属性时,将使用网络设备 MAC 地址。

volatile.<name>.last_state.created

网络设备物理设备是否已创建

volatile.<name>.last_state.created
类型

string

可能的值为 truefalse

volatile.<name>.last_state.hwaddr

网络设备原始 MAC

volatile.<name>.last_state.hwaddr
类型

string

将物理设备移入实例时使用的原始 MAC。

volatile.<name>.last_state.ip_addresses

上次使用的 IP 地址

volatile.<name>.last_state.ip_addresses
类型

string

网络设备上次使用的 IP 地址的逗号分隔列表。

volatile.<name>.last_state.mtu

网络设备原始 MTU

volatile.<name>.last_state.mtu
类型

string

将物理设备移入实例时使用的原始 MTU。

volatile.<name>.last_state.pci.driver

PCI 原始主机驱动程序

volatile.<name>.last_state.pci.driver
类型

string

PCI 设备的原始主机驱动程序。

volatile.<name>.last_state.pci.parent

PCI 父主机设备

volatile.<name>.last_state.pci.parent
类型

string

将 PCI 设备分配给实例时使用的父主机设备。

volatile.<name>.last_state.pci.slot.name

PCI 父插槽名称

volatile.<name>.last_state.pci.slot.name
类型

string

父主机设备 PCI 插槽名称。

volatile.<name>.last_state.usb.bus

USB 总线地址

volatile.<name>.last_state.usb.bus
类型

string

原始 USB 总线地址。

volatile.<name>.last_state.usb.device

USB 设备标识符

volatile.<name>.last_state.usb.device
类型

string

原始 USB 设备标识符。

volatile.<name>.last_state.vdpa.name

VDPA 设备名称

volatile.<name>.last_state.vdpa.name
类型

string

将 VDPA 设备文件描述符移入实例时使用的 VDPA 设备名称。

volatile.<name>.last_state.vf.hwaddr

SR-IOV 虚拟函数原始 MAC

volatile.<name>.last_state.vf.hwaddr
类型

string

将 VF 移入实例时使用的原始 MAC。

volatile.<name>.last_state.vf.id

SR-IOV 虚拟函数 ID

volatile.<name>.last_state.vf.id
类型

string

将 VF 移入实例时使用的 ID。

volatile.<name>.last_state.vf.parent

SR-IOV 父主机设备

volatile.<name>.last_state.vf.parent
类型

string

将 VF 分配给实例时使用的父主机设备。

volatile.<name>.last_state.vf.spoofcheck

SR-IOV 虚拟函数原始欺骗检查设置

volatile.<name>.last_state.vf.spoofcheck
类型

string

将 VF 移入实例时使用的原始欺骗检查设置。

volatile.<name>.last_state.vf.vlan

SR-IOV 虚拟函数原始 VLAN

volatile.<name>.last_state.vf.vlan
类型

string

将 VF 移入实例时使用的原始 VLAN。

volatile.<name>.mig.uuid

MIG 实例 UUID

volatile.<name>.mig.uuid
类型

string

NVIDIA MIG 实例 UUID。

volatile.<name>.name

实例内的网络接口名称

volatile.<name>.name
类型

string

当设备本身未设置 name 属性时,实例内的网络接口名称。

volatile.<name>.vgpu.uuid

虚拟 GPU 实例 UUID

volatile.<name>.vgpu.uuid
类型

string

NVIDIA 虚拟 GPU 实例 UUID。

volatile.apply_nvram

是否在实例下次启动时重新生成 VM NVRAM

volatile.apply_nvram
类型

bool

volatile.apply_template

模板挂钩

volatile.apply_template
类型

string

具有给定名称的模板将在下次启动时触发。

volatile.base_image

基本映像的哈希值

volatile.base_image
类型

string

创建实例所用的映像的哈希值(如果实例不是从映像创建的,则为空)。

volatile.cloud_init.instance-id

instance-id(UUID)暴露给 cloud-init

volatile.cloud_init.instance-id
类型

string

volatile.cluster.group

实例的原始集群组

volatile.cluster.group
类型

string

在创建时将实例限制为的集群组。这在重新调度事件(如疏散)期间使用,以使实例保持在请求的集中。

volatile.container.oci

容器是否为 OCI 应用程序容器

volatile.container.oci
类型

bool

默认值

false

volatile.cpu.nodes

实例 NUMA 节点

volatile.cpu.nodes
类型

string

为实例选择的 NUMA 节点。

volatile.evacuate.origin

迁移实例的来源

volatile.evacuate.origin
类型

string

实例在迁移之前所在的集群成员。

volatile.idmap.base

实例的主 idmap 范围中的第一个 ID

volatile.idmap.base
类型

整数

volatile.idmap.current

实例当前使用的 idmap

volatile.idmap.current
类型

string

volatile.idmap.next

实例下次启动时使用的 idmap

volatile.idmap.next
类型

string

volatile.last_state.idmap

序列化实例 UID/GID 映射

volatile.last_state.idmap
类型

string

volatile.last_state.power

上次主机关闭时的实例状态

volatile.last_state.power
类型

string

volatile.last_state.ready

实例标记自己已准备就绪

volatile.last_state.ready
类型

string

volatile.uuid

实例 UUID

volatile.uuid
类型

string

实例 UUID 在所有服务器和项目中全局唯一。

volatile.uuid.generation

实例生成 UUID

volatile.uuid.generation
类型

string

只要实例在时间轴上的位置后退,实例生成 UUID 就会发生变化。它在所有服务器和项目中全局唯一。

volatile.vsock_id

上次启动时使用的实例 vsock ID

volatile.vsock_id
类型

string

注意

用户无法设置易失性键。