深入理解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. 阳明-K8S训练营全部文档-2020年08月11日14:59:02更新

    阳明-K8S训练营全部文档 Docker 基础 简介 安装 基本操作 Dockerfile Dockerfile最佳实践 Kubernetes 基础 简介 安装 资源清单 Pod 原理 Pod 生命周 ...

  2. Hadoop学习笔记—Yarn

    目录 一些基本知识 ResourceManager 的恢复 Resource Manager的HA YARN Node Labels YARN Node Attributes Web Applicat ...

  3. mysql 批量操作,已存在则修改,不存在则insert,同时判断空选择性写入字段

    注:如果是批量插入需要在 Java 连接数据库的字串中设置 &allowMultiQueries=true 针对单行数据有则修改无则新增 本案例的建表语句是: -- auto-generate ...

  4. BUAA_OS lab4 难点梳理

    BUAA_OS lab4 难点梳理 lab4体会到了OS难度的飞升.实验需要掌握的重点有以下: 系统调用流程 进程通信机制 fork 本lab理解难度较高,接下来将以以上三部分分别梳理. 系统调用 概 ...

  5. NPM 与 NPX 区别

    NPM 和 NPX 区别 NPM Node Package Manager npm 是 Node.js 的软件包管理器,其目标是自动化的依赖性和软件包管理 NPX npx 是执行 Node 软件包的工 ...

  6. 2. linux下如何上传和下载文件

    一. 安装工具包 yum install -y lrzsz lrzsz是一个unix通信套件提供的X,Y,和ZModem文件传输协议,可以用在windows与linux 系统之间的文件传输,体积小速度 ...

  7. Oracle-DG最大保护模式下,dg备库出现问题对主库有什么影响?

    一.需求 疑问?Oracle最大保护模式下,dg备库出现问题,影响主库吗? 我们都知道Oracle最大保护模式的意思是oracle不允许数据丢失,1条记录都不行! 那么备库有问题? oracle主库还 ...

  8. The Blocks Problem UVA - 101

      Many areas of Computer Science use simple, abstract domains for both analytical and empirical stud ...

  9. 根据数据源自定义字段实现动态导出Excel

    前言 最近遇到了一个需求,需要导出各种订单数据,可能是因为懒吧,不想重新写查询然后导出数据:就有了下边的这些操作了. 具体实现方式 1),定义一个泛型类来接收我们要导出的数据源,(需要EPPlus包) ...

  10. composer 遇见问题 整理

    修改镜像源:改为阿里云镜像 composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ 报错:Con ...