有没有办法在供应时使用云配置来配置lxd容器?


10

具体来说,使用CLI工具-不是openstack。

我正在查看使用lxd进行本地开发的安装程序,但在配置新容器时却空手而归。

是否有任何惯用的(或其他方式)配置lxd容器的方法?我应该看看更不变的东西,例如docker images吗?

谢谢。任何资源或指针,将不胜感激。

Answers:


13

因此,您可以通过多种方式直接针对容器进行操作:

lxc init ubuntu: CONTAINER
lxc config set CONTAINER user.user-data - < cloud-init-config.yml
lxc start CONTAINER

甚至更短:

lxc launch ubuntu: CONTAINER --config=user.user-data="$(cat cloud-init-config.yml)"

或通过个人资料:

lxc profile create dev
lxc profile set dev user.user-data - < cloud-init-config.yml
lxc launch ubuntu: CONTAINER -p default -p dev

如何使用.sh文件代替.yml?是否已有关于此主题的教程?
格雷格

上面是参考这个问题的:stackoverflow.com/questions/44456522
Greg

3

我今天使用的一种衬板,此衬板将其设置在新容器的默认配置文件中:

echo -e "#cloud-config\nssh_authorized_keys:\n - $(cat ~/.ssh/id_rsa.pub)" | lxc profile set default user.user-data -

这将它设置在现有容器中,但是请注意,它将不能在已经启动的容器上工作,因为SSH密钥仅在首次启动时完成:

echo -e "#cloud-config\nssh_authorized_keys:\n - $(cat ~/.ssh/id_rsa.pub)" | lxc config set CONTAINER_NAME user.user-data -


3

我有一个比操作问题更具体的问题,但是花了我一段时间才能弄清楚我做错了什么。我以为我会在这里发布它,以帮助其他任何人也遇到类似的问题。

我想要在Ubuntu 16.04上托管的LXC / LXD Ubuntu 16.04容器的静态网络设置。我首先尝试了Stéphane 编写的内容,但是没有用。我最终得到的是带有本地IPv6链接的默认DHCP尝试容器,因为在我的配置中没有DHCP服务。

我最初的YAML看起来(类似)如下(摘自cloud-init文档)。

network:
  version: 1
  config:
    - type: physical
      name: eth0
      subnets:
        - type: static
          address: 192.168.23.14/27
          gateway: 192.168.23.1
          dns_nameservers:
            - 192.168.23.2
            - 8.8.8.8
          dns_search:
            - exemplary.maas

user.user-data如上所述,我正在将其加载到其中。

lxc config set CONTAINER user.user-data - < CONTAINER.cloud-init-config.yml

直到我在LXC / LXD源代码中找到Stéphane的文档后,我才意识到我需要将该值加载到中user.network-config

所以我的最终YAML看起来(这样)。

version: 1
config:
  - type: physical
    name: eth0
    subnets:
      - type: static
        address: 192.168.23.14/27
        gateway: 192.168.23.1
        dns_nameservers:
          - 192.168.23.2
          - 8.8.8.8
        dns_search:
          - exemplary.maas

然后,我将其加载到其中user.network-config

lxc config set CONTAINER user.network-config - < CONTAINER.network-config.yaml

看来我需要在每个容器中保留两个不同的文件:一个供网络设置加载到user.network-configuser.user-data除非我能找到一种对所有内容使用单个文件的方法,否则将其他配置加载到其中。


我发现对我一点都不明显的另一个问题是试图自动配置非网络组件。

lxc config set CONTAINER user.user-data - < CONTAINER.user-data.yaml

上面的命令所应用的以下YAML(尽管使用看起来正确lxc config show CONTAINER)没有在我的容器内创建任何内容。

write_files:
  - content: |
    # My new /etc/foo.bar file

    Foo
    Bar

    path: /etc/foo.bar

用户数据输入格式(第5项:云配置数据)中隐藏的线索如下:

"#cloud-config"或开头。"Content-Type: text/cloud-config" 此内容为“ cloud-config”数据。有关支持的配置格式的注释示例,请参见示例。

我认为此文档不够清楚。使用“ Content-Type:文本/ cloud-config”表单无法正常工作,但我发现如果您放在#cloud-config第一行,就可以解析YAML。我只能假设我的理解或某人的编程不太正确。对我来说,没有任何意义将您已明确加载为键值的YAML user.user-data用作云配置数据以外的任何其他内容。否则为什么会有人这样做,如果它并不意味着是云的结构,所以为什么会评论(它甚至不使用正常的家当语法)被要求

因此,废话不说,起作用的语法user.user-data是:

#cloud-config

write_files:
  - content: |
      # My new /etc/foo.bar file

      Foo
      Bar

    path: /etc/foo.bar
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.