通过 ssh 连接时识别 lxc 容器的主机

通过 ssh 连接时识别 lxc 容器的主机

我有很多服务器(>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 的各种信息

相关内容