云计算百科
云计算领域专业知识百科平台

搭建基于Ansible的服务器自动化运维管理平台

核心目标

实现多台服务器的批量安装系统和ansible初始化。

1. 实验环境准备

1.1 虚拟机网络配置
  • 网络模式:使用 Host-Only模式,确保所有虚拟机(包括控制节点)处于同一局域网(如192.168.1.0/24)。控制节点可以增加一个虚拟网卡用来访问外网资源
  • 控制节点:1台(访问外网ip:192.1.100.141 pxe控制IP:192.168.1.254),安装PXE服务和Ansible。
  • 被管理节点:3台虚拟机,网卡设置为PXE启动

搭建PXE服务器(控制节点操作)

关闭防火墙,关闭selinux

systemctl disable firewalld –now
setenforce 0
sudo sed -i "s/SELINUX=enforcing/SELINUX=disabled/" /etc/selinux/config

安装依赖服务

sudo yum install -y dhcp* tftp-server httpd syslinux
sudo systemctl enable dhcpd tftp httpd

配置DHCP服务

编辑 /etc/dhcp/dhcpd.conf:

subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.200 192.168.1.220; # IP地址池
option routers 192.168.1.254; # 网关
option domain-name-servers 8.8.8.8; # DNS
filename "pxelinux.0"; # PXE引导文件
next-server 192.168.1.254; # TFTP服务器IP(控制节点)
}

重启服务:

sudo systemctl restart dhcpd

配置TFTP服务

