在本地虚拟机使用Alibaba Cloud Linux镜像

Alibaba Cloud Linux提供了VHD和QCOW2格式的本地镜像,并已内置cloud-init供您在本地虚拟机(目前仅支持KVM虚拟机)上使用。本文介绍如何在本地虚拟机上使用Alibaba Cloud Linux 3和Alibaba Cloud Linux 2镜像。

背景信息

本文示例中,本地环境为龙蜥操作系统(下载地址为龙蜥操作系统),使用Alibaba Cloud Linux镜像创建了KVM虚拟机,使用cloud-init初始化虚拟机系统设置,然后使用NoCloud数据源在本地建立相关配置文件,以虚拟磁盘的形式挂载到KVM虚拟机中进行设置,并启动虚拟机。本文适用于对KVM虚拟机有一定了解的用户。

步骤一:本地下载Alibaba Cloud Linux镜像

您可以在本地虚拟机中,通过以下地址下载VHD或者QCOW2格式的Alibaba Cloud Linux镜像。

步骤二:本地生成seed.img引导镜像

Alibaba Cloud Linux镜像本身不能直接启动虚拟机,需要配置引导镜像seed.img,并配置网络、账号、YUM源等信息。

重要
  • 通常情况下该镜像的名称设置为seed.img,您可以使用其他名称,但不建议您这样做。

  • seed.img镜像只包含cloud-init启动所需的配置文件,不包含Alibaba Cloud Linux系统文件。

您可以通过以下两种方式生成seed.img镜像。

  • 方式一:直接下载seed.img镜像

    Alibaba Cloud Linux 3和Alibaba Cloud Linux 2预先提供了seed.img镜像文件,您可以通过以下地址在页面列表选择seed.img进行下载。

    说明

    该引导镜像中的配置信息是不可修改的,因此不适用于所有场景。在使用之前请确保您已了解镜像文件的内容。

  • 方式二:使用NoCloud数据源手动生成seed.img镜像

    说明

    NoCloud数据源是一种cloud-init数据源,可以在本地环境中提供配置文件,以供虚拟机读取和应用。

    1. 在本地同一级目录下,创建meta-datauser-data两个配置文件。

      将这两个配置文件作为seed.img镜像的一部分。当虚拟机启动时,cloud-init将读取该配置文件,并根据配置内容对虚拟机进行初始化。

      1. 新建名为seed的目录,并进入该目录。

        sudo mkdir seed
        sudo cd seed/
      2. 创建meta-data配置文件。

        文件内容示例如下,表示设置虚拟机的名称为alinux-host,您可以根据需要修改。

        #cloud-config
        #vim:syntax=yaml
        
        local-hostname: alinux-host                 
      3. 创建user-data配置文件。

        文件内容示例如下,您可以根据需要修改相关配置信息。

        Alibaba Cloud Linux 3

        #cloud-config
        #vim:syntax=yaml
        
        # 添加一个名为alinux的账号,并且可以执行sudo命令。
        users:
          - default
          - name: alinux
            sudo: ['ALL=(ALL)   ALL']
            plain_text_passwd: aliyun
            lock_passwd: false
        
        # 添加Alibaba Cloud Linux 3的YUM源。
        yum_repos:
            alinux3-module:
                name: alinux3-module
                baseurl: https://mirrors.aliyun.com/alinux/$releasever/module/$basearch/
                enabled: 1
                gpgcheck: 1
                gpgkey: https://mirrors.aliyun.com/alinux/$releasever/RPM-GPG-KEY-ALINUX-3
            alinux3-updates:
                name: alinux3-updates
                baseurl: https://mirrors.aliyun.com/alinux/$releasever/updates/$basearch/
                enabled: 1
                gpgcheck: 1
                gpgkey: https://mirrors.aliyun.com/alinux/$releasever/RPM-GPG-KEY-ALINUX-3
            alinux3-plus:
                name: alinux3-plus
                baseurl: https://mirrors.aliyun.com/alinux/$releasever/plus/$basearch/
                enabled: 1
                gpgcheck: 1
                gpgkey: https://mirrors.aliyun.com/alinux/$releasever/RPM-GPG-KEY-ALINUX-3
            alinux3-powertools:
                name: alinux3-powertools
                baseurl: https://mirrors.aliyun.com/alinux/$releasever/powertools/$basearch/
                gpgcheck: 1
                enabled: 1
                gpgkey: https://mirrors.aliyun.com/alinux/$releasever/RPM-GPG-KEY-ALINUX-3
            alinux3-os:
                name: alinux3-os
                baseurl: https://mirrors.aliyun.com/alinux/$releasever/os/$basearch/
                gpgcheck: 1
                enabled: 1
                gpgkey: https://mirrors.aliyun.com/alinux/$releasever/RPM-GPG-KEY-ALINUX-3

        Alibaba Cloud Linux 2

        #cloud-config
        #vim:syntax=yaml
        
        # 添加一个名为alinux的账号,并且可以执行sudo命令。
        users:
          - default
          - name: alinux
            sudo: ['ALL=(ALL)   ALL']
            plain_text_passwd: aliyun
            lock_passwd: false
        
        # 添加Alibaba Cloud Linux 2的YUM源。
        yum_repos:
            base:
                baseurl: https://mirrors.aliyun.com/alinux/$releasever/os/$basearch/
                enabled: true
                gpgcheck: true
                gpgkey: https://mirrors.aliyun.com/alinux/RPM-GPG-KEY-ALIYUN
                name: Aliyun Linux - $releasever - Base - mirrors.aliyun.com
            updates:
                baseurl: https://mirrors.aliyun.com/alinux/$releasever/updates/$basearch/
                enabled: true
                gpgcheck: true
                gpgkey: https://mirrors.aliyun.com/alinux/RPM-GPG-KEY-ALIYUN
                name: Aliyun Linux - $releasever - Updates - mirrors.aliyun.com
            extras:
                baseurl: https://mirrors.aliyun.com/alinux/$releasever/extras/$basearch/
                enabled: true
                gpgcheck: true
                gpgkey: https://mirrors.aliyun.com/alinux/RPM-GPG-KEY-ALIYUN
                name: Aliyun Linux - $releasever - Extras - mirrors.aliyun.com
            plus:
                baseurl: https://mirrors.aliyun.com/alinux/$releasever/plus/$basearch/
                enabled: true
                gpgcheck: true
                gpgkey: https://mirrors.aliyun.com/alinux/RPM-GPG-KEY-ALIYUN
                name: Aliyun Linux - $releasever - Plus - mirrors.aliyun.com
    2. (条件必选)如果您是Alibaba Cloud Linux 3系统,需要启用epel-testing仓库。

      1. 打开文件epel-testing.repo文件。

        sudo vim /etc/yum.repos.d/epel-testing.repo
      2. i键进入编辑模式,并将enabled=0修改为enabled=1

        [epel-testing]
        name=Extra Packages for Enterprise Linux 8 - Testing - $basearch
        baseurl=http://mirrors.cloud.aliyuncs.com/epel/testing/8/Everything/$basearch
        enabled=0
        gpgcheck=1
        countme=1
        gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-8
      3. Esc键,输入:wq保存修改。

    3. 运行以下命令,安装cloud-utils软件包。

      sudo yum install -y cloud-utils
    4. 运行以下命令,生成seed.img镜像。

      sudo cloud-localds seed.img user-data meta-data

