深入了解OpenStack:创建定制化QCOW2格式镜像的完全指南
OpenStack 创建自定义的QCOW2格式镜像
前言
建议虚机网络配置为 NAT 或 桥接,因为未来 KVM虚机 需要借助 虚机 的外网能力进行联网安装软件包
虚机在启动前,必须在 VMware Workstation 上为其开启虚拟化引擎 虚拟化 Intel VT-x/EPT 或 AMD-V
安装kvm
虚拟机安装虚拟化软件包
# 挂载光盘
[root@localhost ~]# mount /dev/cdrom /mnt
mount: /dev/sr0 is write-protected, mounting read-only
[root@localhost ~]# ls /mnt/
CentOS_BuildTag GPL LiveOS RPM-GPG-KEY-CentOS-7
EFI images Packages RPM-GPG-KEY-CentOS-Testing-7
EULA isolinux repodata TRANS.TBL# 配置本地YUM源
[root@localhost ~]# cd /etc/yum.repos.d/
[root@localhost yum.repos.d]# ls
CentOS-Base.repo CentOS-fasttrack.repo CentOS-Vault.repo
CentOS-CR.repo CentOS-Media.repo CentOS-x86_64-kernel.repo
CentOS-Debuginfo.repo CentOS-Sources.repo
[root@localhost yum.repos.d]# mkdir bak
[root@localhost yum.repos.d]# mv *.repo bak/
[root@localhost yum.repos.d]# ls
bak
[root@localhost yum.repos.d]# vim source.repo
[root@localhost yum.repos.d]# cat source.repo
[source]
name = source
baseurl = file:///mnt/
gpgcheck = 0
[root@localhost yum.repos.d]# yum clean all
[root@localhost yum.repos.d]# yum repolist all# 安装虚拟化软件包及虚拟机镜像管理工具
[root@localhost ~]# yum grouplist
Loaded plugins: fastestmirror, langpacks
There is no installed groups file.
Maybe run: yum groups mark convert (see man yum)
Loading mirror speeds from cached hostfile
source | 3.6 kB 00:00:00
(1/2): source/group_gz | 153 kB 00:00:00
(2/2): source/primary_db | 3.3 MB 00:00:00
Available Environment Groups:Minimal InstallCompute NodeInfrastructure ServerFile and Print ServerBasic Web ServerVirtualization HostServer with GUIGNOME DesktopKDE Plasma WorkspacesDevelopment and Creative Workstation
Available Groups:Compatibility LibrariesConsole Internet ToolsDevelopment ToolsGraphical Administration ToolsLegacy UNIX CompatibilityScientific SupportSecurity ToolsSmart Card SupportSystem Administration ToolsSystem Management
Done
[root@localhost ~]# yum groupinstall -y "Virtualization*"
[root@localhost ~]# yum install -y libguestfs-tools-c.x86_64
创建kvm虚拟机
# 创建目录上传ISO镜像
[root@localhost ~]# mkdir /iso
[root@localhost ~]# cd /iso/
# 将 CentOS7镜像 上传到 /iso 目录下
[root@localhost iso]# ls
CentOS-7-x86_64-DVD-2009.iso# 创建 kvm虚拟机 使用的磁盘文件
[root@localhost iso]# qemu-img create -f qcow2 /iso/centos7.qcow2 15G
Formatting '/iso/centos7.qcow2', fmt=qcow2 size=16106127360 encryption=off cluster_size=65536 lazy_refcounts=off # 创建 kvm 虚拟机
[root@localhost ~]# virt-install \
--name centos7 \
--disk path=/iso/centos7.qcow2 \
--vcpus 1 \
--memory 2048 \
--location /iso/CentOS-7-x86_64-DVD-2009.iso \
--network network=default
安装kvm虚拟机
语言选择
自动分区
网络及主机名
注意:当开启网络后,必须可以通过 DHCP 自动获取到 IP 地址,如下图
配置ROOT密码
默认采用最小化 minimal 安装
重启并测试网络
重启 kvm 创建的虚拟机,并以 root 身份登录,测试 kvm 虚机 能否连通外网
配置KVM虚拟机
修改KVM虚拟机网络配置文件
注意:是
kvm
创建的虚拟机
# 修改 kvm 虚拟机网卡配置文件,使其只包括以下 4 行内容
[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens3
[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens3
TYPE="Ethernet"
BOOTPROTO="dhcp"
DEVICE="ens3"
ONBOOT="yes"
安装 cloud-int 软件包
根据 上边 测试,kvm 虚机可正常连通外网,此时直接在线安装软件包即可。目的是为了可以获取到客户自定义元数据信息,如主机名及root密码等。
[root@localhost ~]# yum install -y cloud-utils-growpart cloud-init
Loaded plugins: fastestmirror
Determining fastest mirrors* base: mirrors.bfsu.edu.cn* extras: mirrors.jlu.edu.cn* updates: mirrors.jlu.edu.cn
base | 3.6 kB 00:00:00
extras | 2.9 kB 00:00:00
updates | 2.9 kB 00:00:00
(1/4): base/7/x86_64/group_gz | 153 kB 00:00:00
(2/4): extras/7/x86_64/primary_db | 250 kB 00:00:00
(3/4): base/7/x86_64/primary_db | 6.1 MB 00:00:00
(4/4): updates/7/x86_64/primary_db | 22 MB 00:00:01
.................................................
Complete!
编辑 cloud.cfg 文件
编辑
/etc/cloud/cloud.cfg
配置文件,在cloud_init_modules
下添加以下内容
#添加内容
- resolv-conf# 最终配置文件效果
[root@localhost ~]# vi /etc/cloud/cloud.cfg
[root@localhost ~]# cat /etc/cloud/cloud.cfg
users:- defaultdisable_root: 1
ssh_pwauth: 0mount_default_fields: [~, ~, 'auto', 'defaults,nofail,x-systemd.requires=cloud-init.service', '0', '2']
resize_rootfs_tmp: /dev
ssh_deletekeys: 1
ssh_genkeytypes: ~
syslog_fix_perms: ~
disable_vmware_customization: falsecloud_init_modules:- disk_setup- migrator- bootcmd- write-files- growpart- resizefs- set_hostname- update_hostname- update_etc_hosts- rsyslog- users-groups- ssh- resolv-conf ## 在这cloud_config_modules:- mounts- locale- set-passwords- rh_subscription- yum-add-repo- package-update-upgrade-install- timezone- puppet- chef- salt-minion- mcollective- disable-ec2-metadata- runcmdcloud_final_modules:- rightscale_userdata- scripts-per-once- scripts-per-boot- scripts-per-instance- scripts-user- ssh-authkey-fingerprints- keys-to-console- phone-home- final-message- power-state-changesystem_info:default_user:name: centoslock_passwd: truegecos: Cloud Usergroups: [adm, systemd-journal]sudo: ["ALL=(ALL) NOPASSWD:ALL"]shell: /bin/bashdistro: rhelpaths:cloud_dir: /var/lib/cloudtemplates_dir: /etc/cloud/templatesssh_svcname: sshd# vim:syntax=yaml
编辑network文件
编辑
/etc/sysconfig/network
配置文件,使其包含以下内容,避免访问 EC2 元数据服务时出现问题。
#添加内容
NOZEROCONF=yes# 最终配置文件效果
[root@localhost ~]# vi /etc/sysconfig/network
[root@localhost ~]# cat /etc/sysconfig/network
# Created by anaconda
NOZEROCONF=yes# 执行命令使参数生效
[root@localhost ~]# grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-3.10.0-1160.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-1160.el7.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-ccaf1e6485aa46c3868726e2bb360253
Found initrd image: /boot/initramfs-0-rescue-ccaf1e6485aa46c3868726e2bb360253.img
done
编辑 grub文件
编辑
/etc/default/grub
配置文件,使其包含以下引导选项内容,为了确保控制台的信息出现在 dashboard 的日志标签页中,以及 nova console-log 日志的输出内容中。
#添加内容
GRUB_CMDLINE_LINUX_DEFAULT="console=tty0 console=ttyS0,115200n8"# 最终配置文件效果
[root@localhost ~]# vi /etc/default/grub
[root@localhost ~]# cat /etc/default/grub
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet"
GRUB_CMDLINE_LINUX_DEFAULT="console=tty0 console=ttyS0,115200n8"
GRUB_DISABLE_RECOVERY="true"
关闭KVM虚拟机
[root@localhost ~]# init 0
创建QCOW2镜像
注意:以下步骤在 虚拟机 中操作,不是 kvm 虚拟机
重置并清理镜像
[root@localhost ~]# virsh list --allId Name State
----------------------------------------------------- centos7 shut off[root@localhost ~]# virt-sysprep -d centos7
[ 0.0] Examining the guest ...
[ 8.8] Performing "abrt-data" ...
[ 8.8] Performing "backup-files" ...
[ 9.5] Performing "bash-history" ...
[ 9.6] Performing "blkid-tab" ...
[ 9.6] Performing "crash-data" ...
[ 9.6] Performing "cron-spool" ...
[ 9.6] Performing "dhcp-client-state" ...
[ 9.6] Performing "dhcp-server-state" ...
[ 9.6] Performing "dovecot-data" ...
[ 9.6] Performing "logfiles" ...
[ 9.6] Performing "machine-id" ...
[ 9.7] Performing "mail-spool" ...
[ 9.7] Performing "net-hostname" ...
[ 9.7] Performing "net-hwaddr" ...
[ 9.7] Performing "pacct-log" ...
[ 9.7] Performing "package-manager-cache" ...
[ 9.7] Performing "pam-data" ...
[ 9.7] Performing "passwd-backups" ...
[ 9.7] Performing "puppet-data-log" ...
[ 9.7] Performing "rh-subscription-manager" ...
[ 9.7] Performing "rhn-systemid" ...
[ 9.7] Performing "rpm-db" ...
[ 9.7] Performing "samba-db-log" ...
[ 9.7] Performing "script" ...
[ 9.7] Performing "smolt-uuid" ...
[ 9.8] Performing "ssh-hostkeys" ...
[ 9.8] Performing "ssh-userdir" ...
[ 9.8] Performing "sssd-db-log" ...
[ 9.8] Performing "tmp-files" ...
[ 9.8] Performing "udev-persistent-net" ...
[ 9.8] Performing "utmp" ...
[ 9.8] Performing "yum-uuid" ...
[ 9.8] Performing "customize" ...
[ 9.8] Setting a random seed
[ 9.8] Setting the machine ID in /etc/machine-id
[ 9.8] Performing "lvm-uuids" ...
创建并压缩镜像
# 查找 centos 实例对应的磁盘文件
[root@localhost ~]# virsh domblklist centos7
Target Source
------------------------------------------------
hda /iso/centos7.qcow2
hdb -# 创建并清理压缩镜像
[root@localhost ~]# virt-sparsify --compress /iso/centos7.qcow2 /tmp/centos7-cloud.qcow2
[ 0.0] Create overlay file in /tmp to protect source disk
[ 0.1] Examine source disk
[ 1.8] Fill free space in /dev/centos/root with zero100% ⟦▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒⟧ 00:00
[ 14.7] Clearing Linux swap on /dev/centos/swap
[ 15.6] Fill free space in /dev/sda1 with zero
[ 17.1] Copy to destination and make sparse
[ 73.5] Sparsify operation completed with no errors.
virt-sparsify: Before deleting the old disk, carefully check that the
target disk boots and works correctly.
测试镜像启动
注册镜像
将镜像 centos-cloud.qcow2 注册到 OpenStack 平台
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FkX5NFX4-1693186720941)(./assets/image-20230819223145255.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xsHpmi7t-1693186720941)(./assets/image-20230819223211819.png)]
创建云主机类型(规格)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PCuQXjMm-1693186720941)(./assets/image-20230819223259314.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UC9OIFyD-1693186720941)(./assets/image-20230819223322384.png)]
开启添加ROOT密码
开启添加 ROOT 密码后,可通过命令行或 WebUI 界面进行 root 密码自定义
控制节点
在
/etc/openstack-dashboard/local_settings
文件中,把can_set_password
参数的值设为 True
[root@controller ~]# vim /etc/openstack-dashboard/local_settings
...
'can_set_password': True
...
在
/etc/nova/nova.conf
文件中,把 inject_password 参数的值设为 True
[root@controller ~]# vim /etc/nova/nova.conf
...
'can_set_password': True
...
重启服务
[root@controller ~]# systemctl restart openstack-nova-compute.service
[root@controller ~]# systemctl restart httpd.service
计算节点
在计算节点上的
/etc/nova/nova.conf
文件中,把 inject_password 参数的值设为 True
[root@computer ~]# vim /etc/nova/nova.conf
...
inject_password=true
...
重启服务
[root@computer ~]# systemctl restart openstack-nova-compute.service
发放云主机测试
注意:网络及路由需存在,务必保证路由及网关存在,否则无法获取到客户自定义主机名
观察启动流程及尝试登录,测试镜像正确无误
相关文章:

