對於 Linux 鏡像,cloud-init 負責 instance 的初始化工作。cloud-init 功能很強大,能做很多事情,而且我們可以通過修改配置文件靈活定制 cloud-init。
cloud-init 的配置文件為 /etc/cloud/cloud.cfg,這里舉幾個應用場景:
1. 如果希望 root 能夠直接登錄 instance(默認不允許 root 登錄),設置:
disable_root: 0
2. 如果希望能以 ssh passwod 方式登錄(默認只能通過 private key 登錄),設置:
ssh_pwauth: 1
3. 如果希望能夠修改 instance 的 hostname(默認 instance 每次重啟后 cloud-init 都會重新將 hostname 恢復成初始值),將cloud_init_modules
列表中下面兩項刪除或注釋掉:
- set_hostname
- update_hostname
instance 每次啟動 cloud-init 都會執行初始化工作,如果希望改變所有 instance 的初始化行為,則修改鏡像的 /etc/cloud/cloud.cfg 文件;如果只想改變某個 instance 的初始化行為,直接修改 instance 的 /etc/cloud/cloud.cfg。
chpasswd: list: | user1:password1 user2:password2 user3:RANDOM expire: False
例子2:
#cloud-config chpasswd: list: | root:123456 ubuntu:123456 expire: false
如果指定expire
, 並且設置為 false, 則將密碼全局配置鍵用作所有用戶帳戶的密碼。如果指定了expire
並將其設置為 true, 則用戶密碼將過期, 從而防止使用默認的系統密碼。
如果提供了list鍵, 則可以指定username:password列表。指定的用戶名必須已存在於系統中, 或者已使用 cc_users_groups 模塊創建
密碼可以使用username:RANDOM 或者 username:R生成
如果提供了RAMDOM或者R選項的話密碼會被設置為自動生成的字符串.這個密碼可以在console-log(nova console-log )或者在/var/log/cloudinit-output.log中查看.
注意:cloud-init 只有第一次啟動的時候會修改密碼,也就是說第一次安裝cloud-init,然后配置/etc/cloud/cloud.cfg,關機清理信息。再開機會強行修改密碼。
接着再開機不會強行修改密碼,即使刪除cloud-init再重裝配置也不行。
下面是cloud.cfg的一個例子:
users: - default disable_root: 0 ssh_pwauth: 1 locale_configfile: /etc/sysconfig/i18n mount_default_fields: [~, ~, 'auto', 'defaults,nofail', '0', '2'] resize_rootfs_tmp: /dev ssh_deletekeys: 0 ssh_genkeytypes: ~ syslog_fix_perms: ~ cloud_init_modules: - migrator - bootcmd - write-files - growpart - resizefs - set_hostname - update_hostname - update_etc_hosts - rsyslog - users-groups - ssh cloud_config_modules: - mounts - locale - set-passwords - yum-add-repo - package-update-upgrade-install - timezone - puppet - chef - salt-minion - mcollective - disable-ec2-metadata - runcmd cloud_final_modules: - rightscale_userdata - scripts-per-once - scripts-per-boot - scripts-per-instance - scripts-user - ssh-authkey-fingerprints - keys-to-console - phone-home - final-message system_info: default_user: name: root lock_passwd: true gecos: Cloud User groups: [wheel, adm] sudo: ["ALL=(ALL) NOPASSWD:ALL"] shell: /bin/bash distro: rhel paths: cloud_dir: /var/lib/cloud templates_dir: /etc/cloud/templates ssh_svcname: sshd # vim:syntax=yaml chpasswd: list: | root:123456 expire: true
注意:
1.如果鏡像沒有設置cloud_init,即使在計算節點的 /etc/nova/nova.conf 中配置 force_config_drive = true,也不會調用元數據信息
2.如果鏡像設置了cloud_init,在計算節點的 /etc/nova/nova.conf 中沒有配置 force_config_drive = true,依然會調用元數據信息,
而此時因為不知道怎么去調,所以會有一些報錯信息,這樣會導致開機比較久,而且每次開機都會讀取元數據信息
提醒和解決方法:
如果之前的鏡像是沒有安裝cloud-init,這時會有這種情況出現:
1.在/etc/nova/nova.conf中沒有配置force_config_drive = true的計算節點中的機器,任何操作都是正常的;
即使在計算節點的 /etc/nova/nova.conf 中配置 force_config_drive = true,也不會調用元數據信息
2.這時通過rbd ls vms查看的所有虛擬機是這樣子的:
4ff497bd-cd3c-4b8e-a607-40b08ba90ce1_disk
但是如果之后的鏡像安裝了cloud-init,則會出現這種情況:
1.在/etc/nova/nova.conf中配置了force_config_drive = true,那么之前用沒有安裝cloud-init的鏡像安裝的這些虛擬機
一旦重啟就會變成ERROR 或者NOSTATE狀態。
原因:
這時通過rbd ls vms查看的所有虛擬機是這樣子的
4ff497bd-cd3c-4b8e-a607-40b08ba90ce1_disk
4ff497bd-cd3c-4b8e-a607-40b08ba90ce1_disk_config
並且讀取的是4ff497bd-cd3c-4b8e-a607-40b08ba90ce1_disk_config文件
2.如果鏡像設置了cloud_init,在計算節點的 /etc/nova/nova.conf 中沒有配置 force_config_drive = true,依然會調用元數據信息,
而此時因為不知道怎么去調,所以會有一些報錯信息,這樣會導致開機比較久,而且每次開機都會讀取元數據信息
解決:
1.修改數據庫,然后關閉虛擬機再開機
推薦:
1.如果之前/etc/nova/nova.conf沒有force_config_drive = true選項,則建議不要安裝cloud_init;否則會出現各種奇怪的問題
有朋友說:突然多出的4ff497bd-cd3c-4b8e-a607-40b08ba90ce1_disk_config文件是因為遷移導致的,可能跟force_config_drive無關;
但是沒有實驗證明。
參考:http://www.cnblogs.com/CloudMan6/p/6431771.html
https://www.2cto.com/net/201708/667502.html