AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题

问题[lxd](server)

Martin Hope
shawty
Asked: 2021-10-30 01:44:46 +0800 CST

如何在 cloud-init 脚本中下载和安装常规 DPKG 包?

  • 1

我正在使用 LXD/LXC 在 Linux 主机上构建轻量级容器。

这些容器的唯一目的是托管“Dotnet 和 Dotnet 核心应用程序”

有一段时间我一直在使用 Ansible,但最近我发现我实际上可以将一个 init 脚本嵌入到容器配置的用户数据中,然后 cloud-init 会执行它。

这很棒,并且允许我设置一个给定的容器,其中包含它需要的包,除了一个问题。

微软

(我知道,我知道......保存笑话和诽谤:-D)

与大多数第 3 方软件包提供商不同,MS 将其全部添加的 deb 源和 GPG 密钥打包在一个独立的 dpkg 软件包文件中,该软件包文件未通过普通 repos 列出,因此基本上必须“wget”下载然后安装使用常规的 dpkg 命令。

现在,这就是我做事的方式:

#cloud-config

# apply updates using apt
package_update: true
package_upgrade: true

# set hostname
hostname: ****
fqdn: ****
manage_etc_hosts: true

# Install 3rd party software repos
# NOTE: This is done using run command due to the way microsoft distribute things using a raw dpkg
runcmd:
  - [wget, "https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb", -O, /root/packages-microsoft-prod.deb]
  - dpkg -i /root/packages-microsoft-prod.deb
  - rm /root/packages-microsoft-prod.deb
  - apt update
  - apt-get install dotnet-sdk-3.1 -y
  - apt-get install dotnet-sdk-5.0 -y

# Install standard packages
packages:
  - apt-transport-https
  - python3
  - python-is-python3
  - mc
  - gnupg
  - nginx
  - git

# Add users
users:
  - name: ****
    ssh-authorized-keys:
      - ssh-rsa **** rsa-key-BLAH
    sudo: ['****']
    groups: sudo
    shell: /bin/bash

final_message:
  - "Container initialisation complete."

关键部分是“runcmd”部分。

因为我使用的是“runcmd”,所以它在其他所有内容之后运行,包括我放入所有需要使用的标准包的正常包安装部分。

我最喜欢做的是安装 dpkg 文件,然后只需将要安装的包名称添加到普通包部分,例如

# Something here to download and install the dpkg

# Install standard packages
packages:
  - apt-transport-https
  - python3
  - python-is-python3
  - mc
  - gnupg
  - nginx
  - git
  - dotnet-sdk-3.1
  - dotnet-sdk-5.0

我确实尝试只将那个位放在 runcmd 中,但因为它作为最后一步运行,它会导致包部分失败,因为没有安装 dotnet 的 repo。

我还尝试使用“Apt”模块,将“microsoft-prod.list”安装到“/etc/apt/sources.list.d”中,但这也失败了,因为 MS 没有发布他们的 GPG 密钥,另外由于它是不受信任的源,因此在执行 apt 更新时,源会导致失败。

我已经搜索了 cloud-init 的模块文档,但我找不到任何似乎表明可以下载和添加常规 dpkg 文件的内容,因此我在这里问:-)

apt dpkg cloud-init lxd lxc
  • 2 个回答
  • 766 Views
Martin Hope
Journeyman Geek
Asked: 2021-09-23 23:07:34 +0800 CST

如何从 LXD 容器中引用 'LXD 主机

  • 1

我们目前在一系列 LXD 容器中运行我们的服务 - 我们有一个运行 nginx 服务器作为反向代理,指向每个服务,并且我需要从主机或另一个容器连接到容器,我使用分配的 LXD主机名。它工作得很好,而且非常干净。

我目前正在考虑设置grafana以在容器中进行监视,并在主机中的 prometheus 实例中挂钩以向其提供数据。能够通过主机名引用 LXD 主机可能会有所帮助——就像我为这个项目和其他项目的容器所做的那样。从容器上运行的服务中引用主机的“正确”方式是什么?

lxd
  • 1 个回答
  • 43 Views
Martin Hope
simonw
Asked: 2021-09-22 07:14:09 +0800 CST

LXD on ZFS on LVM on H/W RAID 10

  • 1

我有一台带有 PERC H730P 的戴尔 R540,在 12 个磁盘上运行 RAID 10,大约 22TB。我想在 LXD 容器中运行各种应用程序/服务。

我知道 ZFS 更适合 LXC 存储池,而 ZFS 更喜欢直接访问原始磁盘。

