|
一、环境说明
) H z# J, y; n0 M+ p2 M你需要准备一台KVM机器,用于制作初始的centos7镜像。建议最终将ISO镜像转为QCOW2。 二、配置好网络
! w0 Z+ S! A0 d: OISO镜像的centos7系统刚装好,网络可能不通,所以要检查网络。 ! w, o" m3 R A5 @/ x" i
ping 外网检测 - 1/ F5 R/ |( B1 A8 A: ~ i" ]
如果未能ping通,请依次检测ip,route # vi /etc/sysconfig/network-script/ifcfg-eth0 可以先将dhcp动态分配IP改为静态IP #cgls #BOOTPROTO=dhcpBOOTPROTO=staticIPADDR=172.16.5.133GATEWAY=172.16.1.1NETMASK=255.255.0.0ONBOOT=yes重启网卡使其生效 # service network restart - 1: N+ w4 b6 Q/ n9 j* E" a: W
检查路由 # route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface0.0.0.0 172.16.1.1 0.0.0.0 UG 100 0 0 eth0169.254.169.254 172.16.88.100 255.255.255.255 UGH 100 0 0 eth0172.16.0.0 0.0.0.0 255.255.0.0 U 100 0 0 eth0 如果你缺失第一个路由,是肯定无法ping通外网的这里写代码片
' p# `/ f8 d0 Z添加dns # vim /etc/resolv.conf nameserver 114.114.114.114nameserver 8.8.8.8- 2, E# @* @( i$ U. a# ?: y9 }
添加路由 # route add default gw 172.16.1.1 试一下ping百度 成功之后我们可以开始下一步操作。 三、安装相应的包 : D/ c9 S% ?1 p3 `) X5 X! Q
安装ACPI服务
]7 A; l l$ b, `这个服务是控制重启和关闭实例 # yum -y install acpid # systemctl enable acpid 配置获取元数据
+ s8 m' }7 D" y1 {( F, }" d# y+ A一个实例必须与元数据服务进行交互任务后再启动。 例如:必须得到实例 ssh公钥并运行脚本的用户数据。 为了确保实例执行这些任务,推荐安装一个cloud-init包。 ( F9 n; q$ U1 [) q& Q) O! a( g; k
使用cloud-init获取公钥,cloud-init包将从元数据服务器和一个帐户的关键的地方自动获取公钥 。 " o' { H* c, Y @# X3 n- i" ]
安装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 配置控制台
8 V6 Y. Q0 [9 q* l4 x/ O如果希望在仪表盘界面查看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_64Found initrd image: /boot/initramfs-3.10.0-229.14.1.el7.x86_64.imgFound linux image: /boot/vmlinuz-3.10.0-229.4.2.el7.x86_64Found initrd image: /boot/initramfs-3.10.0-229.4.2.el7.x86_64.imgFound linux image: /boot/vmlinuz-3.10.0-229.el7.x86_64Found initrd image: /boot/initramfs-3.10.0-229.el7.x86_64.imgFound linux image: /boot/vmlinuz-0-rescue-605f01abef434fb98dd1309e774b72baFound initrd image: /boot/initramfs-0-rescue-605f01abef434fb98dd1309e774b72ba.imgdone
! N! n( m, W4 U# \三、进行定制 Q& ?0 V! |& Z" p
修改配置项,修改之前说两句。
/ H6 s+ j- q/ j7 s: k' X阅读cloud-init官方文档,读几遍,确保你知道你在配置些什么,以及这些配置项是如何生效的,模块频率是怎样。 2 T' n3 s" _" Z& {$ n @
Users and Groups模块的模块频率是每个实例执行一次,也就是说你制作的镜像起了云主机之后,再修改这个模块配置重启机器是不再生效了。 8 b* ^; a# i: C; o
与Users and Groups模块的模块频率相似的还有Write_files、Set Passwords模块。 4 _3 k& S4 @) T1 X
Bootcmd模块的模块频率是每个实例可以执行多次,也就是说,起了云主机之后,再修改这个模块配置重启机器之后也会生效。 & ^$ y7 I8 B$ E3 U2 ^1 |' |
与Bootcmd模块的模块频率相似的还有Runcmd。 vi /etc/cloud/cloud.cfg 将locale_configfile: /etc/sysconfig/i18n之前的配置替换为以下内容。 groups: - centosusers: - 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+wMY9463us2OrVVw7bootcmd: - echo 123321 >> /root/bootcmd.logwrite_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/cglsruncmd: - [ sh, -c, sh /root/bootcmd.sh ] - [ sh, -c, echo "=========hello world'=========" >> /root/runcmd.log ]ssh_pwauth: yeschpasswd: list: | root:cjm123 expire: False preserve_hostname: flasefqdn: qwehost.localhostname: qwehostmanage_etc_hosts: true
3 E* m4 a2 i: p6 i
$ }' q6 N( Y6 Z复制过去的时候注意格式问题。
( ^ _9 u/ i* n2 V# y, n3 v注意格式问题: ( ?! g' q8 [# q
1.确定空行一致性,统一以空2格作为区分。
[4 p& S% U s# ?% g+ q2.冒号后空一格 - M9 m2 R$ }' [8 b# E- g$ H
3.写多行需要按照yuml语法编写 0 x) g5 b: K" R1 [
如果格式出了问题,你配置的cloud-init将全部失效。 解释配置: ( J8 t$ L! y! L6 m0 N5 L
1.配置了用户组 groups: - centos 2.配置用户,创建了demo用户,设置了过期时间,所属用户组,用户目录,以及是否开启密码登录,并为其设置了密码。
; x% m" B) k/ {; \, w! I% p' V为root用户,设置了ssh免密码登录,附上了公钥。 ' P7 Q3 g5 h2 ~! G4 J1 a
密码是通过加密的产生的,生成命令为: # python -c 'import crypt; print crypt.crypt("cgls", "$6$dfdfsdsf")' 在需要免密码登录的机器上执行下面命令,产生密钥对。 # ssh-keygen -t rsa 将公钥内容复制到配置中 cat /root/.ssh/id_rsa.pubusers: - 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+wMY9463us2OrVVw73.Bootcmd只用于在引导过程之后不能做的时候再使用bootcmd: - echo 123321 >> /root/bootcmd.log4.写文件,第一个是加密之后的内容,第二个是正常内容。 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/cgls5.与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.0ONBOOT=yes关机 # poweroff 四、开启云主机
) C7 b" L, ?3 r上传镜像到openstack上 # openstack image create "centos7_init" --file centos7.0-3.qcow2 --disk-format qcow2 --container-format bare --public控制台界面中自己开启云主机,可以看到自己定制的centos7有没有成功了。 , n8 G! \6 f V( c! b/ [
% y0 F6 Y7 I6 C0 z |