Centos6.7 Openstack镜像制作

文章目录

镜像需求

  • 磁盘分区,自动resizefs(虚拟机启动时自动将额外分区扩展到/ cloud-init)
  • 没有硬件 MAC address information
  • ssh server 运行
  • 禁用防火墙、selinux
  • 访问instance use ssh public key (cloud-init)
  • 接受 user-data 和metadata
  • qemu-guest-agent (支持操作虚拟机,改密码等操作 开机自动启动)

镜像制作

环境准备

硬件环境

软件环境

kvm环境搭建

软件安装

安装kvm等工具

# yum install -y qemu-kvm libvirt libvirt-python  \
libguestfs-tools virt-install

启动服务

# systemctl enable libvirtd && systemctl start libvirtd

网络设置

由于我用的是VMware虚拟机,启动的镜像也采用bridge模式会使后续的远程连接调试更加方便
添加网桥br0需修改ifcfg-ens33与ifcfg-br0(dhcp模式),配置如下:

# cat /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE="Ethernet"
DEVICE="ens33"
ONBOOT="yes"
BRIDGE="br0"
# cat /etc/sysconfig/network-scripts/ifcfg-br0
TYPE="bridge"
BOOTPROTO="dhcp"
DEVICE="br0"
ONBOOT="yes"

镜像制作

创建磁盘(创建将来的Openstack镜像)

# qemu-img create -f qcow2 /tmp/CentOS67.qcow2 30G

启动虚拟机

# virt-install --name CentOS67 --vcpu 4 --ram 4096 \
--disk path=/tmp/CentOS67.qcow2  \
--network bridge=br0  \
--graphics vnc,listen=0.0.0.0 --noautoconsole \
--os-type=linux --os-variant=rhel6  \
--cdrom=/data/img/CentOS-6.7-x86_64-minimal.iso
##cdrom后面的镜像需要从CentOS官网下载

连接vnc进行系统安装系统初始化

查看vnc端口

virsh # vncdisplay CentOS67
:0

外部连接的vnc端口为590x例如上面就为5900,以192.168.1.111:5900连接之后进行安装系统
如果要实现分区自动伸缩,必须在安装系统的时候手动将文件系统格式配置成ext4 lvm不支持自动伸缩功能
安装完系统之后就开始一一实现功能

基础软件包

yum install -y ntp vim wget net-tools tcpdump strace \
sysstat iotop pciutils lsof telnet iftop lrzsz \
unzip dos2unix ipmitool psmisc tree

基础优化配置

echo "
* soft nproc 655360
* hard nproc 655360
* soft nofile 655360
* hard nofile 655360" >>/etc/security/limits.conf
sed -i -e "/UseDNS/c UseDNS no" /etc/ssh/sshd_config
sed -i -e "/StrictHostKeyChecking/c StrictHostKeyChecking no\nUserKnownHostsFile /dev/null" /etc/ssh/ssh_config
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
# 关闭SElinux
echo "net.ipv4.ip_forward=1
net.ipv4.conf.default.rp_filter=0
net.ipv4.conf.all.rp_filter=0" >> /etc/sysctl.conf
sysctl -p
service postfix stop
service iptables stop
chkconfig --del iptables
# 禁用防火墙
chkconfig --del postfix

磁盘分区,自动resizefs(虚拟机启动时自动将额外分区扩展到/ cloud-init)

redhat系可以通过cloud-utils-growpart工具来实现,安装即可用***非lvm才可用***

yum install -y epel-release
yum install cloud-utils-growpart

访问instance use ssh public key (cloud-init),安装即可用

安装cloud-int

默认安装之后会把ssh密码登陆关掉需手动开启

yum install cloud-init -y

开启ssh密码登陆

  • 修改/etc/cloud/cloud.cfg
users:
 - default

disable_root: 0
ssh_pwauth:   1
  • 修改/etc/ssh/sshd_config
sed -i '/^#Port/c Port 22' /etc/ssh/sshd_config
sed -i '/^PasswordAuthentication/c PasswordAuthentication yes' /etc/ssh/sshd_config
  • 安装ssh客户端
yum install -y openssh-clients

安装qemu-guest-agent

yum install -y qemu-guest-agent
chkconfig --add qemu-ga

接受 user-data 和metadata

保证虚拟机能连接到openstack元数据即可,一般情况用dhcp元数据,所以用不到zeroconf route,需将zeroconf禁用掉,否则zeroconf router在虚拟机开机时会自动生成路由169.254.0.0/16 0.0.0.0 导致无法与元数据通信
编辑vim /etc/sysconfig/network-scripts/ifup-eth注释掉以下部分

if [ -z "${NOZEROCONF}" -a "${ISALIAS}" = "no" -a "${REALDEVICE}" != "lo" ]; then
    ip route add 169.254.0.0/16 dev ${REALDEVICE} metric $((1000 + $(cat /sys/class/net/${REALDEVICE}/ifindex))) scope link
fi

或者

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

重启网络 service network restart

没有硬件 MAC address information

centos6中udev rule会在服务器启动时生成mac地址信息,如果不清的话eth0网卡将无法正常使用
做完以上操作 清除mac信息

rm -f /etc/udev/rules.d/70-persistent-net.rules

如果网卡配置不是按照上面配的,网卡配置中也可能有mac地址 需要删掉

以上完成,就可以清除掉操作信息,关闭虚拟机导入上传镜像

清除操作痕迹

> /root/.bash_history

关闭虚拟机

poweroff

压缩镜像,便于传输

qemu-img convert -c -O qcow2 CentOS67.qcow2 CentOS67_convert.qcow2

测试

镜像创建完先在vmvare上启动虚拟机测试一下,用创建的镜像启动虚拟机

cp  CentOS67_convert.qcow2  CentOS67_convert_test.qcow2
qemu-img resize  CentOS67_convert_test.qcow2 +30G
#扩容镜像 验证镜像分区自动扩展功能,首次启动之后虚拟还需重启一次才会扩容分区
virt-install --name centos67 --vcpu 2 --ram 4096 \
--disk /tmp/CentOS67_convert_test.qcow2 \
--import --network bridge=br0,model=virtio  \
--graphics vnc,listen=0.0.0.0 --noautoconsole

启动之后一一验证功能,验证没问题之后,上传至openstack

上传

  • 拷贝镜像到Openstack控制节点
  • 转化成raw格式
    Openstack glance nova后端用ceph的话raw格式最快
qemu-img convert -f qcow -O raw CentOS67_convert_test.qcow2 CentOS67.raw
  • 上传至Openstack
source ~/keystonerc_admin
glance image-create --name centos6.7 \
--file  CentOS67.raw --dish-format raw \
--container-format bare --is-public true --progress
10-02 17:12