我天真的方法是在硬件 RAID 上使用 LVM 配置 Ubuntu,并让 LXD 使用默认设置(LVM 上的 EXT4 上的 ZFS.img ...)初始化。我的阅读是,这将“正常工作”,但不是最佳性能/保护方面。

有人可以提供一些指导吗?谢谢!

lvm raid zfs lxd lxc
  • 1 个回答
  • 131 Views
Martin Hope
ICIM
Asked: 2021-07-24 00:34:02 +0800 CST

lxc 发送文件或副本

  • 0

我正在尝试用 lxc 复制文件,现在我已经绝望了。以下是我尝试过的一些命令:

#temp=$(cat 2.sh)
#lxc-attach -n containerName echo $temp > /root/2.sh
#lxc-attach -n containerName cat /root/2.sh
->

#temp=$(cat 2.sh)
#lxc-attach -n containerName -- bash -c 'echo $temp > /root/2.sh'
#lxc-attach -n containerName cat /root/2.sh
->

#lxc-attach -n containerName -- bash -c 'echo $(cat 2.sh) > /root/2.sh'
->cat: 2.sh: No such file or directory

#lxc-attach -n containerName -- bash -c 'echo "$(cat 2.sh)" > /root/2.sh'
->cat: 2.sh: No such file or directory


#lxc file push 2.sh containerName/root/
->Error: not found

是->输出

容器是用构建的lxc-,不会出现在lxc list列表中,而是出现在lxc-ls列表中。

欢迎任何帮助

bash lxd
  • 2 个回答
  • 497 Views
Martin Hope
user1801810
Asked: 2021-03-31 09:17:59 +0800 CST

LXD 容器 IPv4 接口管理

  • 0

Ubuntu 18.04.4
lxd 3.0.3
lxc 3.0.3

我已经有几个容器运行了很长时间没有问题。今天我正在对我的网络进行更改,其中一个容器获取了一个 DHCP 地址。

user@localhost:/tmp$ sudo lxc list host_a
+-----------------------+---------+--------------------------+------+------------+-----------+
|         NAME          |  STATE  |           IPV4           | IPV6 |    TYPE    | SNAPSHOTS |
+-----------------------+---------+--------------------------+------+------------+-----------+
| host_a                | RUNNING | 192.168.112.5 (vlan112)  |      | PERSISTENT | 3         |
|                       |         | 192.168.11.8 (eth0)      |      |            |           |
|                       |         | 192.168.11.193 (eth0)    |      |            |           |
+-----------------------+---------+--------------------------+------+------------+-----------+

接口 192.168.112.5 和 192.168.11.8 是原始接口,一直存在,需要保留。接口192.168.11.193是今天网络变化时出现的接口,我找不到删除。我在容器中找不到它,我不知道如何通过 lxc 将其删除。我求助于重新启动容器和 lxd 主机,但它仍然存在。

virtualization linux-networking containers lxd lxc
  • 1 个回答
  • 64 Views
Martin Hope
Mishgun_
Asked: 2021-01-11 09:33:46 +0800 CST

通过 OpenVPN 接口路由 Tinyproxy 传出连接

  • 0

我创建了一个 Ubuntu 16.04 lxd 容器并在其中设置了 Stunnel、Tinyproxy 和 OpenVPN 客户端。

目标是通过 Stunnel 连接到 Tinyproxy,并强制 Tinyproxy 使用 OpenVPN 的接口进行传出连接。

Stunnel -> Tinyproxy 工作正常 - 浏览器中的页面按预期加载,但是,一旦我启动 OpenVPN 服务,客户端的 Stunnel 就会因超时而失败,并且浏览器会一直等待响应。

由于 Tinyproxy 1.8.3(ubuntu 16.04 的最新版本)不支持将传出连接绑定到特定接口的选项,我不得不让 OpenVPN 通过其tun0接口添加默认路由。

OpenVPN 客户端作为 expexted 工作 - 来自容器的所有数据包都通过 VPN。带有容器的主机是具有公共 IP 的远程主机。DNAT 已设置到容器中。

我不太熟悉路由内部结构,我只能设置 SNAT/DNAT 并使用 iptables 进行过滤。因此,我无法理解问题的根源。

以下是环境中最重要的参数:

如果配置

$ ifconfig -a
eth0      Link encap:Ethernet  HWaddr 00:16:3e:5f:46:ba
          inet addr:10.227.60.197  Bcast:10.227.60.255  Mask:255.255.255.0
          inet6 addr: fe80::216:3eff:fe5f:46ba/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:16291 errors:0 dropped:0 overruns:0 frame:0
          TX packets:15632 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:5044056 (5.0 MB)  TX bytes:4171187 (4.1 MB)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:2446 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2446 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1
          RX bytes:2483699 (2.4 MB)  TX bytes:2483699 (2.4 MB)

