标签: lxc

lxc 带宽控制使用 tc

我正在尝试限制容器内的带宽。我曾尝试使用以下命令,但我认为它没有生效。

cd /sys/fs/cgroup/net_cls/
echo 0x1001 > A/net_cls.classid   # 10:1
echo 0x1002 > B/net_cls.classid   # 10:2
tc qdisc add dev eth0 root \
           handle 10: htb
tc class add dev eth0 parent 10: \
           classid 10:1 htb rate 40mbit
tc class add dev eth0 parent 10: \
           classid 10:2 htb rate 30mbit
tc filter add dev eth0 parent 10: \
           protocol ip prio 10 \
           handle 1: cgroup
Run Code Online (Sandbox Code Playgroud)

这里 A 和 B 是使用此命令创建的容器。

lxc-execute -n A -f configfile /bin/bash
lxc-execute -n …
Run Code Online (Sandbox Code Playgroud)

networking bandwidth tc bandwidth-control lxc

5
推荐指数
1
解决办法
3736
查看次数

在 LXC 中运行基于 systemd 的容器

我目前正在尝试在 Ubuntu 12.04 主机上使用 LXC 运行 Arch Linux 容器。Arch Linux 最近迁移到了systemd,根据很多地方的说法,它作为 LXC 来宾运行时存在一些问题。然而,其中许多来源已经过时了,而且我已经看到各种其他来源表明可以使用 或 之类的东西来运行基于 systemd 的lxc.autodev来宾devtmpfs

因此,我试图找出以下内容:

  1. 是否可以在 LXC 容器内运行基于 systemd 的 guest 虚拟机(截至 2013 年 2 月)?
  2. 有人有一个示例模板/配置文件与“mkarchroot”一起使用来运行吗?

当前使用 LXC 版本 0.7.5,但如果有必要,升级应该不是问题。

arch-linux lxc systemd

5
推荐指数
1
解决办法
9634
查看次数

带桥接网络的 LXC 容器向外部网络公开虚假 MAC 地址

我在 Debian 上运行 LXC 容器(lxc 0.7.2-1),桥接网络由书中配置的公共 IP 和我遇到的问题是它将假 MAC 地址从 LXC 容器暴露到外部网络,在那里它被交换机端口阻止安全性,从而防止 LXC 容器与世界通信。我在具有相同网络配置的 Ubuntu 12.04.2 LTS(lxc 0.7.5-3ubuntu67)上运行另一个 LXC 容器,但我没有任何问题,因为它不会将假 MAC 暴露给外部网络,并且所有通信都与主机的 MAC 进行。

目前我正试图找到主机之间网络配置的差异,但没有取得太大的成功。它可能是 lxc 本身的版本相关行为吗?

Debian /etc/network/interfaces

auto br0
iface br0 inet static
    bridge_ports eth0
    bridge_fd 0
    bridge_stp off
    bridge_maxwait 0
    address   y.y.y.9
    netmask   255.255.255.192
    broadcast y.y.y.63
    gateway   y.y.y.1
    pre-up iptables-restore < /etc/iptables.up.rules
Run Code Online (Sandbox Code Playgroud)

Debian LXC 网络配置

lxc.network.type = veth
lxc.network.flags = up
lxc.network.link = br0
lxc.network.hwaddr = fe:95:57:4b:b4:9b
lxc.network.ipv4 = y.y.y.12/26
Run Code Online (Sandbox Code Playgroud)

Ubuntu /etc/network/interfaces

auto br0
iface …
Run Code Online (Sandbox Code Playgroud)

networking bridge lxc

5
推荐指数
1
解决办法
5011
查看次数

在 Linux 中激活 cgroup 需要什么

我有一个 Debian 挤压内核 (linux-image-2.6.32-5-openvz-amd64),根据 Doku 应该支持 cgroups。当我查看内核配置时,确实如此(或者是否需要其他一些内核配置?)

# zgrep -i cgroup /boot/config-2.6.32-5-openvz-amd64
# CONFIG_CGROUP_SCHED is not set
CONFIG_CGROUPS=y
# CONFIG_CGROUP_DEBUG is not set
CONFIG_CGROUP_DEVICE=y
CONFIG_BLK_CGROUP=y
# CONFIG_DEBUG_BLK_CGROUP is not set
CONFIG_NET_CLS_CGROUP=y
Run Code Online (Sandbox Code Playgroud)

此外,根据http://wiki.debian.org/LXC,内核参数 cgroup_enable=memory 可能是必要的。我用它启动内核:

# cat /proc/cmdline
BOOT_IMAGE=/boot/vmlinuz-2.6.32-5-openvz-amd64 root=UUID=6332fe39-7eaa-4519-b6c1-e05808284586 ro cgroup_enable=memory quiet console=ttyS0,57600n8
Run Code Online (Sandbox Code Playgroud)

但是,系统仍然没有cgroup支持!无法挂载 cgroup 文件系统,因为系统甚至不知道文件系统类型:

# mount -t cgroup none /cgroup
mount: unknown filesystem type 'cgroup'
Run Code Online (Sandbox Code Playgroud)

和:

# grep -i cgroup /proc/filesystems
#
Run Code Online (Sandbox Code Playgroud)

所以要么有错误,要么我错过了一些东西。谁能告诉我什么?是否缺少内核参数?内核配置?

linux-kernel lxc cgroup

5
推荐指数
1
解决办法
2万
查看次数

LXC 容器性能是否取决于主机负载?

