怎么用Ansible在KVM上创建虚拟机

发布时间:2021-12-17 11:45:10 作者:小新
来源:亿速云 阅读:556
# 怎么用Ansible在KVM上创建虚拟机

## 前言

在现代IT基础设施管理中,自动化工具已成为不可或缺的一部分。Ansible作为一款强大的自动化工具,能够简化重复性任务并提高运维效率。本文将详细介绍如何利用Ansible在KVM(Kernel-based Virtual Machine)虚拟化平台上创建和管理虚拟机。

## 准备工作

### 1. 环境要求
- **宿主机**:运行Linux并支持KVM虚拟化(建议Ubuntu/CentOS)
- **软件依赖**:
  - Ansible 2.9+
  - Python 3.6+
  - libvirt和qemu-kvm组件
  - `virt-install`工具包

### 2. 安装必要组件
```bash
# Ubuntu/Debian
sudo apt update
sudo apt install -y ansible qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virtinst

# CentOS/RHEL
sudo yum install -y ansible qemu-kvm libvirt virt-install bridge-utils

3. 验证KVM可用性

sudo systemctl enable --now libvirtd
sudo virsh list --all  # 应返回空列表或现有虚拟机

Ansible配置

1. 创建Ansible项目目录

mkdir -p kvm-vm-creation/{inventory,roles,playbooks}
cd kvm-vm-creation

2. 基础目录结构

.
├── inventory
│   └── hosts
├── playbooks
│   └── create_vm.yml
└── roles
    └── kvm-vm
        ├── tasks
        │   └── main.yml
        ├── vars
        │   └── main.yml
        └── templates
            └── vm.xml.j2

实现步骤

步骤一:定义Inventory文件

编辑inventory/hosts文件:

[kvm_hosts]
kvm-host ansible_host=192.168.1.100 ansible_user=root

[all:vars]
ansible_python_interpreter=/usr/bin/python3

步骤二:创建角色变量

编辑roles/kvm-vm/vars/main.yml

---
vm_name: "test-vm"
vm_memory: 2048  # MB
vm_vcpus: 2
vm_disk_size: 20  # GB
vm_os_variant: "centos8"
vm_network: "default"
vm_iso_path: "/var/lib/libvirt/images/CentOS-8-x86_64-1905-dvd1.iso"
vm_disk_path: "/var/lib/libvirt/images/{{ vm_name }}.qcow2"

步骤三:编写Jinja2模板

创建roles/kvm-vm/templates/vm.xml.j2

<domain type='kvm'>
  <name>{{ vm_name }}</name>
  <memory unit='MiB'>{{ vm_memory }}</memory>
  <vcpu placement='static'>{{ vm_vcpus }}</vcpu>
  <os>
    <type arch='x86_64' machine='pc-i440fx-2.1'>hvm</type>
    <boot dev='cdrom'/>
    <boot dev='hd'/>
  </os>
  <devices>
    <disk type='file' device='cdrom'>
      <driver name='qemu' type='raw'/>
      <source file='{{ vm_iso_path }}'/>
      <target dev='hda' bus='ide'/>
      <readonly/>
    </disk>
    <disk type='file' device='disk'>
      <driver name='qemu' type='qcow2'/>
      <source file='{{ vm_disk_path }}'/>
      <target dev='vda' bus='virtio'/>
    </disk>
    <interface type='network'>
      <source network='{{ vm_network }}'/>
      <model type='virtio'/>
    </interface>
    <graphics type='vnc' port='-1' autoport='yes'/>
  </devices>
</domain>

步骤四:编写任务文件

编辑roles/kvm-vm/tasks/main.yml

---
- name: 检查KVM宿主机状态
  command: virsh list
  register: virsh_status
  changed_when: false

- name: 创建虚拟机磁盘镜像
  command: >
    qemu-img create -f qcow2 "{{ vm_disk_path }}" {{ vm_disk_size }}G
  when: not lookup('file', vm_disk_path)|length > 0

- name: 生成虚拟机XML定义
  template:
    src: vm.xml.j2
    dest: "/tmp/{{ vm_name }}.xml"

- name: 定义虚拟机
  command: virsh define "/tmp/{{ vm_name }}.xml"
  register: define_result
  changed_when: "'defined' in define_result.stdout"

- name: 启动虚拟机
  command: virsh start "{{ vm_name }}"
  when: define_result.changed

步骤五:编写Playbook

创建playbooks/create_vm.yml

---
- hosts: kvm_hosts
  become: yes
  gather_facts: yes
  roles:
    - kvm-vm

执行与验证

1. 运行Playbook

ansible-playbook -i inventory/hosts playbooks/create_vm.yml

2. 验证结果

# 在目标主机上执行
virsh list --all
virsh dominfo test-vm

高级配置

1. 使用云镜像快速部署

修改tasks/main.yml添加云镜像支持:

- name: 下载云镜像(如需要)
  get_url:
    url: "https://cloud.centos.org/centos/8/x86_64/images/CentOS-8-GenericCloud-8.4.2105-20210603.0.x86_64.qcow2"
    dest: "/var/lib/libvirt/images/centos8-cloud.qcow2"
    checksum: "sha256:xxxxxx"

- name: 生成cloud-init配置
  template:
    src: cloud-init.j2
    dest: "/var/lib/libvirt/images/{{ vm_name }}-cloud-init.iso"

2. 网络自定义配置

vars/main.yml中添加:

vm_bridge: "br0"
vm_mac: "52:54:00:xx:xx:xx"
vm_ip: "192.168.1.150"

常见问题解决

1. 权限问题

确保Ansible用户有足够权限:

sudo usermod -aG libvirt $USER
sudo usermod -aG kvm $USER

2. 虚拟机无法启动

检查日志:

virsh console test-vm
journalctl -u libvirtd -f

3. 性能优化建议

总结

通过本文的步骤,您已经掌握了: 1. 使用Ansible自动化KVM虚拟机创建的全流程 2. 虚拟机配置的灵活定制方法 3. 常见问题的排查技巧

完整的示例代码可在GitHub仓库获取:示例仓库链接

提示:生产环境中建议结合Vault加密敏感数据,并使用Tag控制任务执行流程。 “`

注:实际运行时需要根据您的具体环境调整参数(如ISO路径、网络配置等)。本文示例基于CentOS 8系统,其他发行版可能需要相应调整包管理命令和路径。

推荐阅读:
  1. vncview无法连接qemu-kvm创建虚拟机
  2. 怎么用Cockpit创建虚拟机

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

ansible kvm 虚拟机

上一篇:可视化网页开发工具Sparkle for Ma怎么用

下一篇:python匿名函数怎么创建

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》