在本地KVM中使用cloud-init

在本地KVM中使用cloud-init

 

cloud-init是一個Linux虛擬機的初始化工具,被廣泛應用在AWS和OpenStack等雲平臺中,用於在新建的虛擬機中進行時間設置、密碼設置、擴展分區、安裝軟件包等初始化設置。本文主要研究在本地KVM虛擬機,也就是沒有云平臺的情況下,如何使用cloud-init進行初始化工作。示例虛擬機的操作系統是centos7.1。

安裝

在虛擬機內安裝cloud-init:

yum install cloud-init -y

 

安裝完後,配置文件在/etc/cloud目錄,主配置文件爲/etc/cloud/cloud.cfg

DataSource

要讓cloud-init能夠順利完成初始化工作,必須把一些數據傳給cloud-init,例如讓cloud-init設置root密碼,必須要告訴cloud-init密碼是什麼。Cloud-init支持很多種數據來源,常見的有metadata service、config drive和nocloud等。

l  metadata service提供一個可以獲取數據的url,例如OpenStack中的nova-api-metadat提供的http://169.254.169.254,虛擬機開機後cloud-init在完成網絡配置後,會向這個url發起請求。因此這種模式需要先配置好網絡;

l  Config drive 把數據封裝進一個iso9660(也支持vfat,但是不常見)文件系統的鏡像中,然後把這個鏡像以光驅(ide接口)的形式掛載到虛擬機中,虛擬機開機後cloud-init會自動去該鏡像中獲取數據。文件結構一般如下:

openstack/

  -   2012-08-10/ or latest/

      - meta_data.json

      - user_data (not mandatory)

  -   content/

      - 0000 (referenced content files)

      - 0001

      - ....

ec2

  -   latest/

      - meta-data.json (not mandatory)

 

l  Nocloud 這種模式與config drive類似,只是文件結構不同,一般由user-data和meta-data兩個文本文件構成。並且鏡像以普通磁盤(virtio接口)的方式掛載。

本文主要試驗nocloud模式。

封裝數據

製作鏡像需要cloud-localsd命令,默認沒有安裝,安裝命令如下:

yum install cloud-utils -y

編寫user-data:

cat << EOF > my-user-data

#cloud-config

chpasswd:

list: |

root:123456

expire: false

ssh_pwauth: true

EOF

cloud-init也支持多種數據格式,我們使用的是cloud-config格式,這種格式必須是以#cloud-config開頭的yaml格式。上面這段的意思是把root的密碼設置爲“123456”,然後配置ssh允許密碼登錄。

製作img:

cloud-localds -m local my-seed.img   my-user-data

-m指定的cloud-init的工作模式,local的意思是不需要依賴網絡,我們沒有使用metadata service,所以不需要網絡。

掛載數據

編輯虛擬機的libvirt xml配置文件,掛載鏡像:

<disk type='file' device='disk'>

      <driver name='qemu' type='raw' cache='none' io='native'/>

      <source file='/path/to/my-seed.img'/>

      <target dev='vdb' bus='virtio'/>

      <readonly/>

</disk>

修改cloud-init配置

在/etc/cloud/cloud.cfg最後一行添加以下內容,這句的意思是讓cloud-init接受NoCloud來源的數據:

datasource_list: ["NoCloud"]

重啓虛擬機

在虛擬機內執行rm -rf /var/lib/cloud,不刪除這個目錄,cloud-init不會執行。

硬重啓虛擬機

virsh destroy vm

virsh start vm

虛擬機開機後,會發現root密碼變成了“123456”

查看數據

在虛擬機內mount /dev/vdb /mnt,可以查看數據的內容。

ls /mnt

meta-data user-data

cat user-data

#cloud-config

chpasswd:

list: |

root:123456

expire: false

ssh_pwauth: true

總結

本文測試了在無雲平臺管理的本地KVM虛擬機上使用cloud-init修改root密碼的功能。cloud-init還有很多功能和技術細節,後續會繼續研究。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章