cloud-init製作centos7鏡像

一、環境說明
你需要準備一臺KVM機器,用於製作初始的centos7鏡像。建議最終將ISO鏡像轉爲QCOW2。

二、配置好網絡
ISO鏡像的centos7系統剛裝好,網絡可能不通,所以要檢查網絡。
ping 外網檢測

# ping www.baidu.com

如果未能ping通,請依次檢測ip,route

# vi /etc/sysconfig/network-script/ifcfg-eth0

可以先將dhcp動態分配IP改爲靜態IP

#cgls 
#BOOTPROTO=dhcp
BOOTPROTO=static
IPADDR=172.16.5.133
GATEWAY=172.16.1.1
NETMASK=255.255.0.0
ONBOOT=yes

重啓網卡使其生效

# service network restart

檢查路由

# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         172.16.1.1      0.0.0.0         UG    100    0        0 eth0
169.254.169.254 172.16.88.100   255.255.255.255 UGH   100    0        0 eth0
172.16.0.0      0.0.0.0         255.255.0.0     U     100    0        0 eth0 

如果你缺失第一個路由,是肯定無法ping通外網的這裏寫代碼片
添加dns

# vim /etc/resolv.conf
nameserver 114.114.114.114
nameserver 8.8.8.8

添加路由

# route add default gw 172.16.1.1

試一下ping百度

# ping www.baidu.com

成功之後我們可以開始下一步操作。

三、安裝相應的包
安裝ACPI服務
這個服務是控制重啓和關閉實例

# yum -y install acpid
# systemctl enable acpid

配置獲取元數據
一個實例必須與元數據服務進行交互任務後再啓動。 例如:必須得到實例 ssh公鑰並運行腳本的用戶數據。 爲了確保實例執行這些任務,推薦安裝一個cloud-init包。
使用cloud-init獲取公鑰,cloud-init包將從元數據服務器和一個帳戶的關鍵的地方自動獲取公鑰 。
安裝cloud-init。

# yum -y install cloud-init

cloud-init通過編輯/etc/cloud/cloud.cfg,對鏡像進行定製。我們現在暫時不修改這個文件,將其他配置弄完再進行定製。

安裝cloud-utils-growpart允許分區調整

# yum -y install cloud-utils-growpart

實例需要訪問元數據服務, 必須禁用默認zeroconf路線。

# echo "NOZEROCONF=yes" >> /etc/sysconfig/network

配置控制檯
如果希望在儀表盤界面查看nova控制檯的日誌,需要做以下配置:

# vi /etc/default/grub

修改GRUB_CMDLINE_LINUX爲以下內容

GRUB_CMDLINE_LINUX="crashkernel=auto console=tty0 console=ttyS0,115200n8"

保存更改

# grub2-mkconfig -o /boot/grub2/grub.cfg

出現以下內容,配置結束。

Generating grub configuration file ...
Found linux image: /boot/vmlinuz-3.10.0-229.14.1.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-229.14.1.el7.x86_64.img
Found linux image: /boot/vmlinuz-3.10.0-229.4.2.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-229.4.2.el7.x86_64.img
Found linux image: /boot/vmlinuz-3.10.0-229.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-229.el7.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-605f01abef434fb98dd1309e774b72ba
Found initrd image: /boot/initramfs-0-rescue-605f01abef434fb98dd1309e774b72ba.img
done

三、進行定製
修改配置項,修改之前說兩句。
閱讀cloud-init官方文檔,讀幾遍,確保你知道你在配置些什麼,以及這些配置項是如何生效的,模塊頻率是怎樣。
Users and Groups模塊的模塊頻率是每個實例執行一次,也就是說你製作的鏡像起了雲主機之後,再修改這個模塊配置重啓機器是不再生效了。
與Users and Groups模塊的模塊頻率相似的還有Write_files、Set Passwords模塊。
Bootcmd模塊的模塊頻率是每個實例可以執行多次,也就是說,起了雲主機之後,再修改這個模塊配置重啓機器之後也會生效。
與Bootcmd模塊的模塊頻率相似的還有Runcmd。

vi /etc/cloud/cloud.cfg

將locale_configfile: /etc/sysconfig/i18n之前的配置替換爲以下內容。

groups:
  - centos

users:
  - name: demo
    expiredate: 2016-09-01
    groups: centos
    homedir: /home/bh
    lock_passwd: false
    passwd: $6$dfdfsdsf$y9obLvZMtAb.uWTIU1OTrZqZImHvCCs01ntDFwO0DnfFxXtgaLq2YoMK6yJ0KjfI260DH0Pv7T6Sj9TXVuUag0
  - name: root
    ssh_authorized_keys:
      - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDYbA+xgxzm3pySQfW6oh7yr4xYD6n6T/upHuWAdVp/sU2ukeoDU/U6qPBpJuMVRzfaT6pyJEgK7gknaKu/GZxMfnA/9Dt5JJln6PmstWZoWclmxvS7MPCqeL0+ESFvMx64UZFIePbClb5kh1UFggQ5WwDvAIC+1HysI3qGOIZ/RoYUrOHNdgQJzV8xcpWLeDKF2MBNQt/Pyzl+WLxoTN6cd4XlrA9E729t8OwrK5mvTe9CUpWKYELGV6bfqNLGNcUT5LYx9tqyanB4KA1eBC5/9MhBjGeO+EcsQv6zooVJTIAE65XmCEib4WukQcUTr8Td7+6+wMY9463us2OrVVw7

