首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >通过cloud-init快速部署KVM虚拟机

通过cloud-init快速部署KVM虚拟机

原创
作者头像
skystone
修改2025-11-23 15:20:09
修改2025-11-23 15:20:09
620
举报
文章被收录于专栏:Linux DocLinux Doc

0. 环境和目标

宿主机的操作系统是Rocky 9。CentOS类似。

虚拟机镜像采用Rocky-9-GenericCloud.latest.x86_64.qcow2官方镜像文件。

在宿主机上部署网桥bridge,虚拟机网络直接接入宿主机所在网络,与宿主机使用同一个网段的IP。

1. 宿主机

1.1. CPU开启虚拟化

在BIOS里开启CPU虚拟化,Intel VT或者AMD-V。一般而言都是开启状态,可以在操作系统中通过命令检查。

检查CPU是否开启了虚拟化(参考/etc/sysconfig/moduleskvm.modules),执行以下命令,返回数值大于0则表示已经开启了虚拟化。

Intel CPU:

代码语言:shell
复制
$ grep -c vmx /proc/cpuinfo

AMD CPU:

代码语言:shell
复制
$ grep -c svm /proc/cpuinfo

1.2. 操作系统中加载kvm内核模块

操作系统中需要加载kvm内核模块。一般而言,操作系统中已经默认加载了该模块,可以通过命令检查。

执行以下命令,显示kvm条目则表示kvm模块已经加载。

代码语言:shell
复制
    # lsmod|grep kvm
    kvm_intel             148081  57 
    kvm                   461126  1 kvm_intel

如果没有加载,modprobe kvm加载即可。

1.3. 安装虚拟化软件

代码语言:shell
复制
    yum install qemu-system-x86
    yum install qemu-img
    yum install libguestfs
    yum install tigervnc-server

    #默认有
    #yum install xorriso

    systemctl start libvirtd

2. 创建网桥

代码语言:shell
复制
ip link add br0 type bridge
ip address delete 10.0.0.10/24 dev eth0
ip address add 10.0.0.10/24 dev br0
ip link set dev br0 up
ip route add default via 10.0.0.1 dev br0
 

3. 根据官方qcow2镜像创建系统盘

代码语言:shell
复制
qemu-img convert -f qcow2 -O qcow2 Rocky-9-GenericCloud.latest.x86_64.qcow2 r9-01.qcow2

4. 直接启动

代码语言:shell
复制
    virt-install --name r9-01 --memory 4096 --noreboot --os-variant detect=on,name=rocky9 --disk "$(pwd)/r9-01.qcow2" --graphics vnc,port=5911,listen=0.0.0.0 --boot hd

直接启动官方镜像,也会运行cloud-init,使用的是镜像自带的默认配置,不方便。实际使用时,使用cloud-init配置文件,见第5节步骤。

5. 自定义cloud-init初始化启动

5.1. 创建cloud-init配置文件。3个,meta-data, user-data,network-config

代码语言:shell
复制
    #创建1个空的meta-data,之后有元数据需求可以填入
    touch meta-data
    #创建网络配置文件,并将虚拟机的IP填入
    cat << EOF > network-config 
    network:
    version: 2
    ethernets:
        # opaque ID for physical interfaces, only referred to by other stanzas
        eth0:
        dhcp4: no
        addresses:
            - 10.0.0.11/24
        gateway4: 10.0.0.1
        nameservers:
            addresses: [10.0.0.3]
    EOF
    cat << EOF > user-data 
    #cloud-config
    hostname: r9-01
    chpasswd:
    list: |
        root:<密码明文>
    expire: false
    ssh_pwauth: true
    disable_root: false
    groups:
    - candy
    users:
    - name: candy
        primary_group: candy
        lock_passwd: false
        passwd: $6$rounds=4096$X7iep1or/AJiS0BF$UUULI8dypbeFw.Hc1AS7.eFm6YYYVVYz.sVLXw4CgVUMWayg220Z3A8SyklHqPRkeVlgonv/uGT3kky8U0LMO.
    EOF

5.2. 其中,user-data中的加密密码生成方法如下:

使用mkpasswd命令,输入要加密的密码明文,回车,就会打印生成加密密码。

代码语言:shell
复制
    [root@log01 r9-wht-config]# mkpasswd --method=SHA-512 --rounds=4096
    Password: 
    #
    $6$rounds=4096$X7iep1or/AJiS0BF$UUULI8dypbeFw.Hc1AS7.eFm6YYYVVYz.sVLXw4CgVUMWayg220Z3A8SyklHqPRkeVlgonv/uGT3kky8U0LMO.

5.3. cloud-init初始化启动

代码语言:shell
复制
        virt-install --name r9-01 --memory 4096 --noreboot --os-variant detect=on,name=rocky9 --disk "$(pwd)/r9-01.qcow2" --graphics vnc,port=5911,listen=0.0.0.0 --cloud-init user-data="$(pwd)/user-data,meta-data=$(pwd)/meta-data,network-config=$(pwd)/network-config" --network bridge=br0,model=virtio

6. 访问虚拟机

3种方式。

(1) virsh创建的虚拟机,可以通过virsh console <vm名称>来访问。

(2) 在创建虚拟机时,配置了vnc,使用vnc viewer访问即可。

(3) 在cloud-init自定义文件中,配置了虚拟机的网络IP,通过ssh访问即可。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0. 环境和目标
  • 1. 宿主机
    • 1.1. CPU开启虚拟化
    • 1.2. 操作系统中加载kvm内核模块
    • 1.3. 安装虚拟化软件
  • 2. 创建网桥
  • 3. 根据官方qcow2镜像创建系统盘
  • 4. 直接启动
  • 5. 自定义cloud-init初始化启动
    • 5.1. 创建cloud-init配置文件。3个,meta-data, user-data,network-config
    • 5.2. 其中,user-data中的加密密码生成方法如下:
    • 5.3. cloud-init初始化启动
  • 6. 访问虚拟机
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档