Incus是虚拟机和系统容器的管理器。虚拟机是与主操作系统一起在计算机上运行的操作系统的实例。虚拟机使用硬件虚拟化功能来与主操作系统分离。系统容器是操作系统的实例,它也与主操作系统一起在计算机上运行。相反,系统容器使用Linux内核的安全原语来与主操作系统分离。您可以将系统容器视为软件虚拟机。
所有这些都由Incus共同管理。根据您的要求,您可以选择系统容器的虚拟机。两者之间,系统容器更加轻量级,您可以在计算机上安装更多容器。
虚拟机和系统容器的实例有很多用例。它们都归结为将软件和服务安装到实例中而不是在主操作系统上的简单性。如果您在实例中安装了某些内容,然后想要将其删除,则可以删除该实例。您的主操作系统仍然干净整洁。
如果您保留服务器(例如虚拟专用服务器/VPS或裸机服务器),则可以在同一服务器上托管多个网站。每个都将位于其自己的Incus实例上。您的数据库服务器将位于另一个实例中,它将通过实例到实例通信与网站进行通信。您想设置其中一个即时通讯机器人吗?启动我们可以在那里安装消息机器人。假如您热衷于天气预报并希望保存每月的天气状况文件,因为它们不保留历史记录?启动另一个实例并设置一个cron作业来保留这些每月文件的副本。
又或者您是桌面Linux用户并在实例中安装软件时。它使您的Linux桌面保持美观和干净。也开启了许多可能性。您是否受困于单一Viber桌面?将它们放入实例中。
迁移到Incus
您可以从头开始安装Incus或从LXD迁移到Incus。就我而言,我正在迁移具有27个系统容器(其中7个正在运行)的LXD安装,并且我在撰写这篇博文时正在这样做。
设置Incus软件包存储库
我正在使用这些安装说明从包中安装Incus。这些Incus软件包的安装说明适用于Debian或Ubuntu。为了方便起见,我在这里重复说明。
Incus打包为deb包,我们需要添加相应的存储库。首先,让我们看一下存储库GPG密钥。我们将首先查看存储库密钥,然后在下一步中导入它。与存储库说明相比,我使用该--list-packets参数来查看keyid.然后我可以在密钥服务器上搜索该密钥是否存在。
curl -fsSL https://pkgs.zabbly.com/key.asc | gpg --list-packets --fingerprint

这些Incus软件包的存储库密钥。
然后,在我的Debian风格的Linux发行版上下载并安装密钥。第一个命令验证是否存在/etc/apt/keyrings/目录。然后,它将实际密钥下载为文本文件,并使用命令with显示tee并将sudo其保存在/etc/apt/keyrings/目录中。运行命令后,您可以验证新文件zabbly.asc是否在其中。
sudo mkdir -p /etc/apt/keyrings/
curl -fsSL https://pkgs.zabbly.com/key.asc | sudo tee /etc/apt/keyrings/zabbly.asc
到目前为止,我们已经添加了存储库密钥。下一步是将存储库本身添加到我们的Linux中。创建一个包含以下内容的文件并将其另存make-incus-repository-configuration.sh为运行此脚本的好处是会自动配置Linux发行版的详细信息。
echo "Enabled: yes"
echo "Types: deb"
echo "URIs: https://pkgs.zabbly.com/incus/stable"
echo "Suites: $(. /etc/os-release && echo ${VERSION_CODENAME})"
echo "Components: main"
echo "Architectures: $(dpkg --print-architecture)"
echo "Signed-By: /etc/apt/keyrings/zabbly.asc"
现在运行以下命令将存储库安装到您的系统。该命令将运行脚本并为您的发行版创建适当的配置,然后再次通过命令传输输出sudotee以将它们写入适当的位置,同时还在终端上显示输出。
sh make-incus-repository-configuration.sh | sudo tee /etc/apt/sources.list.d/zabbly-incus-stable.sources
安装Incus服务器和客户端
存储库已就位。我们需要执行asudoaptupdate以便我们的系统使用新启用的存储库进行刷新。然后,我们安装incus包含Incus服务器(管理器)和incus命令行客户端的软件包。
sudo apt update
sudo apt install incus
我们已经安装了Incus服务器,但是我们没有初始化它。我们不能初始化它,因为我们要执行迁移。
incus配置客户端的访问
当我们在Linux系统上使用非root用户帐户时,我们需要为其授予特殊访问权限,以便我们的非root用户帐户可以访问Incus服务器/管理器。我们通过将上述非root用户帐户添加到特殊的incus-adminUnix组来做到这一点。在安装软件包期间incus,安装程序添加了两个新的Unix组:(incus-admin完全管理访问权限)和incus(简单管理任务)。我们正在将非root用户名添加myusername到incus-adminUnix组中。
sudo adduser myusername incus-admin
我们已将帐户添加到incus-adminUnix组。但它是立即激活的吗?不,由于Unix/Linux的工作方式。我们要么需要重新启动桌面会话(即注销/登录或重新启动),要么使用newgrpUnix命令为当前shell启用新的Unix组。我会做的newgrp。
newgrp incus-admin
当您运行该命令时,它将显示为没有任何变化。但是,如果您运行groups检查自己所在的组,您会注意到incus-admin出现在列表的第一个组中。如果系统提示您输入密码,则说明您没有正确运行之前的adduser命令。
incus现在我们已准备好通过此shell执行迁移并运行命令newgrp。
迁移到Incuslxd-to-incus
我们已经安装了incus包含Incus服务器/管理器、incus客户端实用程序的软件包,并且还引入了lxd-to-incus从LXD迁移到Incus的实用程序。
迁移时,系统会提示您是否删除LXD软件包。如果您打算这样做,请检查~/snap/lxd/common/config/是否有任何需要备份的重要配置。删除snap包可能会删除这里的任何配置(例如aliases和remotes)。如果不确定,请暂时不要删除LXD。
有一个包含27个系统容器(7个正在运行)的LXD安装,我现在将根据迁移说明YOLO到Incus。这是命令。我们需要它,sudo因为该命令执行各种管理任务才能完成迁移。也就是说,它比incus具有特权的工具做得更多incus-admin。
sudo lxd-to-incus
这是该工具的输出。我对迁移过程进行了计时。花了45秒才完成。那些正在运行的系统容器会自动重新启动。

迁移工具的输出lxd-to-incus,成功迁移。
使用Incus
您刚刚迁移到Incus。有什么需要注意的变化吗?
第一,默认有一个网络remote,它是images远程网络。
incus remote list
输出

Incus中的默认列表。
第二,有镜像列表吗?当然有,请访问https://images.linuxcontainers.org/
第三,有默认镜像吗?不需要。如果您想使用Debian或Ubuntu启动实例,您还需要指定版本。例如,当前的Debian映像名为debian/12.没有默认值debian或ubuntu镜像或此类别名。
第四,要从命令行查看所有可用图像的列表,请运行
incus image list images:
最后,要创建一个名为mydebian的Debian12容器,然后停止它,然后将其删除,请执行以下操作。
incus launch images:debian/12 mydebian
incus stop mydebian
incus delete mydebian
我们现在已经成功迁移到Incus。我们现在使用该incus命令来执行Incus任务。