bootcmd:
  - echo 123321 >> /root/bootcmd.log

write_files:
  - encoding: b64
    content: CiMgVGhpcyBmaWxlIGNvbnRyb2xzIHRoZSBzdGF0ZSBvZiBTRUxpbnV4...
    owner: root:root
    path: /etc/sysconfig/cjm
    permissions: '0644'
  - content: |
      # My new /etc/sysconfig/samba file

      SMDBOPTIONS="-D"
    path: /etc/sysconfig/cgls

runcmd:
  - [ sh, -c, sh /root/bootcmd.sh ]
  - [ sh, -c, echo "=========hello world'=========" >> /root/runcmd.log ]

ssh_pwauth: yes
chpasswd:
  list: |
    root:cjm123
  expire: False  

preserve_hostname: flase
fqdn: qwehost.local
hostname: qwehost

manage_etc_hosts: true

複製過去的時候注意格式問題。
注意格式問題:
1.確定空行一致性,統一以空2格作爲區分。
2.冒號後空一格
3.寫多行需要按照yuml語法編寫
如果格式出了問題,你配置的cloud-init將全部失效。

解釋配置:
1.配置了用戶組

groups:
  - centos

2.配置用戶,創建了demo用戶,設置了過期時間,所屬用戶組,用戶目錄,以及是否開啓密碼登錄,併爲其設置了密碼。
爲root用戶,設置了ssh免密碼登錄,附上了公鑰。
密碼是通過加密的產生的,生成命令爲:

# python -c 'import crypt; print crypt.crypt("cgls", "$6$dfdfsdsf")'

在需要免密碼登錄的機器上執行下面命令,產生密鑰對。

# ssh-keygen -t rsa

將公鑰內容複製到配置中。

cat /root/.ssh/id_rsa.pub
users:
  - name: demo
    expiredate: 2016-09-01
    groups: centos
    homedir: /home/bh
    lock_passwd: false
    passwd: $6$dfdfsdsf$y9obLvZMtAb.uWTIU1OTrZqZImHvCCs01ntDFwO0DnfFxXtgaLq2YoMK6yJ0KjfI260DH0Pv7T6Sj9TXVuUag0
  - name: root
    ssh_authorized_keys:
      - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDYbA+xgxzm3pySQfW6oh7yr4xYD6n6T/upHuWAdVp/sU2ukeoDU/U6qPBpJuMVRzfaT6pyJEgK7gknaKu/GZxMfnA/9Dt5JJln6PmstWZoWclmxvS7MPCqeL0+ESFvMx64UZFIePbClb5kh1UFggQ5WwDvAIC+1HysI3qGOIZ/RoYUrOHNdgQJzV8xcpWLeDKF2MBNQt/Pyzl+WLxoTN6cd4XlrA9E729t8OwrK5mvTe9CUpWKYELGV6bfqNLGNcUT5LYx9tqyanB4KA1eBC5/9MhBjGeO+EcsQv6zooVJTIAE65XmCEib4WukQcUTr8Td7+6+wMY9463us2OrVVw7

3.Bootcmd只用於在引導過程之後不能做的時候再使用

bootcmd:
  - echo 123321 >> /root/bootcmd.log

4.寫文件,第一個是加密之後的內容,第二個是正常內容。

write_files:
  - encoding: b64
    content: CiMgVGhpcyBmaWxlIGNvbnRyb2xzIHRoZSBzdGF0ZSBvZiBTRUxpbnV4...
    owner: root:root
    path: /etc/sysconfig/cjm
    permissions: '0644'
  - content: |
      # My new /etc/sysconfig/samba file

      SMDBOPTIONS="-D"
    path: /etc/sysconfig/cgls

5.與bootcmd類似,可在引導之後使用

runcmd:
  - [ sh, -c, sh /root/bootcmd.sh ]
  - [ sh, -c, echo "=========hello world'=========" >> /root/runcmd.log ]

6.設置root用戶密碼

ssh_pwauth: yes
chpasswd:
  list: |
    root:cjm123
  expire: False  

最後就是修改靜態IP爲dhcp動態獲取了

# vi /etc/sysconfig/network-scripts/ifcfg-eth0 
#cgls 
BOOTPROTO=dhcp
#BOOTPROTO=static
#IPADDR=172.16.5.133
#GATEWAY=172.16.1.1
#NETMASK=255.255.0.0
ONBOOT=yes

關機

# poweroff

四、開啓雲主機
上傳鏡像到openstack上

# openstack image create "centos7_init" --file centos7.0-3.qcow2 --disk-format qcow2 --container-format bare --public

控制檯界面中自己開啓雲主機,可以看到自己定製的centos7有沒有成功了。

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