我想知道 LXC 是否可以提供一个完全隔离的基准测试环境。假设我们有 2 台相同的机器,使用相同的全新 Linux 并且没有网络连接。

第一台机器的平均负载为 50,第二台机器只有 1。

我将同一个容器放在两台机器上并运行任何程序的基准测试。

两台机器的性能会一样吗?

如果没有,您知道拥有完全隔离环境的更好方法吗?我的意思是,一种在不依赖主机平均/当前负载的情况下具有相同性能的虚拟化方式。

谢谢 :)

virtualization linux performance lxc benchmark

5
推荐指数
1
解决办法
1149
查看次数

为 lxc 容器内的文件系统设置 noatime 标志

我的主机文件系统ext4挂载了noatime标志。但是在 lxc 容器内,该标志不存在。

这是mount主机上的输出: /dev/sdb1 on /home type ext4 (rw,noatime)

mount是容器中的输出: /dev/sdb1 on / type ext4 (rw)

我现在有两个问题:

1.noatime设置在容器里有区别吗?

我的猜测是肯定的

2.noatime容器的最佳设置方式是什么?

理想情况下,我想配置这样一种方式,它总是尊重主机的文件系统标志。

更新/proc/mounts显示略有不同的条目:

rootfs / rootfs rw 0 0
/dev/sdb1 /home ext4 rw,noatime 0 0
Run Code Online (Sandbox Code Playgroud)

virtualization performance filesystems lxc

5
推荐指数
1
解决办法
607
查看次数

在同一主机上运行 LXC 和 Docker

我现在运行私人服务器一段时间,当我设置它时,我使用 LXC 将不同的服务彼此分开。

大约一个月前,我开始使用 docker(用于工作和私人),从现在开始,我想将它用于新服务(并慢慢地将旧服务迁移到它)。

长话短说:是否可以在同一台主机上同时运行 LXC 和 Docker,只要我需要一个接一个地迁移服务?

服务器运行 Debian Jessie 64 位。

lxc docker

5
推荐指数
1
解决办法
2639
查看次数

使 LXC 容器可以通过 ipv6 直接访问

首先,我有一个特殊的 IPv6 地址分配给我的专用服务器,只有 1。一个 ::1/128 一个。我可以为 eth0 分配地址(例如:::2/128、::3/128 等)。

现在我想在该服务器上运行 LXC 容器,但我希望它们成为一等公民,我希望它们拥有自己的 IPv6 地址。

带有 IPv4 的 LXC 工作正常。我可以启动一个容器,并从中 ping 世界。我有一个名为lxcbr0.

老实说,我不知道如何继续。在我的特定 LXC 配置中(“前缀”代表我分配的前缀):

lxc.network.ipv6 = prefix::3/128
lxc.network.ipv6.gateway = prefix::2 # iffy, not sure this is correct
Run Code Online (Sandbox Code Playgroud)

在主机上,我已将 sysctl 配置为使用转发:

net.ipv6.conf.default.forwarding = 1
net.ipv6.conf.eth0.forwarding = 1
Run Code Online (Sandbox Code Playgroud)

现在我迷失了方向。我我需要为网桥分配一个 IP。我已经为它分配了前缀::2/128,这是我在上面的 LXC 配置中使用的。在“界面”中:

iface lxcbr0 inet6 static
        address prefix::2
        netmask 128
        # use arp proxy? Read that somewhere. 
        post-up /sbin/ip -6 neigh add proxy prefix::3 dev eth0 …
Run Code Online (Sandbox Code Playgroud)

ubuntu routing ipv6 bridge lxc

5
推荐指数
1
解决办法
1338
查看次数

lxd 容器:像 docker 一样的端口转发

有没有办法像 docker 那样在 lxd 容器中进行端口转发?

我听到一些传言说没有简单的方法。

根据 lxd 的主页,这是他们的目标:

直观(简单、清晰的 API 和清晰的命令行体验)

对我来说,端口转发是一个重要的部分。

我不着急。如果计划在未来发布,这将是一个有效的答案。

port-forwarding containers lxc lxd

5
推荐指数
2
解决办法
5187
查看次数

无法在 Ubuntu 上使用 UFW 进行端口转发

ufw在 Ubuntu 上使用时,我试图让端口转发工作以公开 LXC 容器,但无济于事。我根据 Internet 上的指南构建了以下工作流程 ([1][2][3]);最值得注意的是,关于/etc/ufw/before.rules我看到的部分到处重复,但是......我无法让它为我工作。

如果有人遵循本指南并取得成功....请告诉我(这样我可能会先哭,然后回过头来编写我自己的防火墙工具)

重现/测试的步骤

设置

  1. 测试环境

    • 带有 NAT 和 NAT 网络接口的新 VM(我使用了 virtualbox)“host1”
      • 安装 Ubuntu 服务器 16.04 - 只需进行默认安装
    • 同一 NAT 网络上的第二个 VM 实例“host2”
  2. 在主机 1 上安装 LXC - 我正在使用普通的 LXC 进行此操作,尚未引入 LXD 设置

    • sudo lxc-create -n web -t download -- -d centos -r 7 -a amd64
    • sudo lxc-start -n web
    • sudo lxc-attach -n web
      • yum install httpd ; yum enable httpd ; yum start httpd
      • exit

我们现在假设

  • host1 上的 NAT …

port-forwarding ufw lxc

5
推荐指数
1
解决办法
3635
查看次数