Благодаря поддержки cloud-init мы можем выполнить первоначальную настройку контейнера. Добавить пользователя, сконфигурировать сеть, установить дополнительные пакеты и т.д.
Для первоначальной настройки контейнера просто добавляем сценарии cloud-init в профиль. Что сделано в моём примере:
- настроена сеть со статическим IP
- добавлен пользователь cloud-user с правами sudo
- установлен пакет openssh-server
- при загрузке сервера, настройки сети переписываются из этой конфигурации
Получить хеш пароля
apt install whois -y
mkpasswd --method=SHA-512 YouSecretPassword
Итоговый профиль. Настройки сети для Ubuntu (Netplan). Для других дистрибутивов настройка отличается.
config:
cloud-init.network-config: |-
network:
version: 2
ethernets:
eth0:
dhcp4: false
addresses:
- 192.168.1.103/32
routes:
- to: 0.0.0.0/0
via: 169.254.0.1
on-link: true
nameservers:
addresses:
- 192.168.1.1
cloud-init.user-data: |-
#cloud-config
users:
- default
system_info:
default_user:
name: cloud-user
sudo: ALL=(ALL) NOPASSWD:ALL
shell: /bin/bash
passwd: $6$EJuXZnciXclC3mNn$BpNAqvRwzNBCzCMKFMN.wV9UerDyDJ7UHTE3kJnG4kxYiJCE8WVYl0IdYdQ/dW4CxT39xYnsA/VlAplrdyi550
lock_passwd: false
ssh_pwauth: true
packages:
- openssh-server
updates:
network:
when: ['boot']
description: Demo 103 profile
devices:
eth0:
ipv4.address: 192.168.1.103
name: eth0
nictype: routed
parent: enp0s3
type: nic
root:
path: /
pool: default
type: disk
name: demo-103
Конечно это далеко не все возможности cloud-init. В своих проектах ограничиваюсь этим.