深入理解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. angular+ionic -- 启动命令

    初始angular+ionic项目,启动需ionic的启动命令: ionic serve

  2. Java读取图片exif信息实现图片方向自动纠正

    起因 一个对试卷进行OCR识别需求,需要实现一个功能,一个章节下的题目图片需要上下拼接合成一张大图,起初写了一个工具实现图片的合并,程序一直很稳定的运行着,有一反馈合成的图片方向不对,起初怀疑是本身图 ...

  3. Mybatis-plus 下

    Mybatis-plus 下 查询操作 1.查询单个用户 @Test public void testSelectById(){ User user = userMapper.selectById(1 ...

  4. 简单模拟实现javascript中的call、apply、bind方法

    目录 引子 隐式丢失 硬绑定 实现及原理分析 总体实现(纯净版/没有注释) 写在最后 引子 读完<你不知道的JavaScript--上卷>中关于this的介绍和深入的章节后,对于this的 ...

  5. (Set, Map, Collections工具类)JAVA集合框架二

    Java集合框架部分细节总结二 Set 实现类:HashSet,TreeSet HashSet 基于HashCode计算元素存放位置,当计算得出哈希码相同时,会调用equals判断是否相同,相同则拒绝 ...

  6. 源码编译安装MySQL8.0.20

    1 概述 本文章主要讲述了如何从源码编译安装MySQL社区版8.0.20,首先会介绍一些编译安装的相关知识,然后开始编译安装 2 源码编译安装的相关知识 2.1 make与configure make ...

  7. python程序—一键部署keepalived+lvs

    一个DS 两个RS keepalived端在/root下准备好已经修改好的配置文件 import paramiko # keepalived端 需要修改的信息 keepalived_ip='192.1 ...

  8. 10- JMeter5.1.1 工具快速入门

    什么是JMeter JMeter是Apache组织开发的开源软件,由Java语言实现. 主要用于软件系统性能测试,他最初被设计用于web测试,后来被扩展到其他领域. Jmeter特点 http://w ...

  9. jQuery监控键盘事件

    <!doctype html> <html lang="en"> <head> <meta charset="utf-8&quo ...

  10. 【SpringBoot】SpringBoot 处理后端返回的小数(全局配置 + 定制化配置)

    一.抛出问题: 现在的项目中,存在这样的几个问题: 问题一.数据库存的数据类型是BigDecimal,或者代码中计算需要返回BigDecimal的值,由于BigDecimal返回给前端可能存在精度丢失 ...