cloud init使用技巧

2022-05-30 23:06:08 字數 4574 閱讀 9295

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

0ssh_pwauth:

1locale_configfile: /etc/sysconfig/i18n

mount_default_fields: [~, ~, '

auto

', '

defaults,nofail

', '

0', '2'

]resize_rootfs_tmp: /dev

ssh_deletekeys:

0ssh_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無關;

但是沒有實驗證明。

參考:

禁止 cloud init 修改 hostname

今天製作了乙個帶cloud init 的映象,準備用metadata server 加 cloud init 的方式做注入key和密碼 安裝完cloud init後對裡面引數有了大概的了解,也算是學習了。在用新的映象啟動虛擬機器後,發現hostname變成了主機的名字。突然把我詫異住了,dhcp a...

Linux 使用技巧

1.使用虛擬控制台 登入後按alt f2鍵這時又可以看到 login 提示符,這個就是第二個虛擬控 制台.一般新安裝的linux有四個虛擬控制台,可以用alt f1 alt f4來訪問.虛擬 控制台最有用的時候是當乙個程式出錯鎖住輸入時可以切換到其他虛擬控制台登入 進入後殺掉這個出錯的程序.2.拷貝...

WinCVS使用技巧

更新 update 1,上傳之前先update,為了保證 與伺服器上統一。update 預設 會將伺服器上有的 而本地沒有的 更新到本地,之後再commit才不會出現 遺失。在update時,可能會使有些檔案衝突,需要手動解決。2,獲取伺服器上的版本。update 選中 get the clean ...