深入了解OpenStack:创建定制化QCOW2格式镜像的完全指南

news2024/11/26 16:46:11

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 Install
   Compute Node
   Infrastructure Server
   File and Print Server
   Basic Web Server
   Virtualization Host
   Server with GUI
   GNOME Desktop
   KDE Plasma Workspaces
   Development and Creative Workstation
Available Groups:
   Compatibility Libraries
   Console Internet Tools
   Development Tools
   Graphical Administration Tools
   Legacy UNIX Compatibility
   Scientific Support
   Security Tools
   Smart Card Support
   System Administration Tools
   System 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:
 - default

disable_root: 1
ssh_pwauth:   0

mount_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: false

cloud_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
 - runcmd

cloud_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-change

system_info:
  default_user:
    name: centos
    lock_passwd: true
    gecos: Cloud User
    groups: [adm, systemd-journal]
    sudo: ["ALL=(ALL) NOPASSWD:ALL"]
    shell: /bin/bash
  distro: rhel
  paths:
    cloud_dir: /var/lib/cloud
    templates_dir: /etc/cloud/templates
  ssh_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 --all
 Id    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 zero
 100% ⟦▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒⟧ 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 

发放云主机测试

注意:网络及路由需存在,务必保证路由及网关存在,否则无法获取到客户自定义主机名

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

观察启动流程及尝试登录,测试镜像正确无误

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/938717.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【git进阶】 .ignore 忽略有道 忽略核查gitcheck-ignore -v

git .ignore配置 .ignore使用场景新项目中.gitignore用法1 初始化生成.git文件夹2 git status 查看当前文件夹状态3 创建.ignore文件 忽略不想上传的文件4 编辑.gitignore文件 git status查看是否生效 .gitignore进阶用法模式匹配模式匹配例题练习1 忽略所有的内容2 忽略所有目…

深入理解树状数组

大家好,我是 方圆。关于各类区间和问题有很多种解法,我们可以根据题目要求选择解题的方向: 数组不变,区间查询:前缀和、树状数组和线段树 数组单点查询,区间查询:树状数组 和线段树 数组区间修…

“业务敏捷的领导力” 工作坊 · 2023年9月3日

“业务敏捷的领导力”在线工作坊 2023年9月3日;9:30-11:30 am 授课工具:Zoom分组Miro画布互动练习 讲师:Jim Wang王军 报名条件 优先捷行学员免费参加,报名2023后半年课程的学员免费,工作坊限定30人&#xff0…

【附安装包】Fireworks CS6安装教程

软件下载 软件:Fireworks版本:CS6语言:简体中文大小:165.87M安装环境:Win11/Win10/Win8/Win7硬件要求:CPU2.0GHz 内存4G(或更高)下载通道①百度网盘丨下载链接:https://pan.baidu.c…

STM32启动模式详解

文章目录 前置知识1. 单片机最小系统组成2. BOOT电路3. 三种启动模式4. 存储器映射 从主FLASH启动从系统存储区启动从SRAM启动 前置知识 1. 单片机最小系统组成 一个单片机最小系统由电源、晶振、下载电路、BOOT电路、和复位电路组成。少一个单片机都启动不了。 2. BOOT电路 …

华为云Stack的学习(二)

三、华为云Stack产品组件 FunsionSphere CPS 提供云平台的基础管理和业务资源(包括计算资源和存储资源)。采用物理服务器方式部署在管理节点。可以做集群的配置,扩容和运维管理。 Service OM 提供云服务的运维能力,采用虚拟化方…

线程基础:Java多线程的创建休眠与等待

目录 一.Thread 类是什么? 二.Thread 类的几个常见属性 三.线程创建 1. 继承Thread,重写 run 方法 2. 实现Runnable,重写 run 方法 3. 继承Thread,使用匿名内部类 4. 实现Runnable,使用匿名内部类 5. 使用 lambda 表达式…

大数据-玩转数据-Flink窗口

一、Flink 窗口 理解 在流处理应用中,数据是连续不断的,因此我们不可能等到所有数据都到了才开始处理。当然我们可以每来一个消息就处理一次,但是有时我们需要做一些聚合类的处理,例如:在过去的1分钟内有多少用户点击…

医疗器械行业的MES系统解决方案

医疗器械行业的MES系统(制造执行系统)解决方案是为医疗器械制造企业提供的一种集成化的信息技术系统,用于管理和监控制造过程,提高生产效率,确保产品质量,以及优化整个生产流程。MES系统通常涵盖了生产计划…

No118.精选前端面试题,享受每天的挑战和学习

文章目录 为什么说HTTP是无状态的协议?HTTP 报文结构是怎样的?HTTP1.1 中如何解决 HTTP 的队头阻塞问题?HTTP 中如何处理表单数据的提交?说下application/x-www-form-urlencoded 和 multipart/form-data对于定长和不定长的数据&am…

影视公司技术流程设计之Pipeline数据管理

使用场景 1 设计师画好设计稿后怎样让导演审查? 叫到位子上看? 放个文件夹会议室统一看?意见怎么记录,怎么反馈? 2 材质,绑定文件怎么与模型同步, 很多时间是绑定不小心改了, 去了灯…

WinRAR<6.23 远程代码执行漏洞【Poc公开】(CVE-2023-38831) [有POC]

漏洞类型代码注入发现时间2023-08-25漏洞等级高危MPS编号MPS-bw2s-d0rvCVE编号CVE-2023-38831漏洞影响广度广 漏洞危害 OSCS 描述WinRAR 是一款适用于 Windows 系统的压缩包管理器。 WinRAR 6.2.3之前版本打开压缩文件时会调用 ShellExecute 函数匹配文件名,如果目…

软件设计师(十一)标准化和软件知识产权基本知识

一、标准化基础知识 标准(Standard)是对重复性事物和概念所做的统一规定 标准化工作的特征包括横向综合性、政策性和统一性 1、基本概念 (1)标准的分类 国际标准:ISO、IEC等国际标准化组织国家标准:GB一中国、ANSI一美国、BS一…

AIGC领航,智能AI赋能乡村教育,梦想扬帆远航

一位扎根深山支教十年的湖北教师袁辉的故事曾经感受无数人,新华社、人民日报都撰文为他点赞。在他带过的学生中,有一位名叫青青的女学生患有成骨不全症,俗称“瓷娃娃”,学校离家十几公里山路,上学对她来说,…

Java注解与反射

💗wei_shuo的个人主页 💫wei_shuo的学习社区 🌐Hello World ! Java注解与反射 Java注解和反射是Java语言中两个强大的特性,它们可以一起使用以实现动态的、灵活的编程和元数据处理 注解 Java注解(Annotatio…

振弦采集读数模块开发原理详细介绍

飞讯教学篇:振弦采集读数模块开发原理详细介绍 振弦采集读数模块是一种用于采集弦振信息的模块,其原理是通过传感器感知弦的振动,将其转化为电信号,然后经过模拟处理和数字化处理,最终输出为可供后续处理的数字信号。…

Python照片压缩教程:如何轻松减小图片大小

介绍 在日常的编程工作中,我们经常需要处理图像,例如上传、下载、显示、编辑等。有时候,我们需要对图像进行压缩,以减少占用的空间和带宽,提高加载速度和用户体验。那么,如何用Python来实现图像压缩呢&…

【数据分析】统计量

1. 均值、众数描述数据的集中趋势度量,四分位差、极差描述数据的离散程度。 2. 标准差、四分位差、异众比率度量离散程度,协方差是度量相关性。 期望值分别为E[X]与E[Y]的两个实随机变量X与Y之间的协方差Cov(X,Y)定义为: 从直观上来看&…

开源vue动态表单组件

一、项目简介 vueelement的动态表单组件,拖拽组件到面板即可实现一个表单 二、实现功能 支持拖拽 支持输入框 支持文本框 支持数字输入框 支持下拉选择器 支持多选框 支持日期控件 支持开关 支持动态表格 支持上传图片 支持上传文件 支持标签 支持ht…

无涯教程-Python机器学习 - Semi-supervised Learning函数

Python机器学习 中的 Semi - 无涯教程网无涯教程网提供https://www.learnfk.com/python-machine-learning/machine-learning-with-python-semi-supervised-learning.html