Red Hat Enterprise Linux Atomic Host使用cloud-init在安装和首次启动期间配置系统。最初开发Cloud-init是为了提供云实例的早期初始化。在Red Hat Enterprise Linux Atomic Host中,它还可用于虚拟机安装。
cloud-init使用的文件是YAML格式的文件。
注意:cloud-init仅在第一次启动计算机时运行。如果cloud-init由于文件中的语法错误或者缺少必需的指令(例如用户凭据)而失败,则必须重新创建并启动新实例。一个启动失败的实例将无法正常工作。
以下是如何使用cloud-init执行常见任务的一些示例。
要使用cloud-init创建用户,您必须创建两个文件:meta-data和user-data,然后将它们打包到ISO映像中。
创建一个目录:
$ mkdir cloudinitiso
$ cd cloudinitiso
创建一个名为meta-data的文件,添加以下内容
instance-id: Atomic0
local-hostname: atomic-00
创建一个名为user-data的文件,添加以下内容
#cloud-config
password: atomic
chpasswd: {expire: False}
ssh_pwauth: True
ssh_authorized_keys:
- ssh-rsa AAA...SDvZ [email protected]
上面的user-data文件的最后一行是SSH公钥。SSH公钥可以在〜/ .ssh / id_rsa.pub中找到。
创建包含meta-data 和user-data的ISO映像
# genisoimage -output atomic0cidata.iso -volid cidata -joliet -rock user-data meta-data
生成 名为atomic0cidata.iso的文件。将此文件附加到您计划安装Red Hat Enterprise Linux Atomic Host的计算机上,您的用户名将为“cloud-user”,密码将为“atomic”。
强制“cloud-user”在第一次登录时更改其密码,将user-data文件中的chpasswd: {expire: False}改为chpasswd: {expire: True}。这是一个全局设置。如果将此项设置为True,则所有创建的用户都必须更改其密码。
#cloud-config
password: atomic
chpasswd: {expire: True}
ssh_pwauth: True
ssh_authorized_keys:
- ssh-rsa AAA...SDvz [email protected]
- ssh-rsa AAB...QTuo [email protected]
要将默认用户名从cloud-user更改为其他用户,请将user: username添加到用户数据文件中:
#cloud-config
user: username
password: atomic
chpasswd: {expire: False}
ssh_pwauth: True
ssh_authorized_keys:
- ssh-rsa AAA...SDvz [email protected]
- ssh-rsa AAB...QTuo [email protected]
要设置root密码,必须在user-data文件的chpasswd部分中创建用户列表。列表的格式如下所示。空格很重要,因此不要在冒号(:)的任何一侧包含任何空格,因为它会设置一个带有空格的密码。如果使用此方法设置用户密码,则必须在此部分中设置所有密码。这意味着password:必须从顶部移动到此部分。
#cloud-config
ssh_pwauth: True
ssh_authorized_keys:
- ssh-rsa AAA...SDvz [email protected]
- ssh-rsa AAB...QTuo [email protected]
chpasswd:
list: |
root:password
cloud-user:atomic
expire: False
在user-data文件的users部分中创建和描述用户。添加此部分也需要在此处设置默认用户的选项。
如果users部分中的第一个条目是default默认用户,则将与其他用户一起创建cloud-user。如果省略默认行,则不会创建cloud-user。默认情况下,如果没有selinux-user值,用户将被标记为unconfined_u
#cloud-config
users:
- default
- name: foobar
gecos: User N. Ame
selinux-user: staff_u
groups: users,wheel
ssh_pwauth: True
ssh_authorized_keys:
- ssh-rsa AA..vz [email protected]
chpasswd:
list: |
root:password
cloud-user:atomic
foobar:foobar
expire: False
user-data文件 的runcmd和bootcmd部分可用于在启动和初始化期间执行任意命令。该部分在inti过程的早期运行,在init结束时执行。这些命令不会保存用于将来的引导,只会在第一次初始化引导期间执行。
#cloud-config
users:
- default
- name: foobar
gecos: User N. Ame
groups: users
chpasswd:
list: |
root:password
fedora:atomic
foobar:foobar
expire: False
bootcmd:
- echo New MOTD >> /etc/motd
runcmd:
- echo New MOTD2 >> /etc/motd
通过向user-data文件的users部分添加sudo和groups条目,可以将用户配置为sudoer,如下所示。
#cloud-config
users:
- default
- name: foobar
gecos: User D. Two
sudo: ["ALL=(ALL) NOPASSWD:ALL"]
groups: wheel,adm,systemd-journal
ssh_pwauth: True
ssh_authorized_keys:
- ssh-rsa AA...vz [email protected]
chpasswd:
list: |
root:password
cloud-user:atomic
foobar:foobar
expire: False
将一个network-interfaces部分添加到meta-data文件中。本节包含常用的网络配置选项集。
由于cloud-init 中存在当前错误,因此不会自动启动静态网络配置。而是默认的DHCP配置保持活动状态。建议的解决方法是通过bootcmd指令手动停止和重新启动网络接口。
network-interfaces: |
iface eth0 inet static
address 192.168.1.10
network 192.168.1.0
netmask 255.255.255.0
broadcast 192.168.1.255
gateway 192.168.1.254
bootcmd:
- ifdown eth0
- ifup eth0
要仅创建root用户,请在user-data文件的users部分中为root创建一个条目。
users:
- name: root
chpasswd:
list: |
root:password
expire: False
您可以为root用户设置SSH密钥,如下所示:
users:
- name: root
ssh_pwauth: True
ssh_authorized_keys:
- ssh-rsa AA..vz [email protected]
要将根逻辑卷的大小设置为6GB(例如,而不是默认的3GB),请在user-data中使用该指令write_files:
write_files:
- path: /etc/sysconfig/docker-storage-setup
permissions: 0644
owner: root
content: |
ROOT_SIZE=6G
overlay2通过容器存储设置启用。使用runcmd指令将STORAGE_DRIVER选项更改为“overlay2”:
runcmd:
- echo "STORAGE_DRIVER=overlay2" >> /etc/sysconfig/docker-storage-setup