[步骤] KVM 虚拟机模板的创建 (openSUSE Leap 15 版)

注意:

在创建 KVM 虚拟机之前要先安装 KVM 并创建 KVM 虚拟网络

软件准备:

在 openSUSE 官网上下载安装系统所需要的镜像:

https://software.opensuse.org/distributions/leap

正文:

步骤目录:

步骤一:理解创建 KVM 虚拟机模板的目的

步骤二:为这个虚拟机创建硬盘文件
1.1 创建硬盘文件
1.2 确认硬盘文件已创建

步骤三:使用 KVM 和刚刚创建的硬盘文件新安装一台虚拟机
3.1 启动 KVM 的 virt-manager
3.2 在 virt-manager 上的左上角点击文件之后 “点击新建虚拟机”
3.2.1 选择以本地安装介质的方式安装系统
3.2.2 选择安装系统的系统镜像
3.2.3 设置内存大小和 CPU 核心数
3.2.4 选择用刚刚创建的硬盘文件来安装系统
3.2.5 给虚拟机命名并选择虚拟网络
3.2.6 开始安装系统
3.2.7 进入 “Language, Keyboard and License Agreement” 后选择系统语言,再点击 “Next”
3.2.8 当出现 “Activate online repositories now?” 时,点击 “No”
3.2.9 进入 “System Role” 后选择 “Server”,再点击 “Next”
3.2.10 进入 “Suggested Partitioning” 后点击 “Guided Setup”
3.2.11 进入 “Partitioning Scheme” 后点击 “Next”
3.2.12 进入 “Filesystem Options” 后 “File System Type“ 选择 “XFS”,再点击 “Next”
3.2.13 回到 “Suggested Partitioning” 后点击 “Next”
3.2.14 进入 “Clock and Time Zone” 后选择时区,再点击 “Next”
3.2.15 进入 “Local User” 后选择 “Skip User Creation” 并点击 “Next”
3.2.16 进入 “Authentication for the System Administrator “root”” 后给 root 设置密码,再点击 “Next”
3.2.17 如果出现 “YaST2 The password is too simple” 则点击 “Yes”
3.2.18 进入 “Installation Settings” 后点击 “Next”
3.2.19 当出现 “Confirm Installation” 时点击 “Install”
3.2.20 当出现 “The system will reboot now…” 时,点击 “Ok”
3.2.21 在安装系统的过程中需要注意的内容总结

步骤四:进入新创建虚拟机修改配置
4.1 添加 Console 配置
4.1.1 修改 grub 内核配置文件
4.1.2 使修改的 grub 内核配置生效
4.2 将系统自动挂载的硬盘从使用 uuid 换成硬件路径
4.2.1 显示根分区的 UUID
4.2.2 在自动挂载文件里将根分区的 UUID 换成硬件路径
4.3 删除不用的软件
4.4 进行分区扩展
4.4.1 安装分区扩展软件
4.4.2 设置开机自动扩容根目录
4.4.2.1 创建开机自动扩容根目录的配置文件
4.4.2.2 给开机自启配置文件相应的权限
4.5 只使用本地软件源(选做)
4.5.1 禁用所有软件源(选做)
4.5.2 添加本地软件源(选做)
4.5.3 添加本地软件源(选做)
4.6 修改虚拟机系统的名称
4.7 启用 serial 服务实现通过 virsh console 命令控制虚拟机
4.8 清除虚拟系统的历史命令
4.9 关闭虚拟机

步骤五:修改新创建的虚拟机配置文件

步骤六:此时就可以将此虚拟机的硬件文件作为模板进行批量克隆虚拟机了

具体的操作步骤:

步骤一:理解创建 KVM 虚拟机模板的目的

主要用于批量克隆出新的 KVM 机器,节约创建新虚拟机的时间

步骤二:为这个虚拟机创建硬盘文件
1.1 创建硬盘文件

(只在真机上执行以下步骤)

# qemu-img create -f qcow2 /var/lib/libvirt/images/template_opensuse_leap_15_10g.qcow2 10G

(补充:这里以创建 10G 大小的 template_opensuse_leap_15_10g.qcow2 硬盘文件为例)

1.2 确认硬盘文件已创建

(只在真机上执行以下步骤)

# ls /var/lib/libvirt/images/ | grep template_opensuse_leap_15_10g.qcow2

(补充:这里以确认 template_opensuse_leap_15_10g.qcow2 硬盘文件为例)

步骤三:使用 KVM 和刚刚创建的硬盘文件新安装一台虚拟机
3.1 启动 KVM 的 virt-manager

(只在真机上执行以下步骤)

