cloud-init使用技巧


 

對於 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。

 

 

 

 
Set Passwords:
 
例子1:
 
          
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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM