您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# 怎么用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
sudo systemctl enable --now libvirtd
sudo virsh list --all # 应返回空列表或现有虚拟机
mkdir -p kvm-vm-creation/{inventory,roles,playbooks}
cd kvm-vm-creation
.
├── inventory
│ └── hosts
├── playbooks
│ └── create_vm.yml
└── roles
└── kvm-vm
├── tasks
│ └── main.yml
├── vars
│ └── main.yml
└── templates
└── vm.xml.j2
编辑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"
创建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
创建playbooks/create_vm.yml
:
---
- hosts: kvm_hosts
become: yes
gather_facts: yes
roles:
- kvm-vm
ansible-playbook -i inventory/hosts playbooks/create_vm.yml
# 在目标主机上执行
virsh list --all
virsh dominfo test-vm
修改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"
在vars/main.yml
中添加:
vm_bridge: "br0"
vm_mac: "52:54:00:xx:xx:xx"
vm_ip: "192.168.1.150"
确保Ansible用户有足够权限:
sudo usermod -aG libvirt $USER
sudo usermod -aG kvm $USER
检查日志:
virsh console test-vm
journalctl -u libvirtd -f
通过本文的步骤,您已经掌握了: 1. 使用Ansible自动化KVM虚拟机创建的全流程 2. 虚拟机配置的灵活定制方法 3. 常见问题的排查技巧
完整的示例代码可在GitHub仓库获取:示例仓库链接
提示:生产环境中建议结合Vault加密敏感数据,并使用Tag控制任务执行流程。 “`
注:实际运行时需要根据您的具体环境调整参数(如ISO路径、网络配置等)。本文示例基于CentOS 8系统,其他发行版可能需要相应调整包管理命令和路径。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。