|
一、环境说明 G8 I! m1 _) J, I$ e0 ]
你需要准备一台KVM机器,用于制作初始的centos7镜像。建议最终将ISO镜像转为QCOW2。 二、配置好网络 - a! e) n* J+ K, a
ISO镜像的centos7系统刚装好,网络可能不通,所以要检查网络。 # f6 H: }! B# g4 U z. N3 u8 b
ping 外网检测 - 1
9 ^) ]* e/ G4 {7 [6 X# z
如果未能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 - 15 w5 M, Y y3 |( p- z6 h1 B
检查路由 # 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通外网的这里写代码片 9 i& s3 h5 O3 b
添加dns # vim /etc/resolv.conf nameserver 114.114.114.114nameserver 8.8.8.8- 28 Y$ u3 I) }; G2 e( q- s; g
添加路由 # route add default gw 172.16.1.1 试一下ping百度 成功之后我们可以开始下一步操作。 三、安装相应的包 5 P9 @* K8 ]2 O2 z, ^
安装ACPI服务 , Z8 {5 h# F% _3 e, _# m- i
这个服务是控制重启和关闭实例 # yum -y install acpid # systemctl enable acpid 配置获取元数据 ' k% c+ A2 O; S9 L: z
一个实例必须与元数据服务进行交互任务后再启动。 例如:必须得到实例 ssh公钥并运行脚本的用户数据。 为了确保实例执行这些任务,推荐安装一个cloud-init包。
6 i* V1 n3 t3 F) _* U' ]5 L$ I使用cloud-init获取公钥,cloud-init包将从元数据服务器和一个帐户的关键的地方自动获取公钥 。 1 ]( t7 l( [, | K7 B" l7 d% i! l
安装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 配置控制台
. j9 r4 B/ m0 O+ b' i F如果希望在仪表盘界面查看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
% `7 B0 _+ Z1 B! ]$ n* I+ F/ u三、进行定制 ! Y6 Y/ C) f9 Y1 b8 @( T
修改配置项,修改之前说两句。 0 c9 d: p7 T: h! [( \" G' E
阅读cloud-init官方文档,读几遍,确保你知道你在配置些什么,以及这些配置项是如何生效的,模块频率是怎样。 / J1 n* j7 ^# s1 ~9 M
Users and Groups模块的模块频率是每个实例执行一次,也就是说你制作的镜像起了云主机之后,再修改这个模块配置重启机器是不再生效了。 0 Y- s$ ^% |4 [2 K! d1 q
与Users and Groups模块的模块频率相似的还有Write_files、Set Passwords模块。 # t+ G' Y8 b( W8 y/ q
Bootcmd模块的模块频率是每个实例可以执行多次,也就是说,起了云主机之后,再修改这个模块配置重启机器之后也会生效。 7 g! {0 U" q" F: t
与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: true2 ^1 K9 c' W6 L- K* U9 `8 O. n% M
( X1 C- c( w' B( \' g. J* I+ \- n1 c
复制过去的时候注意格式问题。
& o2 ~3 B0 G8 U, r/ n; M注意格式问题:
6 A. M4 x* R( l' Y7 W- d1.确定空行一致性,统一以空2格作为区分。
" g3 b5 Z3 t- O% A6 L: t; I. Z2.冒号后空一格 8 w* a( z d3 W9 h2 m8 O! L( X
3.写多行需要按照yuml语法编写 ) L8 Y' z! y O
如果格式出了问题,你配置的cloud-init将全部失效。 解释配置:
& N. z5 M3 f( _1 Z1.配置了用户组 groups: - centos 2.配置用户,创建了demo用户,设置了过期时间,所属用户组,用户目录,以及是否开启密码登录,并为其设置了密码。
, P" Q0 W/ ?4 U为root用户,设置了ssh免密码登录,附上了公钥。
s, E! ` d* l$ j密码是通过加密的产生的,生成命令为: # 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 四、开启云主机 d6 Z( H0 t6 w. W' ?! A M: ]& G
上传镜像到openstack上 # openstack image create "centos7_init" --file centos7.0-3.qcow2 --disk-format qcow2 --container-format bare --public控制台界面中自己开启云主机,可以看到自己定制的centos7有没有成功了。 8 q/ d, t* u; O7 J* W6 N
! `6 r' a) I f) w$ ?* t |