步骤三:启动虚拟机

您可以使用以下任一方式启动KVM虚拟机。

使用libvirt工具启动

  1. 在本地创建一个xml配置文件。

    示例文件的名称为alinux3.xmlalinux2.xml,内容如下,您可以根据需求修改xml配置文件内容。

    Alibaba Cloud Linux 3

    <domain type='kvm'>
        <name>alinux3</name>
        <memory>1048576</memory><!-- 1 GB内存。 -->
        <vcpu>1</vcpu>
        <cpu mode='host-passthrough'><!-- 需要在对应架构的服务器上启动实例。 -->
        </cpu>
        <os>
            <type arch='x86_64'>hvm</type><!-- 如果是ARM64架构的服务器,则需设置为arch='aarch64'。 -->
            <boot dev='hd'/>
        </os>
        <clock sync="localtime"/>
        <on_poweroff>destroy</on_poweroff>
        <on_reboot>restart</on_reboot>
        <on_crash>restart</on_crash>
        <devices>
            <emulator>/usr/bin/qemu-kvm</emulator><!-- 请根据不同的操作系统设置对应的kvm路径。例如:Ubuntu对应的kvm路径是/usr/bin/kvm。 -->
            <disk type='file' device='disk'><!-- 请根据镜像格式设置下面的type参数:qcow2对应type='qcow2'、vhd对应type='vpc'。 -->
                <driver name='qemu' type='qcow2' cache='none' dataplane='on' io='native'/> <!-- 如果要创建qcow2快照,需要关闭dataplane。 -->
                <source file='path'/> <!-- 填写Alibaba Cloud Linux 3镜像的绝对路径。 -->
                <target dev='vda' bus='virtio'/>
            </disk>
            <!-- 加入seed.img的信息。 -->
            <disk type='file' device='disk'>
                <driver name='qemu' type='raw'/>
                <source file='/path/to/your/seed.img'/> <!-- 填写seed镜像的绝对路径。 -->
                <target dev='vdb' bus='virtio'/>
            </disk>
            <interface type='network'>
                <source network='default'/>
                <model type='virtio'/>
            </interface>
            <console type='pty'>
                <target type='virtio' port='0'/>
            </console>
            <video>
                <model type='cirrus' vram='9216' heads='1'/>
                <alias name='video0'/>
            </video>
            <input type='tablet' bus='usb'/>
            <input type='mouse' bus='ps2'/>
            <graphics type='vnc' port='-1' autoport='yes'/>
        </devices>
    </domain>

    Alibaba Cloud Linux 2

    <domain type='kvm'>
        <name>alinux2</name>
        <memory>1048576</memory> <!-- 1 GB内存。 -->
        <vcpu>1</vcpu>
        <os>
            <type arch='x86_64'>hvm</type>
            <boot dev='hd'/>
        </os>
        <clock sync="localtime"/>
        <on_poweroff>destroy</on_poweroff>
        <on_reboot>restart</on_reboot>
        <on_crash>restart</on_crash>
        <devices>
            <emulator>/usr/bin/qemu-kvm</emulator><!-- 请根据不同的操作系统设置对应的kvm路径。例如:Ubuntu对应的kvm路径是/usr/bin/kvm -->
            <disk type='file' device='disk'><!-- 请根据镜像格式设置下面的type参数:qcow2对应type='qcow2'、vhd对应type='vpc'。 -->
                <driver name='qemu' type='qcow2' cache='none' dataplane='on' io='native'/> <!-- 如果要创建qcow2快照,需要关闭dataplane。 -->
                <source file='path'/> <!-- 填写Alibaba Cloud Linux 2镜像的绝对路径。 -->
                <target dev='vda' bus='virtio'/>
            </disk>
            <!-- 加入seed.img的信息。 -->
            <disk type='file' device='disk'>
                <driver name='qemu' type='raw'/>
                <source file='/path/to/your/seed.img'/> <!-- 填写seed镜像的绝对路径。 -->
                <target dev='vdb' bus='virtio'/>
            </disk>
            <interface type='network'>
                <source network='default'/>
                <model type='virtio'/>
            </interface>
            <console type='pty'>
                <target type='virtio' port='0'/>
            </console>
            <video>
                <model type='cirrus' vram='9216' heads='1'/>
                <alias name='video0'/>
            </video>
            <input type='tablet' bus='usb'/>
            <input type='mouse' bus='ps2'/>
            <graphics type='vnc' port='-1' autoport='yes'/>
        </devices>
    </domain>
  2. 使用virsh命令启动虚拟机,命令示例如下。

    说明

    libvirt工具默认使用普通用户启动,请确认镜像文件及所在路径对普通用户是否具有相应的操作权限。

    Alibaba Cloud Linux 3

    sudo virsh define alinux3.xml
    virsh start <KVMName>   # 请修改为KVM虚拟机的名称,可以通过sudo virsh list --name命令查询。

    Alibaba Cloud Linux 2

    sudo virsh define alinux2.xml
    sudo virsh start <KVMName>    # 请修改为KVM虚拟机的名称,可以通过sudo virsh list --name命令查询。