深入了解OpenStack:创建定制化QCOW2格式镜像的完全指南
OpenStack 创建自定义的QCOW2格式镜像 前言 建议虚机网络配置为 NAT 或 桥接,因为未来 KVM虚机 需要借助 虚机 的外网能力进行联网安装软件包 虚机在启动前,必须在 VMware Workstation 上为其开启虚拟化引擎 虚拟化 Intel VT-x/EPT 或 AMD-V 安装kvm …...

【Java 中级】一文精通 Spring MVC - 数据格式化器(六)
👉博主介绍: 博主从事应用安全和大数据领域,有8年研发经验,5年面试官经验,Java技术专家,WEB架构师,阿里云专家博主,华为云云享专家,51CTO 专家博主 ⛪️ 个人社区&#x…...

Linux内核学习(十二)—— 页高速缓存和页回写(基于Linux 2.6内核)
目录 一、缓存手段 二、Linux 页高速缓存 三、flusher 线程 Linux 内核实现了一个被叫做页高速缓存(page cache)的磁盘缓存,它主要用来减少对磁盘的 I/O 操作。它是通过把磁盘中的数据缓存到内存中,把对磁盘的访问变为对物理内…...

大数据-玩转数据-Flink窗口函数
一、Flink窗口函数 前面指定了窗口的分配器, 接着我们需要来指定如何计算, 这事由window function来负责. 一旦窗口关闭, window function 去计算处理窗口中的每个元素. window function 可以是ReduceFunction,AggregateFunction,or ProcessWindowFunction中的任意一种. Reduc…...

