您好,登錄后才能下訂單哦!
環(huán)境:
openstack版本 | pike |
控制節(jié)點(diǎn)主機(jī) | openstack-controller(ubuntu 16.04.5) 172.27.34.37 |
計(jì)算節(jié)點(diǎn)主機(jī) | openstack-computer(ubuntu 16.04.5) 172.27.34.38 |
vxlan100 | centos7-init(172.27.100.2)、ubuntu1604(172.27.100.20) |
centos7鏡像 | CentOS-7-x86_64-GenericCloud-1809.qcow2c |
ubuntu16.04鏡像 | xenial-server-cloudimg-amd64-disk1.img |
cloud-init | cloud-init 0.7.9 |
ubuntu安裝詳見:Ubuntu16.04.5以lvm方式安裝全記錄
openstack安裝詳見:OpenStack實(shí)踐(一):Ubuntu16.04下DevStack方式搭建p版OpenStack
浮動(dòng)ip搭建詳見:OpenStack實(shí)踐(九):Open vSwitch方式實(shí)現(xiàn)floating IP
架構(gòu)圖:
cloud-init簡介
cloud-init是linux的一個(gè)工具,當(dāng)系統(tǒng)啟動(dòng)時(shí),cloud-init可從nova metadata服務(wù)或者config drive中獲取metadata,完成包括但不限于下面的定制化工作:
1.設(shè)置 default locale
2.設(shè)置 hostname
3.添加 ssh keys到 .ssh/authorized_keys
4.設(shè)置用戶密碼
5.配置網(wǎng)絡(luò)
為了實(shí)現(xiàn)instance定制工作,cloud-init會(huì)按5個(gè)階段執(zhí)行任務(wù):
1.Generator (cloud-config.target)
2.Local (cloud-init-local.service)
3.Network (cloud-init.service)
4.Config (cloud-config.service)
5.Final (cloud-final.service)
各階段作用
Generator:讀取配置文件cloud.cfg;
Local:定位“本地”數(shù)據(jù)源和配置網(wǎng)絡(luò);
Network:讀取cloud_init_modules模塊的指定配置;
Config:讀取cloud_config_modules模塊的指定配置
Final :分別讀取cloud_final_modules模塊的指定配置
cloud image
ubuntu鏡像:http://cloud-images.ubuntu.com/
centos7鏡像:http://cloud.centos.org/centos/7/images/
這些鏡像已經(jīng)預(yù)裝cloud-init
config drive
當(dāng)無dhcp服務(wù)時(shí),可以通過config drive獲得metadata
配置config driver
stack@openstack-controller:~$ view /etc/nova/nova.conf flat_injected = True
該配置是為了關(guān)閉DHCP服務(wù)時(shí)實(shí)例網(wǎng)卡也能被正確配置,重啟計(jì)算服務(wù)后配置生效。
stack@openstack-controller:~$ sudo systemctl restart devstack@n*
關(guān)閉dhcp
為確保實(shí)例通過config driver獲取的metadata,這里關(guān)閉dhcp服務(wù)
啟動(dòng)實(shí)例
root@openstack-controller:~# nova boot --flavor m1.small --image centos7 --availability-zone nova:openstack-controller --nic net-name=vxlan100 --key-name centos7 --security-groups centos7 --user-data /tmp/centos.config --config-drive true centos7-init
通過--config-drive true啟用config-driver,通過--user-data /tmp/centos.config加載配置,ubuntu的配置文件為/tmp/ubuntu.config
打印的日志,傳入的user_data
綁定浮動(dòng)IP
user-data:centos.config
root@openstack-controller:~# more /tmp/centos.config #cloud-config chpasswd: list: | root:rootroot centos:centos expire: false ssh_pwauth: yes hostname: loong576 yum_repos: epel-163: baseurl: http://mirrors.163.com/centos/$releasever/os/$basearch/ name: Centos-7 enabled: true resolv_conf: nameservers: ['218.104.1xx.1xx', '8.8.8.8'] searchdomains: - localdomain domain: localdomain options: rotate: true timeout: 1 manage_resolv_conf: true packages: - vim - wget - httpd timezone: 'Asia/Shanghai' runcmd: - [ sed, -i, "s/^ *SELINUX=enforcing/SELINUX=disabled/g", /etc/selinux/config ] - [ mkdir, /dropme ] - [ touch, /root/abc.txt ] - [ sed, -i, "s/^ *nameserver.*/nameserver 218.104.1xx.1xx/g", /etc/resolv.conf ] - [ rpm, --import, /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 ] power_state: delay: now mode: reboot message: reboot now timeout: 30 condition: true
驗(yàn)證是否生效
驗(yàn)證定制的配置文件centos.config是否生效
實(shí)例可以直接root登陸(默認(rèn)只能通過創(chuàng)建密鑰對(duì)方式登陸)成功獲取到ip,配置了yum源、時(shí)區(qū),runcmd運(yùn)行正常,關(guān)閉了selinux(power-state-change正常),產(chǎn)生了測試文件,修改了dns信息
user-data:ubuntu.config
root@openstack-controller:~# more /tmp/ubuntu.config #cloud-config chpasswd: list: | root:rootroot ubuntu:ubuntu expire: false ssh_pwauth: yes hostname: ubuntu1604 apt: primary: - arches: [default] uri: "http://mirrors.aliyun.com/ubuntu/" search: - "http://mirrors.aliyun.com/ubuntu/" resolv_conf: nameservers: ['218.104.1xx.1xx', '8.8.8.8'] searchdomains: - localdomain domain: localdomain options: rotate: true timeout: 1 manage_resolv_conf: true packages: - apache2 timezone: 'Asia/Shanghai' runcmd: - [ mkdir, /dropme ] - [ sed, -i, "$a nameserver 218.104.1xx.xxx", /etc/resolv.conf ]
驗(yàn)證是否生效
驗(yàn)證定制的配置文件ubuntu.config是否生效
實(shí)例可以直接ubuntu登陸(默認(rèn)只能通過創(chuàng)建密鑰對(duì)方式登陸)成功獲取到ip,配置了hostname、apt源、時(shí)區(qū),runcmd運(yùn)行正常,產(chǎn)生了測試文件,修改了dns信息
查看config drive
sr0就是config driver,掛載并查看
[root@centos7-init ~]# lsblk [root@centos7-init ~]# mount /dev/sr0 /mnt [root@centos7-init ~]# cd /mnt/openstack/latest/ && ll [root@centos7-init latest]# more meta_data.json [root@centos7-init latest]# more user_data
meta_data.json中存放了public_keys,hostname等信息,user_data對(duì)應(yīng)centos.config。
cloud-init.log日志分析
[root@centos7-init ~]# view /var/log/cloud-init.log
第一階段服務(wù)
第二階段服務(wù)
第三階段服務(wù)
在第三階段init-network服務(wù)會(huì)依次讀取cloud_init_modules模塊中以下配置:check-cache、consume-user-data、consume-vendor-data、config-migrator、config-bootcmd、config-write-files、config-growpart、config-resizefs、config-set_hostname、config-update_etc_hosts、config-rsyslog、config-users-groups、config-ssh
第四階段服務(wù)
在第四階段modules-config服務(wù)會(huì)依次讀取cloud_config_modules模塊中以下配置:check-cache、consume-user-data、consume-vendor-data、config-migrator、config-bootcmd、config-write-files、config-growpart、config-resizefs、config-set_hostname、config-update_etc_hosts、config-disable-ec2-metadata、config-runcmd
第五階段服務(wù)
在第五階段modules-final服務(wù)會(huì)依次讀取cloud_final_modules模塊中以下配置:config-rightscale_userdata、config-scripts-per-boot、config-scripts-per-instance、config-scripts-user、config-ssh-authkey-fingerprints、config-keys-to-console、config-phone-home、config-final-message、config-power-state-chang
cloud init的modules里面提供了豐富的定制信息,詳情可以參考Cloud-Init官網(wǎng):https://cloudinit.readthedocs.io/en/latest/index.html#
cloud-init調(diào)試
各服務(wù)單獨(dú)調(diào)試
init-local:cloud-init init --local cloud_init_modules:cloud-init init cloud_config_modules:cloud-init modules --mode=config cloud_final_modules:cloud-init modules --mode=final
[root@centos7-init ~]# cloud-init init --local
調(diào)試某模塊的某個(gè)配置
[root@centos7-init ~]# cloud-init single --name timezone
調(diào)試cloud_config_modules模塊的timezone配置
實(shí)踐總結(jié):
1.各模塊的各配置項(xiàng)依次讀取生效
在定制實(shí)例時(shí),會(huì)依次讀取配置文件cloud.cfg配置項(xiàng)。
實(shí)驗(yàn)環(huán)境的主機(jī)需配DNS才能訪問外網(wǎng),通過cloud_config_modules模塊的runcmd配置項(xiàng)配置DNS,由于配置項(xiàng)package-update-upgrade-install在runcmd之前,cloud-init會(huì)先安裝軟件,這時(shí)外網(wǎng)是不通的,所以報(bào)錯(cuò)。
2.centos的hostname設(shè)置不生效
嘗試了很多參數(shù)組合,都沒有到hostname,原因待查
嘗試過的參數(shù)
hostname: loong576 manage_etc_hosts: true preserve_hostname: true fqdn: loong576
ubuntu沒有這個(gè)問題,只需設(shè)置hostname即可,重啟系統(tǒng)也任然生效。
3.DNS配置不生效
配置項(xiàng)resolv_conf不生效。centos和ubuntu都不生效,centos貌似是個(gè)bug,參考:https://bugzilla.redhat.com/show_bug.cgi?id=1489270,ubuntu建議將dns信息寫入網(wǎng)卡/etc文件/network/interfaces。
4.runcmd執(zhí)行命令是應(yīng)該是雙引號(hào)
這個(gè)有點(diǎn)坑,在用sed命令執(zhí)行關(guān)閉selinux和配置DNS時(shí),正常的單引號(hào)''需替換為"",否則執(zhí)行報(bào)錯(cuò)。
5.某個(gè)配置項(xiàng)不合法則整個(gè)配置不生效
runmcd有個(gè)配置非法
報(bào)錯(cuò)日志
此時(shí)整個(gè)centos.config配置文件不生效
cloud-init配置文件已上傳github:https://github.com/loong576/cloud-init.git
參考:
https://cloudinit.readthedocs.io/en/latest/
https://docs.openstack.org/ironic/latest/install/configdrive.html
https://help.ubuntu.com/community/CloudInit
https://blog.csdn.net/allison_ywt/article/details/52943480
https://blog.51cto.com/cloudman/1912640
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。