1.KVM虚拟化安装

1.1 安装所需依赖包

sudo apt update
# 安装KVM虚拟机及管理工具
sudo apt install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils libguestfs-tools virt-viewer virt-manager virtinst
# 安装python API
sudo apt install python3-libvirt

安装包说明

  • qemu-kvm:即qemu+kvm,kvm负责cpu和内存的虚拟化,而qemu负责IO设备,如网卡和磁盘等的虚拟化。

  • libvirt-daemon-system:KVM管理工具,为不同的虚拟机监视器提供了统一的接口。

  • libvirt-clients: 包含了一组用于与 libvirt 库交互的命令行工具,包括virsh、virt-install,virt-clone

  • virsh: 用于虚拟机的创建,启动,停止,迁移,克隆,配置文件管理等操作。

  • virt-install:用于GuestOS安装

  • virt-clone:用于虚拟机克隆

  • bridge-utils:配置网桥

  • libguestfs-tools:虚拟机镜像管理工具,包括virt-cat、virt-edit、virt-ls、virt-rescue

  • virt-viewer:用于虚拟机控制台

  • virt-manager:图形界面管理KVM虚拟化

  • virtinst: 命令行工具,包括virt-install、virt-clone、virt-manager等。

  • python3-libvirt:libvirt库的Python 绑定,在Python中使用 libvirt 的功能,包括对虚拟机、存储池、网络等资源的管理,以及对虚拟化宿主机的监控和控制。

1.2 启动 libvirtd 服务,并设置为开机自启

sudo systemctl enable libvirtd
sudo systemctl start libvirtd
sudo systemctl status libvirtd

1.3 打开virtual machine manager界面,创建一台2核2G的模版机

创建完毕后需要修改网络,禁用cloud-init网络配置

sudo bash -c 'echo "network: {config: disabled}" > /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg'

进入 cd /etc/netplan/ 目录,删除默认网络配置文件

cd /etc/netplan/ 
rm -rf 50-cloud-init.yaml

创建新的配置文件 vim 01-network-manager-all.yaml。servera地址为100,serverb..f 依次递增

# 创建新的配置文件 01-network-manager-all.yaml,内容如下
network:
    ethernets:
        enp1s0:
            dhcp4: false
            addresses: [192.168.122.100/24]
            gateway4: 192.168.122.1
            nameservers:
              addresses: [223.5.5.5,8.8.8.8]
    version: 2

netplan apply 应用生效,然后将servera关机,再clone五台机器,分别修改其主机名和地址。

在宿主机上修改hosts文件,方便后续通过域名访问六台虚拟机。

root@servera:~# cat /etc/hosts
127.0.0.1       localhost
192.168.122.1  wxySer
# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

192.168.122.100 servera servera.youdu.xin
192.168.122.101 serverb serverb.youdu.xin
192.168.122.102 serverc serverc.youdu.xin
192.168.122.103 serverd serverd.youdu.xin
192.168.122.104 servere servere.youdu.xin
192.168.122.105 serverf serverf.youdu.xin

配置宿主机对六台服务器的 ssh 免密登陆,并测试,确保宿主机能免密登陆到所有服务器上

# 在本地创建密ssh密钥对
ssh-keygen

# 选择默认,一直回车即可
# 查看 生成的 id_rsa id_rsa.pub 私钥和公钥
ls .ssh/
# 将公钥上传到需要免密登陆的服务器
ssh-copy-id root@servera
# 输入服务器的root密码
# ssh免密配置完毕

2.安装Ansible

sudo apt install -y ansible
# 查看版本
ansible --version

2.1 创建demo测试环境

mkdir demo
cd demo 

# 创建主机清单文件
root@wxy-ser:~/demo# cat inventory
[myser]
servera
serverb
serverc
serverd
servere
serverf
# 配置此demo的ansible配置文件
root@wxy-ser:~/demo# cat ansible.cfg
[defaults]
inventory = ./inventory
remote_user = root
# host_key_checking = False
[privilege_escalation]
become=True
become_method=sudo
become_user=root
become_ask_pass=False

测试主机连通性(需要确保所有服务器ssh免密配置成功),若出现了如下图SUCCESS的回应,则OK

ansible all -m 'ping'

编写ansible脚本,统一下发宿主机的hosts配置文件到所有服务器

root@wxy-ser:~/demo# cat hosts.yaml
---
- name: Deploy customized /etc/hosts
  hosts: all
  become: yes
  tasks:
    - name: Generate /etc/hosts from template
      template:
        src: /etc/hosts
        dest: /etc/hosts
        mode: '0644'

运行该剧本,如下图,recap都为ok即可。ssh到任意一台虚拟机查看 /etc/hosts文件确认。

ansible-playbook hosts.yaml

环境搭建完毕,后续再做一些样例演示。