# virt-manager

3.2 在 virt-manager 上的左上角点击文件之后 “点击新建虚拟机”

(只在真机上执行以下步骤)

(步骤略)

3.2.1 选择以本地安装介质的方式安装系统

(只在真机上执行以下步骤)

(图:1)

3.2.2 选择安装系统的系统镜像

(只在真机上执行以下步骤)

(图:2)

(补充:这里以使用 openSUSE-Leap-15.2-DVD-x86_64.iso 系统镜像为例)

3.2.3 设置内存大小和 CPU 核心数

(只在真机上执行以下步骤)

(图:3)

(补充:这里以设置 2048 MiB 内容和 2 核 CPU 为例)

3.2.4 选择用刚刚创建的硬盘文件来安装系统

(只在真机上执行以下步骤)

(图:4)

(补充:这里以使用 template_opensuse_leap_15_10g.qcow2 硬盘文件为例)

3.2.5 给虚拟机命名并选择虚拟网络

(只在真机上执行以下步骤)

(注意:虚拟网络必须提前创建好)

(图:5)

(补充:这里以将虚拟机命名为 template_opensuse_leap_15_10g 并使用 0 网络为例)

3.2.6 开始安装系统

(只在真机上执行以下步骤)

(图:6)

3.2.7 进入 “Language, Keyboard and License Agreement” 后选择系统语言,再点击 “Next”

(只在真机上执行以下步骤)

(图:7)

3.2.8 当出现 “Activate online repositories now?” 时,点击 “No”

(只在真机上执行以下步骤)

(图:8)

3.2.9 进入 “System Role” 后选择 “Server”,再点击 “Next”

(只在真机上执行以下步骤)

(图:9)

3.2.10 进入 “Suggested Partitioning” 后点击 “Guided Setup”

(只在真机上执行以下步骤)

(图:10)

3.2.11 进入 “Partitioning Scheme” 后点击 “Next”

(只在真机上执行以下步骤)

(图:11)

3.2.12 进入 “Filesystem Options” 后 “File System Type“ 选择 “XFS”,再点击 “Next”

(只在真机上执行以下步骤)

(图:12)

3.2.13 回到 “Suggested Partitioning” 后点击 “Next”

(只在真机上执行以下步骤)

(图:13)

3.2.14 进入 “Clock and Time Zone” 后选择时区,再点击 “Next”

(只在真机上执行以下步骤)

(图:14)

3.2.15 进入 “Local User” 后选择 “Skip User Creation” 并点击 “Next”

(只在真机上执行以下步骤)

(图:15)

3.2.16 进入 “Authentication for the System Administrator “root”” 后给 root 设置密码,再点击 “Next”

(只在真机上执行以下步骤)

(图:16)

3.2.17 如果出现 “YaST2 The password is too simple” 则点击 “Yes”

(只在真机上执行以下步骤)

(图:17)

3.2.18 进入 “Installation Settings” 后点击 “Next”

(只在真机上执行以下步骤)

(图:18)

3.2.19 当出现 “Confirm Installation” 时点击 “Install”

(只在真机上执行以下步骤)

(图:19)

3.2.20 当出现 “The system will reboot now…” 时,点击 “Ok”

(只在真机上执行以下步骤)

(图:20)

3.2.21 在安装系统的过程中需要注意的内容总结

(只在真机上执行以下步骤)

1) 一定要使用刚刚创建的 template_opensuse_leap_15_10g.qcow2 作为安装虚拟机的硬件文件
2) 虚拟机网络 “0” 要提前创建好
3) 只分一个分区,只设置一个挂载点挂载到根,使用标准硬盘,硬盘格式是 XFS
4) 选择最小化安装系统

步骤四:进入新创建虚拟机修改配置
4.1 添加 Console 配置
4.1.1 修改 grub 内核配置文件

(只在虚拟机上执行以下步骤)

# vi /etc/default/grub

将全部内容修改如下:

# If you change this file, run 'grub2-mkconfig -o /boot/grub2/grub.cfg' afterwards to update
# /boot/grub2/grub.cfg.

# Uncomment to set your own custom distributor. If you leave it unset or empty, the default
# policy is to determine the value from /etc/os-release
GRUB_DISTRIBUTOR=
GRUB_DEFAULT=saved
GRUB_HIDDEN_TIMEOUT=0
GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT=8
GRUB_CMDLINE_LINUX_DEFAULT="splash=silent mitigations=auto quiet"
GRUB_SERIAL_COMMAND="serial --unit=1 --speed=115200"
GRUB_CMDLINE_LINUX="biosdevname=0 net.ifnames=0 console=tty0 console=ttyS0,115200n8"
GRUB_DISABLE_LINUX_UUID="true"
GRUB_ENABLE_LINUX_LABEL="true"
GRUB_DISABLE_RECOVERY="true"

# Uncomment to automatically save last booted menu entry in GRUB2 environment

# variable `saved_entry'
# GRUB_SAVEDEFAULT="true"
#Uncomment to enable BadRAM filtering, modify to suit your needs

# This works with Linux (no patch required) and with any kernel that obtains
# the memory map information from GRUB (GNU Mach, kernel of FreeBSD ...)
# GRUB_BADRAM="0x01234567,0xfefefefe,0x89abcdef,0xefefefef"
#Uncomment to disable graphical terminal (grub-pc only)

GRUB_TERMINAL="gfxterm"
# The resolution used on graphical terminal
#note that you can use only modes which your graphic card supports via VBE

# you can see them in real GRUB with the command `vbeinfo'
GRUB_GFXMODE="auto"
# Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux
# GRUB_DISABLE_LINUX_UUID=true
#Uncomment to disable generation of recovery mode menu entries

# GRUB_DISABLE_RECOVERY="true"
#Uncomment to get a beep at grub start

# GRUB_INIT_TUNE="480 440 1"
GRUB_BACKGROUND=
GRUB_THEME=/boot/grub2/themes/openSUSE/theme.txt
SUSE_BTRFS_SNAPSHOT_BOOTING="true"
GRUB_DISABLE_OS_PROBER="false"
GRUB_ENABLE_CRYPTODISK="n"
GRUB_CMDLINE_XEN_DEFAULT="vga=gfx-1024x768x16"

4.1.2 使修改的 grub 内核配置生效

(只在虚拟机上执行以下步骤)

# grub2-mkconfig -o grub

4.2 将系统自动挂载的硬盘从使用 uuid 换成硬件路径
4.2.1 显示根分区的 UUID

(只在虚拟机上执行以下步骤)

# blkid
/dev/vda1: UUID="53ee2f87-89b8-4cd7-a4dc-0957d28f4831" TYPE="xfs" PARTUUID="3d8377ef-01"

(补充:这里的 UUID 是: 53ee2f87-89b8-4cd7-a4dc-0957d28f4831)

4.2.2 在自动挂载文件里将根分区的 UUID 换成硬件路径

(只在虚拟机上执行以下步骤)

# vi /etc/fstab

将以下内容:

......
UUID=53ee2f87-89b8-4cd7-a4dc-0957d28f4831 /                   xfs     defaults        0 0

(补充:这里的 UUID 是: 53ee2f87-89b8-4cd7-a4dc-0957d28f4831)

修改为:

......
/dev/vda1 /                   xfs     defaults        0 0

4.3 删除不用的软件

(只在虚拟机上执行以下步骤)

# zypper -n rm firewalld-*

4.4 进行分区扩展
4.4.1 安装分区扩展软件

(只在虚拟机上执行以下步骤)

# zypper -n in growpart

4.4.2 设置开机自动扩容根目录
4.4.2.1 创建开机自动扩容根目录的配置文件

# vim /etc/init.d/after.local

创建以下内容:

/usr/bin/growpart /dev/sda1
/usr/sbin/xfs_growfs /

4.4.2.2 给开机自启配置文件相应的权限

# chmod 755 /etc/init.d/after.local

4.5 只使用本地软件源(选做)
4.5.1 禁用所有软件源(选做)

(只在虚拟机上执行以下步骤)

# zypper mr -da

4.5.2 添加本地软件源(选做)

(只在虚拟机上执行以下步骤)

# zypper ar -fcg http://10.0.0.254/openSUSE-Leap-15/ lan

(注意: http://10.0.0.254/openSUSE-Leap-15/ 需要根据真实环境的情况进行更改)

4.5.3 添加本地软件源(选做)

(只在虚拟机上执行以下步骤)

# zypper ref

4.6 修改虚拟机系统的名称

(只在虚拟机上执行以下步骤)

# hostnamectl set-hostname template_opensuse_leap_15_10g

4.7 启用 serial 服务实现通过 virsh console 命令控制虚拟机

(只在虚拟机上执行以下步骤)

# systemctl start serial-getty@ttyS0
# systemctl enable serial-getty@ttyS0

4.8 清除虚拟系统的历史命令

(只在虚拟机上执行以下步骤)

# history -c

4.9 关闭虚拟机

(只在虚拟机上执行以下步骤)

# poweroff

步骤五:修改新创建的虚拟机配置文件

删除配置文件里 cdrom 相关的部分

# vim /etc/libvirt/qemu/template_opensuse_leap_15_10g.xml

删除以下内容:

......
    <disk type='file' device='cdrom'>
      <driver name='qemu' type='raw'/>
      <source file='/test/iso/openSUSE-Leap-15.2-DVD-x86_64.iso'/>
      <target dev='sda' bus='sata'/>
      <readonly/>
      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
    </disk>
......

步骤六:此时就可以将此虚拟机的硬件文件作为模板进行批量克隆虚拟机了

(只在真机上执行以下步骤)

云计算简介

云计算最早起源于亚马逊公司,后来 NASA(美国国家航空航天局)模仿亚马逊云做了一个开源的 OpenStack 云计算平台,之后又将这个项目交给了 Apache 基金会管理。如今 OpenStack 已成为云计算的代名词之一。

云计算的种类分为三种:

IaaS

全名为:Infrastructure as a Service,基础设施即服务。是硬件的云,类似于 CPU、内存、硬盘等硬件的资源池。主要技术架构是开源的 OpenStack,同时也存在亚马逊云、谷歌云、阿里云等非开源的云。

PaaS

全名为:Platform as a Service,基础即服务。是服务的云,类似于 Tomcat、Nginx 等服务的资源池。主要技术架构是开源的 OpenShift 和 kubernetes 等。

SaaS

全名为:Software as a Service,软件即服务。是软件的云,相关的软件已经完全开发完成并进行云部署,例如微软的 OneDrive。

[步骤] Docker 私有镜像仓库的搭建

注意:

在搭建私有 Docker 镜像仓库之前,要先安装 Docker

正文:

内容目录:

内容一:搭建私有 Dokcer 镜像仓库
1.1 下载 registry 镜像
1.2 加载并启动 registry 镜像
1.3 确认 Docker 镜像仓库搭建成功

内容二:私有 Dokcer 镜像库的使用方法
2.1 将现有的 Docker 镜像上传到私有 Docker 镜像库
2.1.1 给现有的 Docker 镜像在私有 Docker 镜像库中打上一个新的标签
2.1.2 将现有的 Docker 镜像上传到私有 Docker 镜像库
2.2 显示私有的 Docker 镜像库
2.2.1 显示私有的 Docker 镜像库中有那些镜像
2.2.2 显示私有的 Docker 镜像库中某个镜像有哪些版本
2.3 从私有的 Docker 镜像库中下载镜像

具体的内容:

内容一:搭建私有 Dokcer 镜像仓库
1.1 下载 registry 镜像

# docker pull registry

1.2 加载并启动 registry 镜像

# docker run -d -p 5000:5000 registry
43c6b8c581e9039c8b7df12bb11a89dbdc9ff0b7e00fd6d345068aa9b5af7d9f

(补充:这里以使用宿主机的 5000 端口为例)

1.3 确认 Docker 镜像仓库搭建成功

# curl 127.0.0.1:5000/v2/
{}

(补充:这里以显示 127.0.0.1:5000/v2/ 为例,出现大括号 “{}” 则表示搭建成功)

内容二:私有 Dokcer 镜像库的使用方法
2.1 将现有的 Docker 镜像上传到私有 Docker 镜像库
2.1.1 给现有的 Docker 镜像在私有 Docker 镜像库中打上一个新的标签

# docker tag centos:latest 127.0.0.1:5000/v2/centos:latest

(补充:这里以将现有的 centos:latest 镜像打成 127.0.0.1:5000/v2/centos:latest 标签为例)

2.1.2 将现有的 Docker 镜像上传到私有 Docker 镜像库

# docker push 127.0.0.1:5000/centos:latest
The push refers to repository [127.0.0.1:5000/centos]
291f6e44771a: Pushed 
latest: digest: sha256:fc4a234b91cc4b542bac8a6ad23b2ddcee60ae68fc4dbd4a52efb5f1b0baad71 size: 529

(补充:这里以上传 127.0.0.1:5000/v2/centos:latest 为例)

2.2 显示私有的 Docker 镜像库
2.2.1 显示私有的 Docker 镜像库中有那些镜像

# curl  http://127.0.0.1:5000/v2/_catalog
{"repositories":["centos"]}

(补充:这里以显示 127.0.0.1:5000/v2/ 为例)

2.2.2 显示私有的 Docker 镜像库中某个镜像有哪些版本

# curl  http://127.0.0.1:5000/v2/centos/tags/list
{"name":"centos","tags":["latest"]}

(补充:这里以显示 http://127.0.0.1:5000/v2 上 centos 镜像的版本为例)

2.3 从私有的 Docker 镜像库中下载镜像

# docker pull 127.0.0.1:5000/v2/centos:latest
latest: Pulling from v2/centos
Digest: sha256:fc4a234b91cc4b542bac8a6ad23b2ddcee60ae68fc4dbd4a52efb5f1b0baad71
Status: Image is up to date for 127.0.0.1:5000/v2/centos:latest
127.0.0.1:5000/v2/centos:latest

(补充:这里以下载 127.0.0.1:5000/v2/centos:latest 为例)

[步骤] Docker 自定义镜像的创建

注意:

在创建 Docker 自定义镜像之前,要先安装 Docker

正文:

步骤目录:

步骤一:基于现有的镜像进行手动配置后再创建

1.1 加载并启动 Docker 镜像
1.2 对镜像里的系统进行操作并退出
1.3 显示刚刚创建的容器
1.4 将刚刚创建的容器转换成新镜像
1.5 测试刚刚创建的新镜像是否可用

步骤二:基于现有的镜像使用配置文件修改后在创建
2.1 创建使用镜像配置文件的目录
2.2 创建镜像配置文件
2.4 编辑镜像配置文件
2.5 使用刚刚创建的镜像配置文件创建新的镜像
2.6 测试刚刚创建的新镜像是否可用

具体的操作步骤:
步骤一:基于现有的镜像进行手动配置后再创建
1.1 加载并启动 Docker 镜像

# docker run -it centos


补充:
1) 这里以加载并启动 centos 镜像为例
2) -t 代表要开启一个伪终端
3) -i 代表要保持打开并且可以进行标准输入