tun0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
          inet addr:10.8.0.3  P-t-P:10.8.0.3  Mask:255.255.255.0
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:3 errors:0 dropped:0 overruns:0 frame:0
          TX packets:3 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:500
          RX bytes:252 (252.0 B)  TX bytes:252 (252.0 B)

路线

$ route -v -e
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
default         10.8.0.1        128.0.0.0       UG        0 0          0 tun0
default         10.227.60.1     0.0.0.0         UG        0 0          0 eth0
10.8.0.0        *               255.255.255.0   U         0 0          0 tun0
10.227.60.0     *               255.255.255.0   U         0 0          0 eth0
128.0.0.0       10.8.0.1        128.0.0.0       UG        0 0          0 tun0
<vpn server IP> 10.227.60.1     255.255.255.255 UGH       0 0          0 eth0

stunnel.con

...
accept = 10.227.60.197:8081
connect = 127.0.0.1:8080
...

tinyproxy.conf

...
Port 8080
Listen 127.0.0.1
...

vpnclient.conf

dev tun
proto udp
remote <vpn server ip> 1195
resolv-retry infinite
nobind
persist-key
persist-tun
remote-cert-tls server
auth SHA512
cipher AES-256-CBC
key-direction 1
verb 3
#route-nopull 
...

iptables是空的。

ubuntu openvpn lxd stunnel tinyproxy
  • 1 个回答
  • 741 Views
Martin Hope
Łukasz Zaroda
Asked: 2020-12-24 13:10:23 +0800 CST

在“路由”模式下设置的 LXC 容器中没有网络连接

  • 4

我在 Vagrant 中尝试使用 lxc/lxd,但我对它很陌生。我设法创建了正在运行的容器,但我无法从其中 ping 任何东西(包括 8.8.8.8)。我可以从我的顶级非虚拟系统 ping 它的 IP,但它拒绝 SSH 连接。我只能使用直接从容器的主机(Vagrant)直接进入容器lxc exec my-container /bin/bash。

routed出于学习目的,我尝试在该模式下设置我的容器,但我仍然想要它。不过,LXD/LXC 文档似乎有些欠缺。

我尝试按照以下说明操作:https ://blog.simos.info/how-to-get-lxd-containers-get-ip-from-the-lan-with-routed-network/但它不起作用我到底。我可能会错过一些东西,因为我还不精通 linux 网络。

我的 Vagrant 主机正在运行Ubuntu 20.04。

我的 LXC 容器正在运行Debian 10。

我的 Vagrant 主机上的 LXC 配置:

config:
  core.https_address: '[::]:8443'
  core.trust_password: true
networks: []
storage_pools:
- config:
    source: /home/luken/lxd-storage-pools
  description: ""
  name: default
  driver: dir
profiles:
- name: default
  config: {}
  description: ""
  devices:
    root:
      path: /
      pool: default
      type: disk
- name: mail-server
  config:
    user.network-config: |
      version: 2
      ethernets:
        eth0:
          addresses:
          - 192.168.33.11/32
          nameservers:
            addresses:
            - 8.8.8.8
            search: []
          routes:
          -   to: 0.0.0.0/0
            via: 169.254.0.1
  description: Mail Server LXD profile
  devices:
    eth0:
      ipv4.address: 192.168.33.11
      nictype: routed
      parent: eth1
      type: nic
cluster: null

ip addr在我的流浪主机中:

luken@luken-tech-test:~$ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 08:00:27:be:4a:e8 brd ff:ff:ff:ff:ff:ff
    inet 10.0.2.15/24 brd 10.0.2.255 scope global dynamic eth0
       valid_lft 76347sec preferred_lft 76347sec
    inet6 fe80::a00:27ff:febe:4ae8/64 scope link 
       valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 08:00:27:65:e6:28 brd ff:ff:ff:ff:ff:ff
    inet 192.168.33.2/24 brd 192.168.33.255 scope global eth1
       valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:fe65:e628/64 scope link 
       valid_lft forever preferred_lft forever
6: vetha8400046@if2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether fe:48:28:3e:e4:fa brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 169.254.0.1/32 scope global vetha8400046
       valid_lft forever preferred_lft forever
    inet6 fe80::fc48:28ff:fe3e:e4fa/64 scope link 
       valid_lft forever preferred_lft forever