使用qemu-kvm命令行启动

您需要在qemu-kvm命令行中追加如下参数信息:

-drive file=/path/to/your/seed.img,if=virtio,format=raw
  • /path/to/your/seed.img:需要替换为seed.img镜像文件的路径。

  • if=virtio:表示使用virtio接口连接虚拟磁盘。

  • format=raw:表示磁盘镜像文件的格式为RAW。

示例命令:

sudo /usr/libexec/qemu-kvm -drive file=/home/ecs-user/seed/seed.img,if=virtio,format=raw

使用图形界面(virt-manager)启动

在启动虚拟机之前,您需要在本地找到KVM虚拟机的配置文件,在文件内添加seed.img镜像文件的绝对路径。

后续步骤

虚拟机启动成功后,使用user-data配置文件中的用户名和密码登录虚拟机。

说明

如果您需要使用SSH密钥登录,请确保将公钥内容添加到cloud-init配置文件中。

相关文档

  • cloud-init是一个用于自动初始化Linux虚拟机实例的工具。它可以在虚拟机启动时执行一系列任务,包括设置主机名、配置网络、安装软件包等。更多信息,请参见cloud-init官方文档

  • libvirt、qemu-kvm、virt-manager常用于管理和运行KVM虚拟机。更多信息,请参见Red Hat官方说明