1.2 对镜像里的系统进行操作并退出

(步骤略)

1.3 显示刚刚创建的容器

# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS               NAMES
d5cd7496a72c        centos              "/bin/bash"              37 seconds ago      Exited (0) 14 seconds ago                       ecstatic_bassi

(补充:这里以显示到的容器 ID 是 d5cd7496a72c)

1.4 将刚刚创建的容器转换成新镜像

# docker commit d5cd7496a72c newos:v1 

(补充:这里以通过 d5cd7496a72c 生成 v1 版本的 newos 为例)

1.5 测试刚刚创建的新镜像是否可用

# docker run -it newos

(补充:这里以运行 newos 镜像为例)

步骤二:基于现有的镜像使用配置文件修改后在创建
2.1 创建使用镜像配置文件的目录

# mkdir -p ~/newhttpd

(补充:这里以创建 newhttpd 目录为例)

2.3 将 yum 的从库文件放到镜像配置文件的目录

# cp /etc/yum.repos.d/local.repo ~/newhttpd

(补充:这里以将在次环境里可用的 yum 配置文件 /etc/yum.repos.d/local.repo 拷贝到 ~/newhttpd/ 为例)

2.3 创建镜像配置文件

# touch ~/newhttpd/Dockerfile

(补充:这里以创建 ~/newhttpd/Dockerfile 文件为例)

2.4 编辑镜像配置文件

# vim ~/newhttpd/Dockerfile

创建以下内容:

FROM centos:latest
RUN yum -y install httpd
ENV EnvironmentFile=/etc/sysconfig/httpd
WORKDIR /var/www/html/
RUN echo "test" > /var/www/html/index.html
EXPOSE 80
CMD ["/usr/sbin/httpd", "-DFOREGROUND"]


补充:
1) FROM 要从哪一个镜像克隆而来,这里以从 centos:latest 克隆为例
2) MAINTAINER 要说明的信息
3) ENV 要设置的环境变量,这里以使用以下文件作为配置文件为例:

/etc/sysconfig/httpd

4) WORKDIR 要设置的工作目录,这里以使用以下目录作为工作目录为例:
/var/www/html/
5) RUN 在生成镜像时要执行的命令,可以有多条,这里以执行以下命令为例:

echo "test" > /var/www/html/index.html

6) CMD 容器启动时要执行的命令,只能有一条,这里以执行以下命令为例:

"/usr/sbin/httpd", "-DFOREGROUND"

7) ADD 要复制的文件
8) EXPOSE 要开放的端口,这里以使用 80 端口为例

2.5 使用刚刚创建的镜像配置文件创建新的镜像

# docker build -t newos:httpd ~/newhttpd

(补充:这里以通过 ~/newhttpd 里的配置信息生成为名 newos 版本为 httpd 的容器为例)

2.6 测试刚刚创建的新镜像是否可用

# docker run -d newos:http

(补充:这里以测试名为 newos 版本为 httpd 的容器为例)