ip addr在我的容器中:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0@if6: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 9a:14:96:30:67:43 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 192.168.33.11/32 brd 255.255.255.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::9814:96ff:fe30:6743/64 scope link 
       valid_lft forever preferred_lft forever

ip r在我的流浪主机中:

default via 10.0.2.2 dev eth0 proto dhcp src 10.0.2.15 metric 100 
10.0.2.0/24 dev eth0 proto kernel scope link src 10.0.2.15 
10.0.2.2 dev eth0 proto dhcp scope link src 10.0.2.15 metric 100 
192.168.33.0/24 dev eth1 proto kernel scope link src 192.168.33.2 
192.168.33.11 dev vetha8400046 scope link

ip r在我的容器中:

default via 169.254.0.1 dev eth0 
169.254.0.1 dev eth0 scope link

有什么我错过的吗(可能很多)?

networking linux-networking lxd lxc
  • 2 个回答
  • 3317 Views
Martin Hope
Jesús Ángel
Asked: 2020-10-08 06:32:44 +0800 CST

在 exim LXD 容器中获取客户端 IP

  • 0

我使用 LXD 在 Debian 10 容器中设置了一个 exim 服务器,然后创建了一个代理设备来将 SMTP 端口从主机映射到容器:

lxc config device add mycontainer myport25 proxy listen=tcp:x.x.x.x:25 connect=tcp:127.0.0.1:25

其中 xxxx 是主机的公共 IP。

端口转发工作正常,但正如我所料,exim 日志显示的是本地 IP 而不是远程服务器的。例如:

2020-10-07 13:45:40 1kQ7t6-0008P1-3M <= [email protected] H=localhost (server.remote.domain.com) [127.0.0.1] P=esmtps X=TLS1.0:RSA_AES_256_CBC_SHA1:256 CV=no S=14259 [email protected]

2020-10-07 13:45:40 1kQ7t6-0008P1-3M => |/usr/local/bin/script.php [email protected] R=myrouter T=myrouter_pipe 2020-10-07 13:45: 40 1kQ7t6-0008P1-3M 完成

是否可以让 exim 在日志中显示转发的 IP 而不是 127.0.0.1?

我阅读了https://www.exim.org/exim-html-current/doc/html/spec_html/ch-proxies.html但如果我使用 hosts_proxy 选项,我的服务器会拒绝传入的电子邮件并出现以下错误:“503 命令被拒绝,所需的代理协商失败”。

我知道我可以使用主机中的普通 iptables 和容器的私有 IP 转发端口,但我想知道是否可以使用 LXD 的代理功能来实现。

问候,

proxy exim lxd
  • 1 个回答
  • 94 Views
Martin Hope
Ivan Ogai
Asked: 2017-07-02 07:09:54 +0800 CST

在 mdadm RAID 1 阵列下限制 LXD 容器上的磁盘 IO

  • 1

在一个在 mdadm RAID 1 阵列上有两个磁盘的主机上运行的容器上,我尝试使用以下命令限制名为ci的 LXD 容器的磁盘 IO,但没有成功:

lxc config device set ci root limits.read  30MB
lxc config device set ci root limits.write 10MB

但是,在容器上运行例如此命令时:

dd if=/dev/zero of=/root/testfile bs=1G count=10 oflag=direct

结果是磁盘的整个容量,大约130MB/s ,而不是写入操作的预期结果大约10MB/s :

10737418240 bytes (11 GB, 10 GiB) copied, 81,3877 s, 132 MB/s

这也可以通过atop在主机上运行来确认:

在此处输入图像描述

如何有效限制容器的磁盘 IO,使其无论发生什么事情,主机磁盘性能都不会过度使用?

在第二次测试中,我在客户机和主机上同时运行与上述相同的dd命令,但主机也没有优先级:

在此处输入图像描述

一些附加信息:

  • 主机和访客都是 Ubuntu 16.04
  • 服务器有两个分区相等的硬盘,加入 RAID 1 阵列
  • 在最大的 RAID 阵列之上,根文件系统安装在 LVM 卷组上

    root@server ~ # lvs
    LV   VG   Attr       LSize
    root vg0  -wi-ao---- 2,72t
    swap vg0  -wi-ao---- 4,00g
    
  • LXD 存储后端是dir

如果这有助于限制容器的磁盘 IO,我可以对磁盘进行不同的分区,例如,拥有一个专用于 LXD 的 ZFS 的 RAID 阵列。那会有帮助吗?

lxd
  • 1 个回答
  • 345 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve