Существует ли способ настроить lxd контейнеры с облачной конфигурацией во время условия?

А именно, с инструментами CLI - не OpenStack.

Я смотрю на то, что локальный dev устанавливают с lxd, мог бы быть похожим, но подхожу пустой врученный когда дело доходит до конфигурирования новых контейнеров.

Действительно ли там кто-либо идиоматичен (или иначе) способы настроить lxd контейнеры? Я должен смотреть на что-то более неизменное как изображения докера?

Спасибо. Любые ресурсы или указатели ценились бы.

10
задан 3 May 2015 в 14:24

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
ответ дан 23 November 2019 в 04:24

Таким образом, существует несколько путей, можно сделать так, любой непосредственно для контейнера:

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
12
ответ дан 23 November 2019 в 04:24

У меня был немного более конкретный вопрос, чем OP, но он взял меня некоторое время для разработки то, что я делал неправильно. Я думал, что отправлю его здесь для помощи кому-либо еще так же озадачиваемому.

Я хотел статические сетевые настройки для контейнера Ubuntu 16.04 LXC/LXD, размещенного на Ubuntu 16.04. Я запустил путем попытки того, что записал Stéphane, но это не работало. Все, с чем я закончил, было делающим попытку DHCP контейнером по умолчанию с локальной ссылкой IPv6, поскольку нет никакого DHCP, подаваемого в моей конфигурации.

Мой начальный YAML выглядел (что-то) как следующее (взятым из облачных-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

Только когда я нашел документацию Stéphane в источнике LXC/LXD, я понял, что должен был загрузить то значение в 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-config; и один, чтобы другая конфигурация загрузилась в user.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" Это содержание является данными "облачной конфигурации". Посмотрите примеры для прокомментированного примера поддерживаемых форматов конфигурации.

Я не полагаю, что эта документация является очень четкой. Я не мог заставить ничего работать с помощью "Типа контента: text/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
3
ответ дан 23 November 2019 в 04:24

Другие вопросы по тегам:

Похожие вопросы: