KVM导入Ubuntu Cloud 镜像创建虚机及调整磁盘大小

Ubuntu Cloud Images

Ubuntu官网会给各种公有云平台提供cloud镜像, 例如AWS, MS Azure, Google Cloud, 以及本地虚机环境例如 QEMU, VMware, Vagrant等, 这些镜像在 https://cloud-images.ubuntu.com 上可以下载.

Ubuntu Cloud 镜像类型

cloud-images.ubuntu.com 上面的镜像主要可以分成两大类, daily 和 release, 每个大类里又区分为 minimal(最小安装)和普通版本.

  • 如果对这些没概念, 下载 release 版本, 在 releases 目录下有从 8.04 到 22.04 的各个发行版镜像
    • 从上面进入的发行版目录下面, 是按日期排列的目录, 用最新日期的那个目录
    • 目录下面, 都是形如 ubuntu-22.04-server-cloudimg-[宿主架构]-xxx.[img/vmdk/ova] 这种文件名的文件, 对应KVM需要下载
  • 如果只是需要能运行的最小系统, 在 minimal 目录下 releases 目录找对应发行版的迷你安装. 标准版的大小是迷你版的两倍左右
    • 迷你版只有给x86-64架构宿主的镜像

KVM 中安装Cloud Image 虚机

以迷你版为例

前提

机器上要安装好 KVM 环境,

sudo apt install -y qemu-kvm cloud-image-utils 

创建好桥接网络, 假设桥接网口为 br0

准备 seed.img

当cloud image启动时, 会搜索包含实例信息的数据源, 用于初始化当前的实例, 包括 hostname, 网络设置等, 通常包含两类内容:

  • metadata: 这一般是由云平台提供的唯一编号, 包含 hostname, 网络信息, SSH keys等.
  • user data: 用于指定登录虚机的用户的相关设置.

创建文件 metadata.yaml

instance-id: iid-local01 local-hostname: cloudimg 
  • instance-id:
  • local-hostname: 虚机启动后看到的 hostname

创建文件 user-data.yaml

用id_rsa密钥登录的例子

#cloud-config ssh_authorized_keys:     - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDSc4mEaOsvQusPZRUIV6PUz2yM2D/Td3FKkdumu... .............. ... ......hQI6ofjLCxBKRqBbTl milton@somewherec ssh_import_id:     - gh:     - lp: 
  • ssh_authorized_keys 用于免密登录的公钥. 需要在本地预先创建好密钥对, 并配置到 .ssh/config 里. 用户是默认的ubuntu, 不需要指定
  • ssh_import_id 用于第三方平台的密钥, 这里都留空

用密码登录的例子

#cloud-config password: ubuntu chpasswd: { expire: False } ssh_pwauth: True ssh_import_id: ${USER} 
  • password: ubuntu 设置的密码为 ubuntu
  • chpasswd: { expire: False } 不过期
  • ssh_pwauth: True 设置为使用密码登录
  • ssh_import_id: ${USER} 这里设置的是创建的用户名

创建 seed.img

用 cloud-localds 命令创建 seed.img

cloud-localds seed.img user-data.yaml metadata.yaml 

用 Cloud Image 启动

命令例子1

virt-install --name ubuntu2004_1      --vcpus 2 --memory 4096      --graphics none      --import      --os-type linux --os-variant ubuntu20.04      --network bridge=br0,model=virtio      --disk /data/vms/ubuntu20.04_1.img      --disk /data/vms/seed.img 

其中 ubuntu20.04_1.img 是重命名后的迷你版镜像.

命令例子2

kvm-spice -m 2048      -drive file=ubuntu-18.04-server-cloudimg-amd64.img,if=virtio,cache=writeback      -cdrom seed.img      -net nic,model=virtio      -net user,hostfwd=tcp::222-:22 

这个会将虚机的22端口映射到宿主的222端口