# 复制PXE引导文件到TFTP目录
sudo cp -r /usr/share/syslinux/* /var/lib/tftpboot/
sudo mkdir -p /var/lib/tftpboot/pxelinux.cfg

# 创建PXE菜单配置文件
sudo vi /var/lib/tftpboot/pxelinux.cfg/default

内容如下:

default menu.c32
timeout 2
prompt 0

label linux
menu label ^Install CentOS 8
kernel vmlinuz
append initrd=initrd.img inst.repo=http://192.168.1.254/centos8 ks=http://192.168.1.254/ks.cfg

重启服务:

sudo systemctl restart tftp

配置http服务

sudo mkdir /var/www/html/centos8
sudo mount /dev/sr0 /var/www/html/centos8
sudo systemctl enable httpd –now
sudo cp -r /var/www/html/centos8/isolinux/{vmlinuz,initrd.img} /var/lib/tftpboot/

配置Kickstart

内容如下(精简版):

[test@control html]$ sudo cat ks.cfg
# Kickstart自动安装配置
install
url –url=http://192.168.1.254/centos8 #安装源
lang en_US.UTF-8 #编码
keyboard us
network –onboot yes –device eth0 –bootproto dhcp
rootpw –plaintext root # 设置root密码
firewall –disabled
selinux –disabled
timezone Asia/Shanghai
bootloader –location=mbr
clearpart –all –initlabel
part / –fstype ext4 –size 10240 #文件系统
part swap –size 2048

%packages
@^minimal
@^graphical-server-environment #软件包安装
vim
net-tools
%end

%post –nochroot #在post部分添加重启命令
# 安装后脚本:写入完成标记
echo "PXE installation complete!" > /root/pxe_complete.txt #安装完成的信息
echo "reboot" > /root/reboot.sh
chmod +x /root/reboot.sh
bash /reboot.sh
%end

权限设置:

sudo chmod 755 -R /var/lib/tftp

sudo chmod 755 -R /var/www/html

3. 启动虚拟机安装系统

3.1 设置虚拟机PXE启动
自动安装过程

启动3台虚拟机,它们会通过PXE加载引导文件,自动从HTTP服务器下载Kickstart配置。

系统自动安装完成后,虚拟机会重启并进入新系统。

VirtualBox/VMware:在3台虚拟机设置中,将 网络启动(PXE) 设为第一启动项。

验证:

常见错误总结

现象

原因

解决方案

安装源不可达

HTTP路径错误或权限不足

检查 inst.repo

和 url –url

,修正权限

分区配置缺失

Kickstart未定义 /

分区

添加 part / –fstype ext4 –size 10240

软件包选择错误

%packages

段缺失或无效

添加 @^graphical-server-environment

或有效包组

通过以上步骤,可系统性解决PXE安装中的配置问题。如果仍无法解决,可通过查看安装界面的 详细日志(按 Ctrl+Alt+F2 切换终端)进一步定位错误。

ansible初始化

安装控制端ansible

sudo yum install -y https://mirrors.aliyun.com/epel/epel-release-latest-8.noarch.rpm //安装epel源

sudo pip3 install ansible==4.9.0 -i https://pypi.tuna.tsinghua.edu.cn/simple //使用pip3下载ansible,这里是用国内的镜像源

配置ansible
环境搭建

因为2.1版本默认是没有配置文件的,使用我们要先创建ansible

mkdir /etc/ansible

cd /etc/ansible/

sudo vi ansible.cfg

[default]
inventory = ./inventory
remote_user = user
ask_pass = false

[privilege_escalation]
become = true
become_method = sudo
become_user = root
become_ask_pass = false

vi inventory

[all_servers]
server1 ansible_host=192.168.1.204
server2 ansible_host=192.168.1.205 #地址是因为虚拟机重装了,正常是从201开始
server3 ansible_host=192.168.1.206
server4 ansible_host=192.168.1.207

[all_servers:vars]
ansible_ssh_user=root
ansible_ssh_pass=root

因为centos8的软件库中移除了sshpass安装包,使用需要编码下载sshpass

sudo dnf install gcc make -y
wget https://sourceforge.net/projects/sshpass/files/latest/download -O sshpass.tar.gz
tar -xvf sshpass.tar.gz
cd sshpass-1.10
./configure
make
sudo make install

vi /etc/hosts

192.168.1.204 server1
192.168.1.205 server2
192.168.1.206 server3
192.168.1.207 server4

ssh-keygen -t rsa -b 4096 #生成密钥文件

mkdir playbooks

vi playbooks/init_servers.yml

– name: Initialize Servers
hosts: all_servers
become: yes

– name: Deploy SSH Key
ansible.posix.authorized_key:
user: root
key: "{{ lookup('file', '/root/.ssh/id_rsa.pub') }}"
state: present

– name: Harden SSH
template:
src: "templates/sshd_config.j2"
dest: /etc/ssh/sshd_config
notify: Restart SSH

– name: copy ssh repo
copy:
src: /etc/ansible/repo.sh
dest: /repo.sh
mode: '0755'
– name: execute the shell
shell: /repo.sh
– name: Install Base Tools
package:
name:
– vim
– net-tools
state: present

handlers:
– name: Restart SSH
systemd:
name: sshd
state: restarted

mkdir templates

vi templates/sshd_config,j2

port 2222
PermitRootLogin prohibit-password
PasswordAuthentication no

sudo vi repo.sh

#!/bin/bash
cd /etc/yum.repos.d/
mkdir bak
mv * bak
echo "[baseos]" >> base.repo
echo "name=baseos" >> base.repo
echo "baseurl=http://192.168.1.254/centos8/BaseOS" >> base.repo
echo "gpgcheck=0" >> base.repo

echo "[appstream]" >> base.repo
echo "name=appstream" >> base.repo
echo "baseurl=http://192.168.1.254/centos8/AppStream" >> base.repo
echo "gpgcheck=0" >> base.repo

yum repolist

 chmod 755 repo.sh

sudo chmod 644 -R templates

export ANSIBLE_HOST_KEY_CHECKING=False

//避免首次连接时的交互提示

ANSIBLE_HOST_KEY_CHECKING=False #用于禁用在连接到远程主机时进行 SSH 主机密钥检查

sudo ANSIBLE_HOST_KEY_CHECKING=False /usr/local/bin/ansible-playbook -i inventory init_servers.yml

赞(0)
未经允许不得转载:网硕互联帮助中心 » 搭建基于Ansible的服务器自动化运维管理平台
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!