7.8、如何制作openstack镜像
1、创建openstack-linux镜像:
下载已经做好的的镜像:https://docs.openstack.org/image-guide/obtain-images.html#centos
(1)安装软件包:
yum install -y qemu-kvm libvirt virt-install
systemctl enable libvirtd
systemctl start libvirtd
(2)上传centos镜像到/tmp/目录下;
(3)创建虚拟机硬盘:
qemu-img create -f qcow2 /tmp/centos.qcow2 10G
(4)创建虚拟机:
1)默认网卡:
virt-install --virt-type kvm --name centos --ram 1024 \
--disk /tmp/centos.qcow2,format=qcow2 \
--network network=default \
--graphics vnc,listen=0.0.0.0 --noautoconsole \
--os-type=linux --os-variant=rhel7 \
--location=/tmp/CentOS-7-x86_64-DVD-1804.iso
2)如果是桥接网卡(推荐):
virt-install --virt-type kvm --name centos --ram 1024 \
--disk /tmp/centos.qcow2,format=qcow2 \
--network bridge=br0 \
--graphics vnc,listen=0.0.0.0 --noautoconsole \
--os-type=linux --os-variant=rhel7 \
--location=/tmp/CentOS-7-x86_64-DVD-1804.iso
提示:桥接网卡的建立方法参考文档'6、安装kvm虚拟机:';
(5)虚拟机安装:
参考文档'2.14、制作Centos模板及优化操作';
(6)开启虚拟机:
virsh start centos
(7)虚拟机优化:
参考文档'2.14、制作Centos模板及优化操作';
(8)给虚拟机安装acpi服务:
使虚拟机监控程序能够重新启动或关闭实例;
yum install acpid -y
systemctl enable acpid.service
systemctl start acpid.service
(9)给虚拟机安装cloud-utils-growpart以允许分区调整大小:
yum install cloud-utils-growpart
(10)禁用虚拟机zeroconf路由:
要访问元数据服务的实例,必须禁用默认的zeroconf路由;
echo "NOZEROCONF=yes" >> /etc/sysconfig/network
tail -1 /etc/sysconfig/network
NOZEROCONF=yes
(11)配置虚拟机输出控制台和设备内核兼容:
1)修改/etc/sysconfig/grub配置文件如下内容:
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=cl/root rd.lvm.lv=cl/swap console=tty0 console=ttyS0,115200n8 noapic"
2)运行以下命令使配置生效:
grub2-mkconfig -o /boot/grub2/grub.cfg
(12)编写虚拟机metada脚本:
1)编写脚本:
vim /tmp/init.sh
#!/bin/bash
set_key() {
if [ ! -d /root/.ssh ]; then
mkdir -p /root/.ssh
chmod 700 /root/.ssh
fi
for ((i=1;i<=5;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 0 ];then
cat /tmp/metadata-key >> /root/.ssh/authorized_keys
chmod 0600 /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 "*****************"
break
fi
else
break
fi
done
}
set_hostname() {
PRE_HOSTNAME=$(curl -s http://169.254.169.254/latest/meta-data/hostname)
if [ $? -eq 0 ];then
DOMAIN_NAME=$(echo ${PRE_HOSTNAME} | awk -F '.' '{print $1}')
hostnamectl set-hostname `echo ${DOMAIN_NAME}`
fi
}
set_static_ip(){
PRE_IP=$(curl -s http://169.254.169.254/latest/meta-data/local-ipv4)
if [ $? -eq 0 ];then
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=10.0.0.253" >>${NET_FILE}
echo "DNS1=114.114.114.114" >>${NET_FILE}
fi
}
main(){
set_key;
set_hostname;
set_static_ip;
/bin/cp -a /tmp/rc.local /etc/rc.d/rc.local
reboot
}
main
2)将rc.local拷贝到/tmp/下:
cp -a /etc/rc.d/rc.local /tmp/
3)CentOS7开机执行rc.local,需将rc.local添加执行权限:
chmod +x /etc/rc.d/rc.local
4)编辑rc.local
vim /etc/rc.d/rc.local
/bin/sh /tmp/init.sh
5)提示:
提示:启动时使用的是openstack分配的ip地址,然后执行/etc/rc.d/rc.local中的
的脚本把主机的ip地址静态化,再把/etc/rc.d/rc.loacl还原为原来的模式,重启系统使网卡、主机名生效,该脚
本只执行一次,如果执行失败使用的是openstack分配的动态地址(也可以到虚拟机内部执行sh /tmp/init.sh);
如果修改虚拟机模板需要重新执行上面的3)、4)、步骤;
(13)修改网卡:
因为台虚拟机的网卡在重启的时候都是不一
样的,需要清除网卡的唯一标识;
vim /etc/sysconfig/network-scripts/ifcfg-eth0
TYPE=Ethernet
BOOTPROTO=dhcp
NAME=eth0
DEVICE=eth0
ONBOOT=yes
(14)关闭虚拟机:
shutdown -h now
(15)在宿主机上初始化虚拟机镜像:
1)清除网络相关硬件生成信息(这里不使用该命令);
此操作会清理一些个性操作,比如/etc/rc.d/rc.local信息,清空/tmp/目录中
的文件等,如果配置了个性化操作,不要使用该命令,如果是全新的系统可以使用该命令;
yum install libguestfs-tools
virt-sysprep -d centos
2)压缩虚拟机镜像:
qemu-img convert -c -O qcow2 /tmp/centos.qcow2 /tmp/centos7.qcow2
(16)在控制节点上传镜像到glance:
1)获得管理员的身份:
. /scripts/admin-openstack.sh
#提示也可以登录界面上传专属于自己项目的镜像;
2)上传公共镜像:
openstack image create "CentOS-7.5-x86_64" \
--file /tmp/centos7.qcow2 \
--disk-format qcow2 --container-format bare \
--public
3)镜像位置:
du -sh /var/lib/glance/images/0a0362a3-5180-4347-8b4a-a74930378489
898M /var/lib/glance/images/0a0362a3-5180-4347-8b4a-a74930378489
(17)使用镜像创建虚拟机:
1)使用admin用户登录创建镜像的实例类型:
2)使用demo用户登录创建虚拟机:
提示:第一次使用镜像创建虚拟机时需要拷贝镜像到计算节点,孵化的过程可能有点慢,等下次再创建虚拟机就会快很多了;
3)验证:
在控制节点免秘钥登录新建的虚拟机;
[root@controller ~]# ssh -p22 root@10.0.0.71
Last login: Wed Apr 3 16:07:56 2019 from 10.0.0.11
[root@web-node1 ~]# ping www.baidu.com
PING www.a.shifen.com (183.232.231.172) 56(84) bytes of data.
64 bytes from 183.232.231.172 (183.232.231.172): icmp_seq=1 ttl=128 time=39.2 ms
64 bytes from 183.232.231.172 (183.232.231.172): icmp_seq=2 ttl=128 time=34.2 ms
^C
--- www.a.shifen.com ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1004ms
rtt min/avg/max/mdev = 34.284/36.757/39.230/2.473 ms
2、创建openstack-windows镜像:
下载已经做好的的镜像:https://docs.openstack.org/image-guide/obtain-images.html#microsoft-windows
(1)安装软件包:
yum install -y qemu-kvm libvirt virt-install
systemctl enable libvirtd
systemctl start libvirtd
(2)上传windows镜像到/tmp/目录下;
(3)下载windows驱动插件:
cd /tmp/
wget https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso
(4)创建虚拟机磁盘:
qemu-img create -f qcow2 /tmp/ws2012r2.qcow2 15G
(5)创建虚拟机:
virt-install --virt-type kvm --name ws2012r2 --ram 1024 \
--network bridge=br0,model=virtio \
--disk /tmp/ws2012r2.qcow2,format=qcow2,device=disk,bus=virtio \
--disk /tmp/cn_windows_server_2012_r2_x64_dvd_2707961.iso,device=cdrom,bus=ide \
--disk /tmp/virtio-win-0.1.141.iso,device=cdrom,bus=ide \
--graphics vnc,listen=0.0.0.0 --noautoconsole \
--os-type=windows --os-variant=win2k12r2 \
--check path_in_use=off
提示:桥接网卡的建立方法参考文档'6、安装kvm虚拟机:';
(6)安装虚拟机和虚拟机调优:
参考文档'6.11、制作windows虚拟机';
虚拟机密码是:a123456A
(7)将PowerShell执行策略设置为不受限制:
因为Cloudbase-Init在实例引导期间需要运行脚本;
1)更改命令:
PS C:\Users\Administrator> Set-ExecutionPolicy Unrestricted
执行策略更改
执行策略可帮助你防止执行不信任的脚本。更改执行策略可能会产生安全风险,如 http://go.microsoft.com/fwlink/?LinkID=135170
中的 about_Execution_Policies 帮助主题所述。是否要更改执行策略?
[Y] 是(Y) [N] 否(N) [S] 挂起(S) [?] 帮助 (默认值为“Y”): Y
2)查看更改:
PS C:\Users\Administrator> Get-ExecutionPolicy
Unrestricted
(8)安装Cloudbase-Init插件:
1)下载插件:
cd /tmp/
wget https://www.cloudbase.it/downloads/CloudbaseInitSetup_Stable_x64.msi
2)安装:
3)修改Cloud-Init的配置文件:
在C:\Program Files\Cloudbase Solutions\Cloudbase-init\conf\cloudbase-init.conf文件末尾添加如下内容:
netbios_host_name_compatibility=false
retry_count=40
retry_count_interval=5
first_logon_behaviour=no
[openstack]
add_metadata_private_ip_route=False
#使Windows系统的hostname长度支持到63个字符,默认最大时15个字符;
#获取metadata的重试次数;
#获取metadata的间隔时间,默认单位是秒;
#选择密码注入方式首次登录时不修改密码,系统默认强制用户修改登录密码;
#防止Windows添加默认路由导致metadata网络不通;
4)删除Cloudbase-Init安装包;
(9)将系统的网络设置为dhcp模式:
(10)初始化操作系统,使系统保持唯一的用户id:
1)注意:此操作会让操作系统保持唯一的id,尤其是域操作,必须保证域中操作系统用户id的唯一性;此
操作会删除用户的个性化操作,清除administrator的密码,登录时需要更改密码,激活的系统需要重新注册,本文使用了该方法;
如果操作系统不需要加入域,可以忽略此操作,系统不需再次注册,也不需要首次登录时修改administrator的密码;
查看当前系统用户的id的方法:在cmd窗口中输入'whoami /user'命令即可查看;
2)初始化:
清理回收站中的内容;
C:\Windows\System32\Sysprep.exe
(11)上传镜像到glance:
1)压缩镜像:
qemu-img convert -c -O qcow2 /tmp/ws2012r2.qcow2 /tmp/ws2012r2-model.qcow2
2)获得keystone管理员的权限:
. /scripts/admin-openstack.sh
3)上传:
openstack image create "ws2012r2-x86_64" \
--file /tmp/ws2012r2-model.qcow2 \
--disk-format qcow2 --container-format bare \
--public
(12)创建实例类型:
(13)创建实例:
(14)登录虚拟机:
1)通过dashboard控制台或者是vnc连接虚拟机;
2)修改administrator密码;
3)用修改后的面登录虚拟机;
4)查看系统的配置;
(15)验证:
[root@controller ~]# ping 10.0.0.77
PING 10.0.0.72 (10.0.0.72) 56(84) bytes of data.
64 bytes from 10.0.0.72: icmp_seq=1 ttl=128 time=9.53 ms
64 bytes from 10.0.0.72: icmp_seq=2 ttl=128 time=22.0 ms
64 bytes from 10.0.0.72: icmp_seq=3 ttl=128 time=17.8 ms
64 bytes from 10.0.0.72: icmp_seq=4 ttl=128 time=14.2 ms
^C
--- 10.0.0.72 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3006ms
rtt min/avg/max/mdev = 9.534/15.901/22.023/4.602 ms
7.8、如何制作openstack镜像的更多相关文章
- 完整部署CentOS7.2+OpenStack+kvm 云平台环境(4)--用OZ工具制作openstack镜像
在部署openstack云平台环境的时候,需要上传镜像到glance. 首先下载iso镜像,这里下载了centos6.5镜像,放到/usr/local/src目录下然后用OZ工具制作openstack ...
- 用OZ工具制作openstack镜像
在部署openstack云平台环境的时候,需要上传镜像到glance. 首先下载iso镜像,这里下载了centos7.2镜像,放到/iso目录下 然后用OZ工具制作openstack的镜像 1.安装l ...
- OpenStack 镜像制作
Contents [hide] 1 Centos6.5 img制作 1.1 基础环境安装 1.2 下载或从本地上传系统镜像 1.3 启动服务 1.4 建立镜像文件 1.5 通过virt-install ...
- 如何构建OpenStack镜像
本文以制作CentOS7.2镜像为例,详细介绍手动制作OpenStack镜像详细步骤,解释每一步这么做的原因.镜像上传到OpenStack glance,支持以下几个功能: 支持密码注入功能(nova ...
- OpenStack 镜像制作之cloud-init
Contents [hide] 1 背景 2 密钥登录 2.1 密钥登录的原理 2.1.1 openstack的私钥 2.1.2 密码注入 = 2.1.3 实际遇到的情况 2.1.4 解决办法 背景 ...
- OpenStack Nova 制作 Windows 镜像
OpenStack Nova 制作 Windows 镜像 windows虚拟机ubuntuimage防火墙云计算 本贴转自http://www.vpsee.com 上次 VPSee 给 OpenS ...
- 制作OpenStack用的RHEL7系统镜像
制作OpenStack使用的RHEL7系统镜像,并进行相关设置,安装XRDP以进行远程访问. 1.在KVM中安装RHEL7.2客户机: 2.设置网卡为dhcp并onboot=yes,使得虚拟机能自动获 ...
- OpenStack镜像制作-CentOS
云平台中镜像还是很重要的,提供各种定制化的镜像使得用户体验更好. 最开始玩OpenStack的时候用的是安装文档中提到的cirros,其密码cubswin:) 刚开始感觉很怪,现在已经可以随手打出.p ...
- 制作openstack用的centos6.5镜像
目的: 在centos6.5操作系统环境下制作一个centos6.5的kvm镜像,安装cloud-init,能自己主动扩展根分区 一.制作环境: 操作环境是在openstack平台开一个实例.装的是c ...
随机推荐
- Git-【技术干货】工作中Git的使用实践
Git-[技术干货]工作中Git的使用实践 置顶 2019-09-17 21:02:16 web洋仔 阅读数 11444更多 分类专栏: Git 版权声明:本文为博主原创文章,遵循CC 4.0 B ...
- IT菜鸟之网线制作
网线是属于OSI七层模型中的物理层:网络中的数据传输媒介 备注:OSI七层模型后面会记录 网线制作所需要的资源素材: 1.网线 2.水晶头(类型:电话线RJ11,宽带线RJ45) 3.网线钳(非必需) ...
- 027. Python面向对象的__init__方法
__init__魔术方法(构造方法) 触发时机:实例化对象,初始化的时候触发 功能:为对象添加成员 参数:参数不固定,至少一个self参数 返回值:无 基本用法,至少含有一个参数 class MyCl ...
- 022.Python模块序列化模块(json,pickle)和math模块
序列化模块 一 序列化模块 pickle 1.1 基本认识 序列化:把不能够直接存储的数据变成可存储的过程就是序列化 反序列化:把储存的数据拿出来恢复成原来的数据类型就是反序列化 例如,一个文件不可 ...
- 使用nuget包下载Entity Framework6.0无法使用模型类与数据库上下文自动生成controller与view
解决方法:卸载掉原有的6.0版本EF,从控制台安装5.0版本的. >工具>库程序包管理器>程序包管理器控制台.在PM>后面输入安装命令. 命令如下 Install-Packag ...
- python工业互联网应用实战16-前后端分离模式之修改与删除
前一章节介绍了List页面的JQuery技术栈的迁移,这一章节我们花一些篇幅来说说修改/查看页面的技术栈迁移.相对于List的获取数据,修改页面涉及到数据Post提交到后台更新数据库.我们仍旧小步迭代 ...
- 代码动态更换MeshRenderer的材质Materials
public class metrailstest : MonoBehaviour { Material[] m; Material i; public Material[] n; int index ...
- Java日期时间API系列38-----一种高效的工作日计算计算方法
如果没有节日放假调休的话,工作日很好计算,周一到周五就是工作日,但因为有节日放假调休,使得这个计算需要外部放假安排数据来支持.计算原理: 先按照放假安排数据计算,再按照周一周五计算. 下面以Local ...
- .Net Redis实战——事务和数据持久化
Redis事务 Redis事务可以让一个客户端在不被其他客户端打断的情况下执行多个命令,和关系数据库那种可以在执行的过程中进行回滚(rollback)的事务不同,在Redis里面,被MULTI命令和E ...
- The Superego 实验四 团队作业1:软件研发团队组建
项目 内容 课程班级博客链接 班级博客链接 这个作业要求链接 作业要求链接 团队名称 The Superego 团队的课程学习目标 (1)组建团队,建设团队文化,申请开通团队博客 (2)团队之间相互协 ...