执行命令后会启动到登录提示符. 过程中会穿插着执行初始化, 显示机器的信息, 包括IP地址, 网络环境, 导入的用户key等

         Starting Initial cloud-ini… (metadata service crawler)... cloud-init[271]: Cloud-init v. 22.2-0ubuntu1~20.04.3 running 'init' at Thu, 13 Oct 2022 07:39:43 +0000. Up 10.34 seconds. cloud-init[271]: ci-info: +++++++++++++++++++++++++++++++++++++++++++Net deviceinfo++++++++++++++++++++++++++++++++++++++++++++ cloud-init[271]: ci-info: +--------+------+---------------------------------------+---------------+--------+-------------------+ cloud-init[271]: ci-info: | Device |  Up  |                Address                |      Mask     | Scope  |     Hw-Address    | cloud-init[271]: ci-info: +--------+------+---------------------------------------+---------------+--------+-------------------+ cloud-init[271]: ci-info: | enp1s0 | True |             192.168.9.106             | 255.255.255.0 | global | 13:54:00:01:e0:29 | ... cloud-init[271]: ci-info: ++++++++++++++++++++++++++++++Route IPv4 info++++++++++++++++++++++++++++++ cloud-init[271]: ci-info: +-------+-------------+-------------+-----------------+-----------+-------+ cloud-init[271]: ci-info: | Route | Destination |   Gateway   |     Genmask     | Interface | Flags | cloud-init[271]: ci-info: +-------+-------------+-------------+-----------------+-----------+-------+ cloud-init[271]: ci-info: |   0   |   0.0.0.0   | 192.168.9.1 |     0.0.0.0     |   enp1s0  |   UG  | ... cloud-init[271]: ci-info: ++++++++++++++++++++++++++++++++Route IPv6 info++++++++++++++++++++++++++++++++ ... cloudimg login: cloud-init[481]: 2022-10-13 07:39:58,045 ERROR ssh-import-id protocol handler {'gh': not found or cannot execute cloud-init[481]: Cloud-init v. 22.2-0ubuntu1~20.04.3 running 'modules:config' at Thu, 13 Oct 2022 07:39:57 +0000. Up 24.65 seconds. cloud-init[481]: 2022-10-13 07:39:58,089 - util.py[WARNING]: Failed to run command to import ubuntu SSH ids cloud-init[481]: 2022-10-13 07:39:58,100 - util.py[WARNING]: ssh-import-id failed for: ubuntu ["{'gh': None}", "{'lp': None}"] cloud-init[481]: 2022-10-13 07:39:58,101 - util.py[WARNING]: Running module ssh-import-id (<module 'cloudinit.config.cc_ssh_import_id' from '/usr/lib/python3/dist-packages/cloudinit/config/cc_ssh_import_id.py'>) failed ci-info: +++++++++++++++++++++++++++++++++Authorized keys from /home/ubuntu/.ssh/authorized_keys for user ubuntu+++++++++++++++++++++++++++++++++ ci-info: +---------+-------------------------------------------------------------------------------------------------+---------+----------------+ ci-info: | Keytype |                                       Fingerprint (sha256)                                      | Options |    Comment     | ci-info: +---------+-------------------------------------------------------------------------------------------------+---------+----------------+ ci-info: | ssh-rsa | 33:11:22:d7:b1:f9:83:3b:b8:94:9f:f3:33:33:33:33:12:12:8f:d4:34:2e:60:12:12:12:ae:12:12:12:d4:60 |    -    | milton@somewhe | ci-info: +---------+-------------------------------------------------------------------------------------------------+---------+----------------+ 

使用显示的IP, 以及之前配置的私钥就可以直接登录

修改虚机磁盘大小

默认的镜像只有2GB的磁盘大小, 如果要修改大小, 需要先关闭虚机

查看镜像的磁盘情况

$ qemu-img info ubuntu20.04_1.img  image: ubuntu20.04_1.img file format: qcow2 virtual size: 2.2 GiB (2361393152 bytes) disk size: 273 MiB cluster_size: 65536 Format specific information:     compat: 0.10     refcount bits: 16 

修改磁盘到20G

$ qemu-img resize ubuntu20.04_1.img 20G qemu-img: Could not open 'ubuntu20.04_1.img': Could not open 'ubuntu20.04_1.img': Permission denied milton@miltmac:/data/vms$ sudo qemu-img resize ubuntu20.04_1.img 20G [sudo] password for milton:  Image resized. 

检查设置

$ qemu-img info ubuntu20.04_1.img  image: ubuntu20.04_1.img file format: qcow2 virtual size: 20 GiB (21474836480 bytes) disk size: 273 MiB cluster_size: 65536 Format specific information:     compat: 0.10     refcount bits: 16 

重启虚机, 应用设置

启动后df -h就能看到磁盘大小的变化

$ virsh start ubuntu2004_1  Domain ubuntu2004_1 started 

参考

发表评论

相关文章