如何在 Fedora Linux 服务器上安装和设置 LXD
Linux 容器是 Linux 操作系统的操作系统级虚拟化实现。LXD 是一个系统容器管理器。您将获得类似于虚拟机的体验,但使用的是 Linux 容器。您可以使用 LXD 运行各种 Linux 发行版。本页介绍如何在 Fedora Linux 服务器上设置、使用 LXD 和创建您的第一个 VM。最后,您将学习如何将流量从 Internet 路由到容器。
教程详细信息 | |
---|---|
难度等级 | 简单的 |
Root 权限 | 是的 |
要求 | Linux 终端 |
类别 | 包管理器 |
操作系统兼容性 | Fedora • Linux |
预计阅读时间 | 10 分钟 |
在 Fedora Linux 上运行 LXD 的要求
- Fedora Linux 服务器可以在裸机或云中运行。我使用 Fedora Linux 版本 30/31/32 进行了测试。
- 在 Fedora 上安装并配置 Snapd
让我们详细了解在 Fedora Linux 服务器上安装和设置 LXD 的所有步骤。
步骤 1 - 安装 snapd
要安装 snapd 包,请输入以下 dnf 命令:
$ sudo dnf install snapd
如何在 Fedora Linux 上安装 snapd
$ sudo ln -s /var/lib/snapd/snap /snap
$ snap version
snap 2.58.3-1.fc37 snapd 2.58.3-1.fc37 series 16 fedora 37 kernel 6.2.7-200.fc37.x86_64
第 2 步 - 在 Fedora Linux 服务器上安装并设置 LXD
键入以下 snap 命令:
您可能会看到以下警告:
## first restart snapd using the systemctl command ##
$ sudo systemctl restart snapd.service
$ sudo snap install lxd
Warning: /var/lib/snapd/snap/bin was not found in your $PATH. If you've not restarted your session since you installed snapd, try doing that.
您需要重新启动会话。只需注销并重新登录即可。然后运行 echo/printf 命令打印您的 $PATH:
$ echo "$PATH"
现在您可以看到 /var/lib/snapd/snap/bin,如下所示:
/root/.local/bin:/root/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/var/lib/snapd/snap/bin
验证 LXD 安装
确保 Fedora Linux 上启用了 lxd 服务:
$ sudo snap enable lxd
$ sudo snap services lxd
Service Startup Current Notes
lxd.activate enabled inactive -
lxd.daemon enabled active socket-activated
lxd.user-daemon enabled inactive socket-activated
如果未激活,请启动它:
$ sudo snap start lxd
如果它仍然显示为未激活,请不要担心。当您lxd init按照下面所述运行它时,它将通过套接字激活。
将名为“vivek”的 Linux 用户添加到 lxd 组
输入以下 usermod 命令(可以将用户名“ vivek ”替换为您在 Fedora Linux 上的实际用户名):
此时,如果会话未激活,请注销并再次登录
$ sudo usermod -a -G lxd vivek
$ id vivek
$ newgrp lxd
$ logout
步骤 3 - 为 VM 配置 LXD 网络和存储
键入以下命令:
$ lxd init
我建议您使用新的后端(例如 ZFS、BTRFS 或 LVM)以及基于 DHCP 的 IP 网络,以便轻松设置每个虚拟机。因此,您可以使用新后端支持的快照和其他高级功能。您可能会收到以下警告:
警告:cgroup v2 尚未完全支持,正在进行部分限制
目前对 cgroups v2 的支持正在开发中,但尚未推出。因此,您需要忽略 Fedora Linux 32 上的此警告。
lxd 验证
确保 lxc 客户端正在与 LXD 守护进程通信:
$ lxc list
在 Fedora Linux 上添加防火墙规则以允许 lxdbr0 和 Internet 之间的流量
首先,获取您的网络列表:
这是我看到的:
$ lxc network list
+--------+----------+---------+-----------------+--------------------------+-------------+---------+---------+ | NAME | TYPE | MANAGED | IPV4 | IPV6 | DESCRIPTION | USED BY | STATE | +--------+----------+---------+-----------------+--------------------------+-------------+---------+---------+ | eth0 | physical | NO | | | | 0 | | +--------+----------+---------+-----------------+--------------------------+-------------+---------+---------+ | lxdbr0 | bridge | YES | 10.114.151.1/24 | fd42:982:c290:db63::1/64 | | 2 | CREATED | +--------+----------+---------+-----------------+--------------------------+-------------+---------+---------+
然后:
输出:
$ lxc network show lxdbr0
config: ipv4.address: 10.114.151.1/24 ipv4.nat: "true" ipv6.address: fd42:982:c290:db63::1/64 ipv6.nat: "true" description: "" name: lxdbr0 type: bridge used_by: - /1.0/instances/aws-t2-medium - /1.0/profiles/default managed: true status: Created locations: - none
使用firewall-cmd命令对所有lxdbr0进行如下配置。让我们在firewalld中允许往返于LXD网桥的流量,将网桥接口添加到受信任区域。要永久执行此操作,请运行以下命令:
$ sudo firewall-cmd --zone=trusted --change-interface=lxdbr0 --permanent
$ sudo firewall-cmd --reload
列出所有可用的 Linux LXD(Linux 容器)VM 映像
$ lxc image list images:
(点击放大)
$ lxc image alias list images:
$ lxc image alias list images: | grep -i arch
$ lxc image alias list images: | grep -i debian
$ lxc image alias list images: | grep -i fedora
步骤 4. 在 Fedora 上创建你的第一个 LXD VM
现在是时候创建和使用您的第一个容器了。要从图像创建和启动容器,请使用启动命令:
$ lxc launch images:{distro}/{version}/{arch} {container-name-here}
让我们看一些示例,根据您的需要从各种 Linux 发行版图像创建和启动容器。
CentOS Linux 9 容器
$ lxc launch images:centos/9-Stream/amd64 cenots-9
示例输出:
Creating cenots-9 Retrieving image: Unpack: 100% (1.97GB/s) Starting cenots-9
Fedora Linux 37 容器
$ lxc launch images:fedora/37/amd64 fedora-37
OpenSUSE Linux 15.4 框架
$ lxc launch images:opensuse/15.4/amd64 opensuse-15-4
Gentoo Linux 容器
以下是如何创建基于 openrc 的 Gentoo Linux 容器:
$ lxc launch images:gentoo/openrc/amd64 gentoo-orc
想要 systemd 作为 Gentoo 的 init?试试
$ lxc launch images:gentoo/systemd/amd64 gentoo-systemd
Arch Linux
$ lxc launch images:archlinux/amd64 arch-linux
Ubuntu Linux LTS 22.04
$ lxc launch images:ubuntu/22.04/amd64 ubuntu-nginx
Debian Linux 10.x
$ lxc launch images:debian/10/amd64 debian-nfs-server
Debian Linux 11.x
$ lxc launch images:debian/11/amd64 debian-11
$ lxc list
示例输出:
+-----------+---------+---------------------+----------------------------------------------+------------+-----------+ | NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS | +-----------+---------+---------------------+----------------------------------------------+------------+-----------+ | debian-11 | RUNNING | 10.205.77.80 (eth0) | fd42:400:b94d:ad98:216:3eff:fe7e:1ec5 (eth0) | PERSISTENT | | +-----------+---------+---------------------+----------------------------------------------+------------+-----------+
在您的开发机器上获取公共云实例
您想了解开发机器上的应用程序在云实例上的表现吗?别担心。您可以快速启动与所需云实例类型匹配的 LXD 容器。语法如下:
例如,以下是如何使用 Debian 11 作为名为 aws-t2-medium 的操作系统创建 t2.medium 实例(2 vCPU 和 4G ram):
验证:
这是我看到的:
$ lxc launch -t {type} {os/version} {container-name}
$ lxc launch -t {type} images:{os/version/arch} {container-name}
$ lxc launch -t t2.medium images:debian/10/amd64 aws-t2-medium
$ lxc info aws-t2-medium
Name: aws-t2-medium Status: RUNNING Type: container Architecture: x86_64 PID: 6252 Created: 2023/03/23 01:20 UTC Last Used: 2023/03/23 01:20 UTC Resources: Processes: 8 CPU usage: CPU usage (in seconds): 0 Memory usage: Memory (current): 45.37MiB Network usage: eth0: Type: broadcast State: UP Host interface: vethbca75f0b MAC address: 00:16:3e:c0:51:3c MTU: 1500 Bytes received: 2.77kB Bytes sent: 1.68kB Packets received: 15 Packets sent: 11 IP addresses: inet6: fe80::216:3eff:fec0:513c/64 (link) lo: Type: loopback State: UP MTU: 65536 Bytes received: 0B Bytes sent: 0B Packets received: 0 Packets sent: 0 IP addresses: inet: 127.0.0.1/8 (local) inet6: ::1/128 (local)
登录到您的 aws-t2-medium 实例类型并运行 top:
$ lxc exec aws-t2-medium -- top
在开发机器上本地测试您的容器资源有助于进行准确的容量规划并避免使用 AWS EC2/Lightsail 云实例进行过度配置。因此,您将节省一些钱。
如何列出我的所有容器/虚拟机
列出现有的容器:
$ lxc list --fast
$ lxc list | grep RUNNING
$ lxc list | grep STOPPED
如何在容器虚拟机中执行/运行指定的命令
$ lxc exec containerName -- command
$ lxc exec containerName -- /path/to/script
$ lxc exec containerName --env EDITOR=/usr/bin/vim -- command
### run date, ip a, ip rm and other commands on various containers ###
$ lxc exec cenots-7-vm -- date
$ lxc exec ubuntu-nginx-vm -- ip r
$ lxc exec fedora-36 -- dnf update
$ lxc exec debian-nfs-server-vm -- cat /etc/debian_version
如何登录我的容器/虚拟机
要在名为 debian-nfs-server-vm 的容器中登录并获得 shell 访问权限,请输入:
$ lxc exec debian-nfs-server-vm bash
现在您可以运行命令或为 VM 安装软件包:
要从容器中退出,只需输入 exit:
示例会话:
# cat /etc/*issue*
# apt-get update
# apt-get upgrade
# apt-get install nginx
# exit
如何启动/停止/重启我的容器
$ lxc start containerName # <--- start it
$ lxc stop containerName # <--- stop it
$ lxc restart containerName # <--- restart it
$ lxc stop ubuntu-nginx-vm
$ lxc start ubuntu-nginx-vm
$ lxc restart ubuntu-nginx-vm
如何删除我的容器
$ lxc stop vmName && lxc delete vmName
$ lxc stop ubuntu-nginx-vm && lxc delete ubuntu-nginx-vm
获取有关正在运行的容器的信息
$ lxc info
$ lxc info containerName
$ lxc info ubuntu-nginx-vm
步骤 5 - 将传入连接转发到 Linux 容器
首先在 ubuntu-nginx-vm 中安装 nginx 服务器:
示例文件:
$ lxc exec ubuntu-nginx-vm bash
# apt update && apt upgrade && apt install nginx
# systemctl enable nginx
# systemctl status nginx
### update/create the default html file
# cat /var/www/html/index.nginx-debian.html
<!DOCTYPE html> <html> <head> <title>Welcome to nginx running on LXD VM!</title> </head> <body> <h1><h1>Welcome to nginx running on LXD VM!</h1> </body> </html>
最后从 LXD vm 注销:
# logout
查找 ubuntu-nginx-vm IP 地址:
$ lxc list ubuntu-nginx-vm
示例输出:
+-----------------+---------+---------------------+------+------------+-----------+ | NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS | +-----------------+---------+---------------------+------+------------+-----------+ | ubuntu-nginx-vm | RUNNING | 10.75.139.74 (eth0) | | PERSISTENT | 0 | +-----------------+---------+---------------------+------+------------+-----------+
您需要使用 iptable 命令或ufw 命令将端口 80 上的所有传入流量重定向/转发到 Fedora Linux 28 公共 IP 地址(例如 104.20.187.5)到 LXD 私有 IP 地址 10.75.139.74 ,或者使用 lxd 代理协议。
查找默认的防火墙区域
相关另外,请查看我们针对Alpine Linux Awall、CentOS 8、OpenSUSE、RHEL 8、Debian 12/11、Ubuntu Linux 版本16.04 LTS / 18.04 LTS / 20.04 LTS和22.04 LTS 的
所有完整防火墙教程。
$ sudo firewall-cmd --get-default-zone
FedoraServer
为 FedoraServer 区域打开端口 80
$ sudo firewall-cmd --zone=FedoraServer --add-service=http --permanent
将80端口转发到LXD服务器10.75.139.74端口80
$ sudo firewall-cmd --permanent --zone=FedoraServer --add-forward-port=port=80:proto=tcp:toport=80:toaddr=10.75.139.74
重新装填火力
$ sudo firewall-cmd --reload
您在 Fedora 上使用 ufw 吗?尝试阅读如何配置 ufw 将端口 80/443 转发到 LAN 上托管的内部服务器教程,了解更多信息。
关于 lxd 代理协议的说明
您想避免输入所有这些防火墙命令规则吗? LXD 现在支持代理设备。它允许转发 LXD 主机和实例类型容器或 VM 之间的网络连接。换句话说,我们可以将到达 LXD 主机的 IP 地址之一的流量转发到实例/容器内的地址。当然,您也可以反向操作,让实例/容器中的地址通过主机连接。语法是:
lxc config device add {container-name} {device_name_here} proxy listen=tcp:${src_IP}:${src_port} connect=tcp:${dest_ip}:${dest_port}
在此示例中,将 ssh 或 http 流量重定向到名为 ubuntu-nginx-vm 的容器:
lxc config device add ubuntu-nginx-vm http-reditect proxy listen=tcp:1.2.3.4:80 connect=tcp:10.75.139.74:80
在哪里,
- ubuntu-nginx-vm – LXD 容器或实例虚拟机名称
- http-reditect – 每个 LXD 容器或实例虚拟机名称的唯一名称
- listen=tcp:1.2.3.4:80 – 公共或私有 IPv4/IPv6 和要监听的端口(主机的 IP:PORT)
- connect=tcp:10.75.139.74:80 – 将流量转发到此 LXD 实例的 IP:PORT
测试一下
启动网络浏览器并输入 url:有关更多信息,请参阅此处的
http://104.20.187.5
FirewallD 文档和此处的LXD 信息。
结论
您刚刚设置了一个在 Fedora Linux 上运行的 LXD 容器。容器启动并运行后,您可以安装其他服务,例如 Nginx、MariaDB、PHP、Python 等。有关更多信息,请参阅 LXD 页面。
- 在 Ubuntu 16.04 LTS 上安装 LXD 容器管理程序
- 如何在 Fedora Linux 26 上安装和设置 LXC(Linux 容器)
- 在KVM或Xen虚拟机下设置LXD容器
- 列出 LXD(Linux 容器)中的 VM 映像
- 升级由 Ubuntu/Debian 或 CentOS Linux 驱动的 LXD 容器
- 在 Linux 启动时自动启动 LXD 容器
- 重命名 LXD / LXC 容器的命令
- 在配置启动时在 Linux 容器 (LXD) 实例上运行命令
- 在云实例启动时,使用 shell 脚本中的 LXD(Linux 容器)创建 VM
- 将 LXD VM 移动/迁移到 Linux 上的另一台主机
- Fedora 安装并设置 LXD
- CentOS 7.x 安装并设置 LXD 服务器
- 在 Ubuntu 18.04 LTS 上安装 LXD 纯容器管理程序
- 使用 lxc 命令为 LXD 创建快照
- 在 CentOS/RHEL 8 上设置并安装 LXD
- Ubuntu 20.04 LTS 安装并设置 LXD
- 完整备份和恢复 LXD 容器
- 禁用 LXD 桥上的防火墙和 NAT 规则
- 使用 lxc 删除或移除 LXD 容器
- Linux 文件系统错误:事务失败解决方案
- Ubuntu 22.04 LTS 设置 LXD
- Debian 11 设置 LXD