深入理解OpenStack-手动制作qcow2镜像
2018-01-18
手动制作镜像
1
|
官方虽提供qcow2系统镜像,但对于有需求的企业来说,还是定制镜像比较靠谱,下面就手动定制一个镜像
|
1 2 3 4 5 6 7 8 9 10 11
|
手动创建镜像需要确保libvirt运行有default网络,这个网络可以给虚拟机提供上网服务。
查看当前是否启用default网络 [root@compute ~]# virsh net-list Name State Autostart Persistent ---------------------------------------------------------- default active yes yes 注:如果没有启用,使用以下命令启用default virsh net-start default
|
1 2 3 4 5 6 7 8 9 10 11 12 13
|
(1)创建一个目录mkdir -p /data 上传iso镜像到/data目录
(2)创建一个10G的磁盘文件给虚拟机使用 qemu-img create -f qcow2 /data/centos.qcow2 10G
(3)安装 virt-install --virt-type kvm --name centos7.4_x86_64 --ram 1024 \ --disk /data/centos.qcow2,format=qcow2 \ --network network=default \ --graphics vnc,listen=0.0.0.0 --noautoconsole \ --os-type=linux \ --location=/data/CentOS-7-x86_64-Minimal-1611.iso
|
- 使用TightVNC Viewer客户端连接虚拟机
1 2 3 4 5 6
|
要想连接虚拟机就需要执行一条命令来查看刚才新建虚拟机的端口信息 [root@compute ~]# netstat -lntup |grep kvm tcp 0 0 0.0.0.0:5900 0.0.0.0:* LISTEN 90011/qemu-kvm tcp 0 0 0.0.0.0:5901 0.0.0.0:* LISTEN 41365/qemu-kvm
可以看到,当前运行有两台虚拟机,我刚刚创建的虚拟机端口是5901。
|
1 2 3 4 5 6
|
运行TightVNC Viewer客户端,Remote Host输入:192.168.56.12:5901 进行连接。连接成功后,就看到操作系统的引导界面了,这时候可以对虚拟机进行系统安装了。也可以根据企业需求进行个性化安装。
安装结束后,点击reboot
注:只有配置了KVM虚拟机,libvirt就会生成一个与操作系统对应的xml文件,其记录了kvm虚拟机的状态。路径如下:/etc/libvirt/qemu/CentOS-6.6-x86_64.xml 注:此文件只能通过“virsh edit”命令修改
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
列出所有虚拟机 [root@compute ~]# virsh list --all Id Name State ---------------------------------------------------- 7 instance-00000003 running 12 centos7.4_x86_64 shut off 启动虚拟机 [root@compute ~]# virsh start centos7.4_x86_64 [root@compute ~]# virsh list --all
当此虚拟机再次启动后,再使用TightVNC Viewer客户端,Remote Host输入:192.168.56.12:5901 进行连接。
此时可以在此系统中编辑已经提前准备并测试好的系统初始化脚本,并让脚本开机后运行,测试无误后将此虚拟机关机。(此步骤是把开机初始化脚本给封装到镜像中)
在这个虚拟机系统中运行shutdown -h now 即可
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
|
#!/bin/bash
set_key(){ if [ ! -d /root/.ssh ]; then mkdir -p /root/.ssh chmod 700 /root/.ssh fi # Fetch public key using HTTP ATTEMPTS=30 FAILED=0 while [ ! -f /root/.ssh/authorized_keys ]; do 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 "*****************" else FAILED=`expr $FAILED + 1` if [ $FAILED -ge $ATTEMPTS ];then echo "Failed" break fi sleep 5 fi done }
set_hostname(){ echo "hehe" SET_HOSTNAME=$(curl -s http://169.254.169.254/2009-04-04/meta-data/hostname | awk -F '.' '{print $1}') VM_HOSTNAME="$SET_HOSTNAME".example.com hostnamectl set-hostname $VM_HOSTNAME }
set_static_ip(){ echo "hehe" /bin/cp /tmp/ifcfg-eth0-example /etc/sysconfig/network-scripts/ifcfg-eth0 VM_IPADDR=$(curl -s http://169.254.169.254/2009-04-04/meta-data/local-ipv4) sed -i "s/9.9.9.9/$VM_IPADDR/g" /etc/sysconfig/network-scripts/ifcfg-eth0 }
main(){ set_key; set_hostname; set_static_ip; rm -f /tmp/get_metadata.sh /bin/cp /tmp/rc.local /etc/rc.d/rc.local } main
|
将制作好的/data/centos.qcow2镜像文件上传到Glance
1 2 3 4 5 6 7 8 9 10
|
注:在控制节点进行镜像上传
(1)source变量 source /scripts/admin-openrc
(2)镜像上传 openstack image create "CentOS7.4_x86_64" --file /data/centos.qcow2 \ --disk-format qcow2 --public
(3)openstack dashboard中创建虚拟机,并验证脚本执行情况
|
附录:virsh命令-使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
|
virsh --help
virt-clone -o centos7_mini -n centos7_mini15 --auto-clone #克隆mini,新克隆的为mini15 -o #原始机名字,必须为关闭或暂停状态 -n #新客户机的名称 --auto-clone #从原始客户机配置中自动生成克隆名称和存储路径 --replace #不检查命名冲突,覆盖任何使用相同名称的客户机 -f #可以指定克隆后的主机镜像放在指定目录下
virsh autostart xxx #让子机随宿主机开机自动启动 virsh autostart --disable xxx #解除自动启动
virt-install #建立kvm虚拟机 virsh list #查看正在运行的KVM虚拟机 virsh list --all #查看所有KVM虚拟机 virsh start name #启动KVM虚拟机 virsh shutdown name #正常关闭KVM虚拟机 virsh destroy name #强制关闭KVM虚拟机(类似于直接断电) virsh suspend name #挂起KVM虚拟机 virsh resume name #恢复挂起的KVM虚拟机 virsh dumpxml name #查看KVM虚拟机配置文件,可以把输出的内容定义到xml里,用来克隆迁移用。 virsh edit name #编辑KVM虚拟机的xml配置文件 virsh define /etc/libvirt/qemu/name.xml #定义注册虚拟机,需要先查看xml文件对应的镜像,img等路径是否存在或修改指定路径 virsh undefine name #彻底删除KVM虚拟机,不可逆,如果想找回来,需要备份/etc/libvirt/qemu的xml文件
|
注:gentoo使用livecd安装的过程中,关于安装文件如何上传到livecd的问题,解决方案如下:
1
|
kvm安装安装启动livecd,然后通过桥接联网将文件上传,再执行脚本安装和初始化。最后将qcow2文件上传到glance。最后通过openstack dashboard来使用qcow2镜像安装gentoo
|
- OpenStack Nova 制作 Windows 镜像
OpenStack Nova 制作 Windows 镜像 windows虚拟机ubuntuimage防火墙云计算 本贴转自http://www.vpsee.com 上次 VPSee 给 OpenS ...
- 手动制作Docker镜像
手动制作 Docker 镜像 前言 a. 本文主要为 Docker的视频教程 笔记. b. 环境为 CentOS 7.0 云服务器(用来用去感觉 Windows 的 Docker 出各种问题,比如使用 ...
- OpenStack手动制作CentOS 7 KVM镜像
在前面讲解KVM的时候,我们已经学习了如何制作KVM镜像,那么制作OpenStack使用的镜像和KVM是有一些区别的. 1. 下载CentOS 7官方ISO安装镜像这里使用国内阿里云的镜像源进行 ...
- centos7下手动制作trove镜像
获取镜像 [root@bldattet1 ~]# wget http://mirrors.aliyun.com/centos/7.5.1804/isos/x86_64/CentOS-7-x86_64 ...
- 使用ISO文件制作openstack使用的coreOS镜像
OpenStack源码交流群: 538850354 本篇文章是使用coreOS ISO文件手动制作openstack使用的qcow2镜像文件,关于coreOS的介绍,可以看这里 使用服务器:cento ...
- [图文] Fedora 28 使用 Virt-Manager 制作并优化QCOW2镜像——Windows 10 1709
实验说明: 云计算的发展使得桌面上云,windows 10就必不可少,这一章就如何制作QCOW2镜像文件并优化进行说明. 实验环境: 宿主机系统 :Fedora 28 WorkStation 虚拟 ...
- Dockerfile 自动制作 Docker 镜像(一)—— 基本命令
Dockerfile 自动制作 Docker 镜像(一)-- 基本命令 前言 a. 本文主要为 Docker的视频教程 笔记. b. 环境为 CentOS 7.0 云服务器 c. 上一篇:手动制作Do ...
- #openstack centos6 centos7 kvm镜像制作
#openstack centos6 centos7 kvm 镜像制作 openstack windows 2008镜像 制作 http://www.cnblogs.com/elvi/p/800129 ...
- 制作openstack使用的Ubuntu镜像
一.环境准备 OS:Ubuntu-14.04 制作镜像版本:Ubuntu-14.04.4-server-amd64.iso 查看是否支持虚拟化(有输出代表支持,否则在BIOS页面中设置即可): egr ...
随机推荐
- Hadoop学习笔记—Yarn
目录 一些基本知识 ResourceManager 的恢复 Resource Manager的HA YARN Node Labels YARN Node Attributes Web Applicat ...
- ASP.NET网页开发基础(7)
整理了一点的小知识点: 1.ASP.NET网页扩展名: .asax 全局应用程序类的扩展名 .xml 访问网页时的扩展名 .htm .ascx Web用户控件的扩展名 ...
- python基础(补充):递归函数
在讲解递归函数之前我们先了解一下栈堆 单独讲栈堆是数据结构 栈:后进先出的一种数据结构 堆:排序后的一种树状数据结构 栈区堆区是内存空间 栈区:按照后进先出的数据结构(栈),无论创建或销毁都是自动为数 ...
- MyBatis-Plus笔记(入门)
作者:故事我忘了¢个人微信公众号:程序猿的月光宝盒 官方文档 https://mybatis.plus/guide/ 本篇基于springboot,mybatis Plus的版本为3.4.2 本篇对应 ...
- 聊聊 OAuth 2.0 的 token expire_in 使用
问题背景 有同学私信问了这样的问题,访问 pig4cloud 的演示环境 查看登录请求 network 返回报文如下: { "access_token":"16d3579 ...
- Windows搭建Linux子系统(WSL)详细教程
介绍 WSL(windows下的Linux子系统) Windows Subsystem for Linux(简称WSL)是一个在Windows 10上能够运行原生Linux二进制可执行文件(ELF格式 ...
- linux下Mysql 8.0.19 编译安装
1 前言 linux下安装MySQL的方式有很多种,包括以仓库的方式安装(yum,apt,zypper),以包的方式安装(rpm,deb),以docker方式安装,从压缩包解压安装,从源码编译安装,这 ...
- IP Networks UVA - 1590
Alex is administrator of IP networks. His clients have a bunch of individual IP addresses and he de ...
- Day09_45_Set集合_SortedSet02
SortedSet * TreeSet是SortedSet接口的实现类,TreeSet底层是一个TreeMap,相当于TreeMap中的key. * SortedSet集合是如何实现自动排序的呢? - ...
- Java代理简述
1.什么是代理? 对类或对象(目标对象)进行增强功能,最终形成一个新的代理对象,(Spring Framework中)当应用调用该对象(目标对象)的方法时,实际调用的是代理对象增强后的方法,比如对功能 ...