А именно, с инструментами CLI - не OpenStack.
Я смотрю на то, что локальный dev устанавливают с lxd, мог бы быть похожим, но подхожу пустой врученный когда дело доходит до конфигурирования новых контейнеров.
Действительно ли там кто-либо идиоматичен (или иначе) способы настроить lxd контейнеры? Я должен смотреть на что-то более неизменное как изображения докера?
Спасибо. Любые ресурсы или указатели ценились бы.
Один лайнер я пошел с сегодня, эти наборы это в профиле по умолчанию для новых контейнеров:
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 -
Таким образом, существует несколько путей, можно сделать так, любой непосредственно для контейнера:
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
У меня был немного более конкретный вопрос, чем 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