我有很多服务器(>100),大部分是 centos、ubuntu 和一些 windows 服务器,使用 Zabbix 进行监控。其中许多服务器都使用 vanilla LXC 版本 2 或版本 3 进行虚拟化(没有 libvirt、没有 LXD、没有 proxmox 或类似的东西)。我是这个环境的新手,我很难理解哪台机器是虚拟化的以及它托管在哪里。
因此,我需要一种方法来在使用 ssh 连接到任何服务器时识别 LXC 主机。
要确定我是否实际上在 LXC 容器内,我可以使用
systemd-detect-virt
在具有 systemd 的系统上。输出告诉我是否在容器内。
但我需要更多。我需要一种方法来识别 LXC 容器托管在哪个主机上。我知道 LXC 容器应该尽可能靠近物理机器,并且可能不需要了解主机系统。但我需要维护这个环境。此外,其他系统管理员正在添加、移动(许多主机是集群的)、删除 LXC 容器。
有没有一种方法可以让我找到 LXC 容器正在运行的实际主机,而不必转移到 proxmox 等虚拟化平台?
我愿意并且能够编辑 LXC 容器的配置文件。也许有类似标签的东西稍后会在 LXC 容器本身中可见?
感谢您的帮助。
担
答案1
如果你可以访问主机和容器,则可以在两台机器上安装 lldpd(链路层发现协议守护程序)守护程序,你将能够看到:1. 哪些 lxc 正在主机上运行 2. 在每个 LXC 容器上,即托管它的服务器
运行守护进程后,需要几秒钟才能找到它的邻居,之后你可以使用lldpctl命令来显示它们
[root@LXC23 ~]# lldpctl
-------------------------------------------------------------------------------
LLDP neighbors:
-------------------------------------------------------------------------------
Interface: eth0, via: LLDP, RID: 1, Time: 0 day, 00:00:14
Chassis:
ChassisID: mac ec:a8:6b:fe:00:12
SysName: hostname.of.your.physical.machine
SysDescr: CentOS Linux 8 (Core) Linux 4.18.0-80.11.2.el8_0.x86_64 #1 SMP Tue Sep 24 11:32:19 UTC 2019 x86_64
MgmtIP: 192.168.2.150
MgmtIP: fd87:4da2:21bc:0:eea8:6bff:fefe:12
Capability: Bridge, on
Capability: Router, on
Capability: Wlan, off
Capability: Station, off
Port:
PortID: mac fe:16:3e:2d:89:1a
PortDescr: vnet0
TTL: 120
PMD autoneg: supported: no, enabled: no
MAU oper type: 10BaseTFD - UTP MAU, full duplex mode
以上管理知识产权和系统名称应该足以让您找到特定 LXC 正在哪个主机上运行。
在主机上运行相同的命令将显示有关在其上运行 lldpd 的所有 LXC 的类似信息。
或者,你可以在主机上有一个共享目录,也可以将其挂载到容器上,你可以在其中存储主机上用于 LXC 的各种信息