目标
利用 Kickstart 完成 centos 9 系统的全自动安装(裸金属/虚拟机)。
安装完成后自动接入 Ansible 进行软件包、服务、用户、配置等系统初始化操作。
实现一套通用、可重复、可维护的自动化交付流程。
KS文件
# ks.cfg 示例
install
lang zh_CN.UTF-8
keyboard us
timezone Asia/Shanghai
network --bootproto=dhcp --device=eth0 --onboot=on
rootpw --iscrypted <HASHED_PASSWORD>
firewall --enabled --service=ssh
authconfig --enableshadow --passalgo=sha512
selinux --enforcing
bootloader --location=mbr
reboot
# 分区
clearpart --all --initlabel
part /boot --fstype=ext4 --size=1024
part swap --size=1024
part / --fstype=xfs --grow --size=1
%packages
@core
vim
wget
curl
openssh-server
python3
%end
%post
echo "Post install begins..."
curl -o /root/bootstrap.sh http://<IP>/ansible/bootstrap.sh
chmod +x /root/bootstrap.sh
/root/bootstrap.sh
%end
脚本
#bootstrap.sh 示例(Post-install 脚本)
#!/bin/bash
yum install -y python3 python3-pip
pip3 install ansible
mkdir -p /etc/ansible
curl -o /etc/ansible/hosts http://<IP>/ansible/inventory
curl -o /root/site.yaml http://<IP>/ansible/site.yaml
ansible-playbook /root/site.yaml -i /etc/ansible/hosts
site.yaml 示例
- hosts: all
become: true
roles:
- base
- ssh
- firewall
- monitoring
- docker
Roles 结构(简化版)
roles/
├── base/ # 基础配置(时区、主机名、NTP)
├── ssh/ # SSH 优化
├── firewall/ # 防火墙规则开放
├── monitoring/ # 安装 Zabbix Agent 或 Prometheus Node Exporter
├── docker/ # 安装容器环境
实践建议
1. 版本控制
使用 Git 管理 Ansible Playbook 和 Kickstart 模板,便于审计和变更追踪。
2. 模板参数化
利用 Jinja2 模板实现主机名、网段、角色等自动替换,提高复用率。
3. 分环境处理
按 prod、test、dev 维护不同 inventory 和 Playbook 逻辑。
4. 安全控制
Kickstart 中密码使用 openssl passwd -6 加密。
Playbook 中敏感数据用 ansible-vault 管理。
5. 日志与追踪
Kickstart %post 输出日志到 /root/kickstart.log
Ansible 启用 log_path,记录执行详情
整体流程:
[ PXE + DHCP ]
│
▼
[ 加载 Kickstart 自动安装 ]
│
▼
[ Post 脚本安装 Ansible 并执行 Playbook ]
│
▼
[ 系统初始化完成,加入运维体系 ]