今天这篇文章属于旧知识复习,以前是在别人的基础之上直接使用定制好的基础镜像。
本次在运维平台建设过程中避免因为DHCP导致IP冲突的问题需要重新构建一个新的KVM镜像。

知识点

通过这篇文章你将收获以下知识点:

1、如何修改qcow2镜像密码

2、了解KVM虚拟机创建的基础知识

3、使用 qemu-img 如何创建新的模板和新增数据盘


KVM基础环境搭建

一般我们是在物理机上安装部署KVM环境,基于物理机进行虚拟化。

先安装 相关的依赖包

yum install -y qemu-kvm libvirt virt-install bridge-utils

成功安装之后,常用的都是 virshvirt-xx 相关的命令

知识点二: 了解KVM虚拟机创建的基础知识

  • virt-install:创建一个新的虚拟机。
  • virt-clone:克隆一个现有的虚拟机。
  • virt-start:启动一个虚拟机。
  • virt-stop:停止一个虚拟机。
  • virt-suspend:挂起一个虚拟机。
  • virt-resume:恢复一个挂起的虚拟机。
  • virt-reboot:重启一个虚拟机。
  • virt-destroy:销毁一个虚拟机。
  • virt-attach-device:将一个新设备附加到虚拟机。
  • virt-detach-device:从虚拟机分离一个设备。
  • virt-edit:编辑虚拟机的配置。
  • virt-console:连接到虚拟机的控制台。

类似的 virsh 命令也可以用来管理虚拟机,比如

  • virsh console 当前服务器连接到虚拟机的控制台
  • virsh list 查看当前创建的虚拟机
  • virsh edit 编辑虚拟机的配置
  • virsh create 使用XML文件创建一个虚拟机
  • virsh define 使用XML文件定义一个虚拟机,但是不启动
  • virsh start 启动一个 defined 的虚拟机

virsh 除了做基本的虚拟机管理,它的功能更加强大,比如可以 监控虚拟机、管理网络接口、管理设备Device等。

具体可以使用 virsh --help 来查看,这里不做太多细节描述

构建自己的KVM镜像

构建基础镜像也是基于Centos官方基础镜像的基础上,个性化附加自己的一些基础建设

Centos官方镜像源下载地址 https://cloud.centos.org/centos/7/images/。本篇文章是基于 CentOS-7-x86_64-GenericCloud-2211.qcow2 来构建自己的基础镜像

下载镜像之后,使用可以使用如下命令创建虚拟机

在创建虚拟机之前,先使用如下命令启动libvirtd 服务

systemctl enable libvirtd.service
systemctl start libvirtd.service

然后创建虚拟机

virt-install --hvm --virt-type kvm --os-type=linux --os-variant rhel7.4 --name devops-baseimage-vm --vcpus=2 --ram 4096 --disk path=/data/images/devops-baseimage-centos7-br0.qcow2,bus=virtio --network bridge=br0,model=virtio --noautoconsole --import

其中参数说明如下:

  • –hvm 完全虚拟化 / --paravirt 半虚拟化 / --container 容器化, 这里选择 hvm
  • –virt-type 有kvm、qemu、xen等,这里选择 kvm
  • –os-variant 指操作类型的特定变体,比如Linux下的centos\ rhel(红帽)等
  • –os-type 一般指 操作类型,比如Linux、windows等
  • –name 定义虚拟机的名称,但是记住不是主机进去之后的 hostname值
  • –vcpus 定义CPU核数
  • –ram 定义内存大小,单位是MiB
  • –disk 定义存储大小,一般是通过path 路径指定镜像文件或者数据文件,bus=virtio 意思是指定磁盘映像文件应连接到虚拟机的哪种总线。
  • –network 定义网络,bridge=br0意思是使用br0作为网桥构建网络,model=virtio指定虚拟机的网络接口应使用哪种网络模型
  • –import 使用一个存在的磁盘镜像来构建虚拟机,和 --disk 配合使用
  • –noautoconsole 创建虚拟机之后,不进行自动连接,后面可以使用virsh console xxx 来连接到xxx 虚拟机

基于centos官方的基础镜像创建的主机之后,使用 virsh console xxx 进行连接登录之后最后会出现如下提示

CentOS Linux 7 (Core)
Kernel 3.10.0-1160.80.1.el7.x86_64 on an x86_64

localhost login:

让你输入账号密码,但是基础镜像,官方没有提供账号密码(网上查,有人说是centos/centos但是不对,实际登录之后也没有这个账号)


知识点一、如何修改qcow2镜像密码

1、先使用openssl 加密一个密码 (注意这里是数字 1 而不是字符l)

[root@192 root]# openssl passwd -1 Ksc123456
$1$eSdqsn.f$MDZv/xxxxxxxxxxxxxxx

2、 然后使用 guestfish 命令加载 qcow2 文件

[root@192 root]# guestfish --rw -a Centos7-baseimage.qcow2 

Welcome to guestfish, the guest filesystem shell for
editing virtual machine filesystems and disk images.

Type: ‘help’ for help on commands
      ‘man’ to read the manual
      ‘quit’ to quit the shell

><fs>

3、 然后在这个交互界面进行如下操作进行密码修改

><fs> run
 100% ⟦▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒⟧ 00:00
><fs> list-filesystems 
/dev/sda1: xfs
><fs> mount /dev/sda1 /
><fs> vi /etc/shadow  # 使用上面的密码进行配置修改
><fs> quit

然后我们再次连接到虚拟机使用root账号和刚修改的密码进行登录,发现成功。


然后我们就可以在改虚拟机内部配置一些个性化的东西

比如

  • 修改SSH配置,禁止ROOT远程登录
  • 安装初始化命令比如常用的 nc lsof dig等命令
  • 也可以初始化安装基础软件。比如yum源、zabbix-agent等
  • 也可以修改一些基础系统配置。比如 /etc/resolv.conf 和网络配置等

然后退出虚拟机。

第三个知识点: 使用 qemu-img 如何创建新的模板和新增数据盘

使用如下命令把刚才的虚拟机保存为新的 镜像模板

qemu-img convert -f qcow2 -O qcow2 Centos7-baseimage.qcow2 centos7-baseimage-br0-vm.qcow2

然后就可以使用新的基础镜像centos7-baseimage-br0-vm.qcow2 创建新的虚拟机, 创建的虚拟机中就包括了前面我们所得所有的初始化和定制化的内容

使用如下命令定义数据盘及大小(100GB)

qemu-img create -f qcow2 -o preallocation=metadata test-xxxx-01-100G.qcow  100G

如果是新增虚拟机的同时把数据盘添加进去,使用如下命令

virt-install --hvm ... ... \
--disk path=/data/images/test-zhangjialin-01-vm.qcow,bus=virtio \
--disk path=/data/images/test-zhangjialin-01-100G.qcow,bus=virtio \
... ...

和加载系统镜像一样

如果是已经创建虚拟机之后,在额外扩增数据盘,可以使用如下命令把数据盘添加进去

virsh attach-disk test-xxxx-01-vm \
/data/images/test-xxxx-01-100G.qcow vdb \
--subdriver=qcow2 --config --live

好了,关于KVM虚拟机 环境部署、如何创建、如何管理,以及如何添加额外的数据盘等今天就给大家介绍大搜这里。