深入理解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”命令修改
  • 启动KVM虚拟机
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-手动制作qcow2镜像的更多相关文章

  1. OpenStack Nova 制作 Windows 镜像

    OpenStack Nova 制作 Windows 镜像   windows虚拟机ubuntuimage防火墙云计算 本贴转自http://www.vpsee.com 上次 VPSee 给 OpenS ...

  2. 手动制作Docker镜像

    手动制作 Docker 镜像 前言 a. 本文主要为 Docker的视频教程 笔记. b. 环境为 CentOS 7.0 云服务器(用来用去感觉 Windows 的 Docker 出各种问题,比如使用 ...

  3. OpenStack手动制作CentOS 7 KVM镜像

    在前面讲解KVM的时候,我们已经学习了如何制作KVM镜像,那么制作OpenStack使用的镜像和KVM是有一些区别的. 1.    下载CentOS 7官方ISO安装镜像这里使用国内阿里云的镜像源进行 ...

  4. centos7下手动制作trove镜像

    获取镜像 [root@bldattet1 ~]#  wget http://mirrors.aliyun.com/centos/7.5.1804/isos/x86_64/CentOS-7-x86_64 ...

  5. 使用ISO文件制作openstack使用的coreOS镜像

    OpenStack源码交流群: 538850354 本篇文章是使用coreOS ISO文件手动制作openstack使用的qcow2镜像文件,关于coreOS的介绍,可以看这里 使用服务器:cento ...

  6. [图文] Fedora 28 使用 Virt-Manager 制作并优化QCOW2镜像——Windows 10 1709

    实验说明: 云计算的发展使得桌面上云,windows 10就必不可少,这一章就如何制作QCOW2镜像文件并优化进行说明. 实验环境: 宿主机系统   :Fedora 28 WorkStation 虚拟 ...

  7. Dockerfile 自动制作 Docker 镜像(一)—— 基本命令

    Dockerfile 自动制作 Docker 镜像(一)-- 基本命令 前言 a. 本文主要为 Docker的视频教程 笔记. b. 环境为 CentOS 7.0 云服务器 c. 上一篇:手动制作Do ...

  8. #openstack centos6 centos7 kvm镜像制作

    #openstack centos6 centos7 kvm 镜像制作 openstack windows 2008镜像 制作 http://www.cnblogs.com/elvi/p/800129 ...

  9. 制作openstack使用的Ubuntu镜像

    一.环境准备 OS:Ubuntu-14.04 制作镜像版本:Ubuntu-14.04.4-server-amd64.iso 查看是否支持虚拟化(有输出代表支持,否则在BIOS页面中设置即可): egr ...

随机推荐

  1. 计划任务统一集中管理系统cronsun(替代crontab)

    一.背景 crontab 是 Linux 系统里面最简单易用的定时任务管理工具,相信绝大多数开发和运维都用到过,很多业务系统的定时任务都是通过 crontab 来定义的,时间长了后会发现存在很多问题: ...

  2. Flex属性你真的搞清楚了吗?我深表怀疑

    背景 在使用弹性布局实现两侧宽度固定,中间宽度自适应的效果时,发现自己理解的和实际效果不一致,所以亲自实践验证了一个flex属性的诸多场景的表现,不仅解开了我之前使用过程遇到的疑惑,而且发现了许多自己 ...

  3. 全网最详细的Linux命令系列-cat命令

    cat命令的用途是连接文件或标准输入并打印.这个命令常用来显示文件内容,或者将几个文件连接起来显示,或者从标准输入读取内容并显示,它常与重定向符号配合使用. 命令格式: cat [选项] [文件].. ...

  4. python基础(三):元组

    什么是元组 有时候你需要创建一系列不可修改的元素,元组可以满足这种需求.Python将不能修改的值称为不可变的,而不可变的列表被称为元组. 元组的定义和访问 元组使用圆括号来定义,我们已经知道:元组也 ...

  5. 开源一周岁,MindSpore新特性巨量来袭

    摘要:MindSpore很多新特性与大家见面了,无论是在效率提升.易用性,还是创新方面,都是干货满满. 最近,AI计算框架是业界的热点,各大厂商纷纷投身AI框架的自研发,究其原因:AI框架在整个人工智 ...

  6. (数据科学学习手札117)Python+Dash快速web应用开发——交互表格篇(下)

    本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 这是我的系列教程Python+Dash快速web ...

  7. nmap使用/参数,及绕过防火墙

    nmap是什么? 它是一种一个很强大的扫描工具,端口,版本号,统统都可以给你扫出来 我的IP网段:192.168.1.0 咱们先找一个主机随便玩玩把,反正没有害处,最多被防火墙拦截了 nmap -sP ...

  8. Chrome扩展开发基础教程(附HelloWorld)

    1 概述 Chrome扩展开发的基础教程,代码基于原生JS+H5,教程内容基于谷歌扩展开发官方文档. 2 环境 Chrome 88.0.4324.96 Chromium 87.0.4280.141 B ...

  9. 12.Quick QML-QML 布局(Row、Column、Grid、Flow和嵌套布局) 、Repeater对象

    1.Row布局 Row中的item可以不需要使用anchors布局,就能通过行的形式进行布局. 并且item可以使用Positioner附加属性来访问有关其在Row中的位置及其他信息. 示例如下所示, ...

  10. sql指令,增,删,查,改

    增 insert into table (name,sex,age) value('张三','男','20')   向表中的name,sex,age,分别添加张三,男,20的内容 查 select  ...