Docker网络-探索容器网络如何相互通信
当今世界,企业热衷于容器化,这需要强大的网络技能来正确配置容器架构,因此引入了 Docker Networking 的概念。Docker 是一种容器化平台,允许您在独立、轻量级的容器中运行应用程序和服务。Docker 提供了一套强大的网络功能&#x…...

ESP32-CAM模块Arduino环境搭建测试
ESP32-CAM模块Arduino环境搭建测试 一.ESP32OV2640摄像头模块CameraWebServer视频查看 二.测试ESP32-CAM(后续称cam模块)代码是否上传执行成功测试 const int led0 12; const int led1 13;void setup() {// put your setup code here, to run once:pinMode(led0, OUTPUT);pin…...

webassembly001 webassembly简述
WebAssembly 官方地址:https://webassembly.org/相关历史 https://en.wikipedia.org/wiki/WebAssembly https://brendaneich.com/2015/06/from-asm-js-to-webassembly/WebAssembly(缩写为Wasm)是一种基于堆栈的虚拟机的二进制指令格式。Wasm 被设计为编…...

vue 使用C-Lodop打印小票
先从官网下载js文件 https://www.lodop.net/LodopDemo.html 打开安装程序,一直下一步既可,我这边已经安装过就不演示了。 // 引入 import { getLodop } from /utils/CLodopfuncs.js;// 使用 let LODOP getLodop()let Count LODOP.GET_PRINTER_COUNT…...

【C++进阶(二)】STL大法--vector的深度剖析以及模拟实现
💓博主CSDN主页:杭电码农-NEO💓 ⏩专栏分类:C从入门到精通⏪ 🚚代码仓库:NEO的学习日记🚚 🌹关注我🫵带你学习C 🔝🔝 vector 1. 前言2. 熟悉vector的接口函数2.1 vec…...

1. import pandas as pd 导入库
【目录】 文章目录 1. import pandas as pd 导入库1. pandas库的概念2. 导入pandas库2.1 常规导入2.2 别名导入 3. 别名的作用4. 课堂练习 【正文】 1. import pandas as pd 导入库 【学习时间】 10分钟 1. pandas库的概念 pandas:熊猫panda的复数, …...

DMK5框选变量之后不显示其他位置的此变量高亮
使用软件MDK5.3.8版本 如下在2的位置选择之后,其他同样的变量没有高亮,因为1的原因折叠了; 展开折叠之后就可以了...
0061__Appium
Appium Documentation - Appium Documentation APP自动化测试(3)-Appium Inspector介绍_六天测试工程师的博客-CSDN博客 https://github.com/appium/appium-inspector https://github.com/appium/appium-desktop https://github.com/appium/appium...
【DEVOPS】需求跟踪管理全面落地
0. 目录 1. 现状/背景2. 需求管理存在的问题3. 改进思路/措施4. 所谓"禅道尚未普及/铺开"5. 最后6. 相关 1. 现状/背景 近期又被领导问到"如何对项目过程中的需求进行量化和跟踪管理"。这真是一个狗皮膏药似的问题,反反复复地,隔一…...
算法修炼Day57|647. 回文子串 ● 516.最长回文子序列
LeetCode:647. 回文子串 647. 回文子串 - 力扣(LeetCode) 1.思路 暴力思路见对应代码… 动规解法:画图推导动规公式,当前状态由左侧和左下角推出,所以首层应该采用倒序的方式,内部采用正序的方式。 2.…...

呈现数据的精妙之道:选择合适的可视化方法
在当今数据时代,数据可视化已成为理解和传达信息的重要手段。然而,选择适合的数据可视化方法对于有效地呈现数据至关重要。不同的数据和目标需要不同的可视化方法,下面我们将探讨如何选择最佳的数据可视化方法来呈现数据。 1. 理解数据类型&a…...

数据结构(Java实现)-java对象的比较
元素的比较 基本类型的比较 在Java中,基本类型的对象可以直接比较大小。 对象比较的问题 Java中引用类型的变量不能直接按照 > 或者 < 方式进行比较 默认情况下调用的就是equal方法,但是该方法的比较规则是:没有比较引用变量引用对象的…...

Wolfram Mathematica 13 for Mac 数学计算工具
Wolfram Mathematica for Mac是一款功能强大、划时代的科学计算软件。它结合了数字和符号计算引擎、图形系统、编程语言、文本系统以及与其他应用程序的高级连接,在许多功能方面处于世界领先地位,截至2009年,它是使用最广泛的数学软件之一。人…...

系统架构设计高级技能 · Web架构
现在的一切都是为将来的梦想编织翅膀,让梦想在现实中展翅高飞。 Now everything is for the future of dream weaving wings, let the dream fly in reality. 点击进入系列文章目录 系统架构设计高级技能 Web架构 一、Web架构介绍1.1 Web架构涉及技术1.2 单台服务…...

再写CentOS7升级OpenSSL-1.0.1U
本文在CentOS7.4以及TencentOS 2.4上测试通过。 原系统自带OpenSSL 1.0.2k-fips。 编译安装方法跟之前的没啥区别。 从官网下载1.0.1u版https://www.openssl.org/source/ 使用tar解包 tar xfz openssl-1.0.1u.tar.gz 依次执行如下: cd openssl-1.0.1u ./con…...

HBase--技术文档--基本概念--《快速扫盲》
官网 Apache HBase – Apache HBase™ Home 阿里云hbase 云数据库HBase_大数据存储_订单风控_数据库-阿里云 云数据库 HBase-阿里云帮助中心 基本概念 HBase是一种分布式、可扩展、支持海量数据存储的NoSQL数据库。它基于Hadoop,采用列式存储方式,可…...
java_网络服务相关_gateway_nacos_feign区别联系
1. spring-cloud-starter-gateway 作用:作为微服务架构的网关,统一入口,处理所有外部请求。 核心能力: 路由转发(基于路径、服务名等)过滤器(鉴权、限流、日志、Header 处理)支持负…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试
作者:Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位:中南大学地球科学与信息物理学院论文标题:BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接:https://arxiv.…...

centos 7 部署awstats 网站访问检测
一、基础环境准备(两种安装方式都要做) bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats࿰…...

2021-03-15 iview一些问题
1.iview 在使用tree组件时,发现没有set类的方法,只有get,那么要改变tree值,只能遍历treeData,递归修改treeData的checked,发现无法更改,原因在于check模式下,子元素的勾选状态跟父节…...
【算法训练营Day07】字符串part1
文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接:344. 反转字符串 双指针法,两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...

Python爬虫(一):爬虫伪装
一、网站防爬机制概述 在当今互联网环境中,具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类: 身份验证机制:直接将未经授权的爬虫阻挡在外反爬技术体系:通过各种技术手段增加爬虫获取数据的难度…...

pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)
目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关࿰…...

HDFS分布式存储 zookeeper
hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架,允许使用简单的变成模型跨计算机对大型集群进行分布式处理(1.海量的数据存储 2.海量数据的计算)Hadoop核心组件 hdfs(分布式文件存储系统)&a…...
比较数据迁移后MySQL数据库和OceanBase数据仓库中的表
设计一个MySQL数据库和OceanBase数据仓库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较完成之后,开始比较,直到比较完所有的数据。比较操作需要比较…...

Web后端基础(基础知识)
BS架构:Browser/Server,浏览器/服务器架构模式。客户端只需要浏览器,应用程序的逻辑和数据都存储在服务端。 优点:维护方便缺点:体验一般 CS架构:Client/Server,客户端/服务器架构模式。需要单独…...