深入理解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 ...
随机推荐
- 【Azure Developer】Azure Graph SDK获取用户列表的问题: SDK中GraphServiceClient如何指向中国区的Endpoint:https://microsoftgraph.chinacloudapi.cn/v1.0
问题描述 想通过Java SDK的方式来获取Azure 门户中所列举的用户.一直报错无法正常调用接口,错误信息与AAD登录认证相关,提示tenant not found. 想要实现的目的,通过代码方式 ...
- java面试-谈谈你对OOM的理解
一.OOM(OutOfMemoryError): 对象无法释放或无法被垃圾回收,造成内存浪费,导致程序运行速度减慢,甚至系统崩溃等严重后果,就是内存泄漏.多个内存泄漏造成可使用内存变少,会导致内存溢出 ...
- MyBatis笔记(六)
1. 动态SQL 1.1 介绍 概念:**动态SQL指的是根据不同的查询条件 , 生成不同的Sql语句.* 官网描述: MyBatis 的强大特性之一便是它的动态 SQL.如果你有使用 JDBC 或其 ...
- vite 动态 import 引入打包报错解决方案
关注公众号: 微信搜索 前端工具人 ; 收货更多的干货 原文链接: 自己掘金文章 https://juejin.cn/post/6951557699079569422/ 关注公众号: 微信搜索 前端工 ...
- 浅入Kubernetes(12):Deployment 的升级、回滚
目录 更新 上线 会滚 缩放 Deployment 直接设置 Pod 水平自动缩放 比例缩放 暂停 Deployment 上线 本篇内容讨论 Pod 的更新和回滚,内容不多. 更新 打开 https: ...
- RandomForestClassifier参数
[RandomForestClassifier] 参数 n_estimators : 随机森林中树的个数,即学习器的个数. max_features : 划分叶子节点,选择的最大特征数目 n_feat ...
- 粗浅聊聊Python装饰器
浅析装饰器 通常情况下,给一个对象添加新功能有三种方式: 直接给对象所属的类添加方法: 使用组合:(在新类中创建原有类的对象,重复利用已有类的功能) 使用继承:(可以使用现有类的,无需重复编写原有类进 ...
- 👰🏿♂️
出于利益我便是绝对的利己主义者,凡事以自己为根本,以求自己利益最大化而不顾他人.社会.国家: 出于兴趣考我便希望全天下的人都好,都可爱,都不必受餐食无饱和居无定所的困苦,不必因感情的躁动而心情颠簸,因 ...
- 软件篇-02-基于ZED 2和ORB_SLAM2的SLAM实践
时隔两周,我又回来了. 本期内容如题,ZED 2的SDK功能还是挺多的,包括轨迹跟踪,实时建图等等.虽然由于是商业产品,我看不到他们的源代码,但是根据使用情况来看,ZED 2内部是采用了IMU和光 ...
- hdu4496并查集的删边操作
题意: 给你一个图,问你删除一些边后还有几个连通快.. 思路: 典型的并查集删边操作,并查集的删边就是先把不删除的边并查集一边(本题没有不删除的边),然后逆序吧所有要删除的边以 ...