【openstack N版】——手把手教你制作生产环境镜像

时间:2022-05-13 09:30:52

一.CentOS7镜像制作

1.1创建CentOS7虚拟机

1.1.1创建虚拟磁盘
 #注:尽量将虚拟机创建在控制节点,以便于将镜像上传至glance
[root@linux-node1 ~]# qemu-img create -f qcow2 /tmp/centos7.qcow2 10G
1.1.2创建虚拟机
#非桥接网卡
[root@linux-node1 ~]# virt-install \
--virt-type kvm \
--name centos \
--ram \
--disk /tmp/centos2.qcow2,format=qcow2 \
--network network=default \
--graphics vnc,listen=0.0.0.0 --noautoconsole \
--os-type=linux --os-variant=rhel7 \
--location=/tmp/CentOS--x86_64-DVD-.iso
#桥接网卡
[root@linux-node1 ~]# virt-install \
--virt-type kvm \
--name centos \
--ram \
--disk /tmp/centos.qcow2,format=qcow2 \
--network bridge=brqce3d2bda-d5 \
--graphics vnc,listen=0.0.0.0 --noautoconsole \
--os-type=linux --os-variant=rhel7 \
--location=/tmp/CentOS-7.2-x86_64-DVD-.iso
1.1.3VNC连接虚拟机

【openstack N版】——手把手教你制作生产环境镜像

#选择英文语言,下一步

【openstack N版】——手把手教你制作生产环境镜像

#选择时区:亚洲上海

【openstack N版】——手把手教你制作生产环境镜像

#选择最小化安装包组

【openstack N版】——手把手教你制作生产环境镜像

#自定义磁盘分区

【openstack N版】——手把手教你制作生产环境镜像

#不使用LVM,单机 "+" 添加分区

【openstack N版】——手把手教你制作生产环境镜像

#只分配一个 “/” 分区,不创建 swap分区,本身就是虚拟机,更影响性能。

【openstack N版】——手把手教你制作生产环境镜像

#创建完,单机左上角“done”

【openstack N版】——手把手教你制作生产环境镜像

#开始安装系统

【openstack N版】——手把手教你制作生产环境镜像

#给root用户创建密码

1.2连接虚拟机并优化

1.2.1安装常用基础软件包
 [root@example ~]# yum install -y snmap net-tools tree screen wget git vim salt-minion zabbix-agent lsof tcpdump
1.2.2修改网卡信息
 #删除UUI、mac等信息,只保留以下内容
[root@example ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
TYPE=Ethernet
BOOTPROTO=dhcp
NAME=eth0
DEVICE=eth0
ONBOOT=yes
1.2.3修改yum源
 [root@example ~]# rpm -ivh http://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm
1.2.4关闭Networkemanager和防火墙
 [root@example ~]# systemctl disable firewalld
[root@example ~]# systemctl stop firewalld
[root@example ~]# systemctl stop NetworkManager
1.2.5关闭selinux
 #修改selinux配置文件
[root@example ~]# vim /etc/sysconfig/selinux
SELINUX=enforcing 改为 SELINUX=disabled
#重启后,检查结果如下
[root@example ~]# getsebool
getsebool: SELinux is disabled

1.3编写metadata脚本

 [root@example ~]# vim /tmp/init.sh
#!/bin/bash set_key(){
if [ ! -d /root/.ssh ]; then
mkdir -p /root/.ssh
chmod /root/.ssh
fi
for ((i=;i<=;i++));do
if [ ! -f /root/.ssh/authorized_keys ];then
curl -f http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key > /tmp/metadata-key 2>/dev/null
if [ $? -eq ];then
cat /tmp/metadata-key >> /root/.ssh/authorized_keys
chmod /root/.ssh/authorized_keys
restorecon /root/.ssh/authorized_keys
rm -f /tmp/metadata-key
echo "Successfully retrieved public key from instance metadata"
echo "*****************"
echo "AUTHORIZED KEYS"
echo "*****************"
cat /root/.ssh/authorized_keys
echo "*****************"
fi
fi
done
} set_hostname(){
PRE_HOSTNAME=$(curl -s http://169.254.169.254/latest/meta-data/hostname)
DOMAIN_NAME=$(echo $PRE_HOSTNAME | awk -F '.' '{print $1}')
hostnamectl set-hostname `echo ${DOMAIN_NAME}.example.com`
} set_static_ip(){
PRE_IP=$(curl -s http://169.254.169.254/latest/meta-data/local-ipv4)
NET_FILE="/etc/sysconfig/network-scripts/ifcfg-eth0"
echo "TYPE=Ethernet" > $NET_FILE
echo "BOOTPROTO=static" >> $NET_FILE
echo "NAME=eth0" >> $NET_FILE
echo "DEVICE=eth0" >> $NET_FILE
echo "ONBOOT=yes" >> $NET_FILE
echo "IPADDR=${PRE_IP}" >> $NET_FILE
echo "NETMASK=255.255.255.0" >> $NET_FILE
echo "GATEWAY=192.168.56.2" >> $NET_FILE
} main(){
set_key;
set_hostname;
set_static_ip;
/bin/cp /tmp/rc.local /etc/rc.d/rc.local
reboot
} main
1.3.1修改rc.local
 #将rc.local拷贝到tmp下
[root@example ~]# cp /etc/rc.d/rc.local /tmp
#CentOS7开机执行rc.local,需将rc.local添加执行权限
[root@example ~]# chmod +x /etc/rc.d/rc.local
#编辑rc.local
[root@example ~]# vim /etc/rc.d/rc.local
/bin/sh /tmp/init.sh

1.4关机并压缩镜像

 #关机
[root@example ~]# init
#压缩镜像,清理磁盘碎片
[root@linux-node1 ~]# qemu-img convert -c disk -O qcow2 centos7.qcow2

1.5上传镜像至glance

注:镜像就是一开始创建虚拟机的qcow2的虚拟磁盘

 [root@linux-node1 ~]# openstack image create "CentOS-7-x86_64" \
--file /tmp/centos7.qcow2 \
--disk-format qcow2 \
--container-format bare \
--public

至此,openstack的镜像就制作完毕,请根据自己公司优化需求来制定

【开源是一种精神,分享是一种美德】

— By GoodCook

— 笔者QQ:253097001

— 欢迎大家随时来交流

—原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。