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執行常見任務的一些示例。
1.如何使用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”。
2.如何使用戶首次登錄時必須更改密碼?
強制“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]
3.如何更改默認用戶名?
要將默認用戶名從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]
4.如何設置root密碼?
要設置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
5.如何添加更多用戶?
在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
6.如何運行第一個啓動命令?
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
7.如何添加額外的sudoers?
通過向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
8.如何設置靜態網絡配置?
將一個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
9.如何只創建root用戶?
要僅創建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]
10.如何設置根邏輯卷大小?
要將根邏輯卷的大小設置爲6GB(例如,而不是默認的3GB),請在user-data中使用該指令write_files:
write_files:
- path: /etc/sysconfig/docker-storage-setup
permissions: 0644
owner: root
content: |
ROOT_SIZE=6G
11.如何啓用overlay2驅動程序?
overlay2通過容器存儲設置啓用。使用runcmd指令將STORAGE_DRIVER選項更改爲“overlay2”:
runcmd:
- echo "STORAGE_DRIVER=overlay2" >> /etc/sysconfig/docker-storage-setup