CentOS虚拟机如何进行自动化运维
小樊
44
2025-12-21 09:08:51
CentOS虚拟机自动化运维实践指南
一、总体架构与工具选型
- 配置管理与编排:优先选用Ansible(无代理、基于SSH、上手快),在大规模或强合规场景可考虑Puppet/Chef/SaltStack。
- 持续交付:Jenkins、GitLab CI/CD用于构建、测试、发布一体化流水线。
- 基础设施即代码:Terraform管理云上/虚拟化资源(配合Ansible做配置)。
- 监控与告警:Prometheus + Grafana、Zabbix、Nagios覆盖指标与可视化。
- 日志分析:**ELK(Elasticsearch/Logstash/Kibana)**集中化日志。
- 虚拟化管控(宿主机为Linux/KVM):用libvirt/virsh批量启停、备份、自动启动与恢复。
- 轻量脚本:Shell/Python用于胶水逻辑、巡检与自研工具。
二、快速落地步骤
- 环境准备
- 在控制机安装Ansible:sudo yum install -y epel-release && sudo yum install -y ansible。
- 生成密钥并分发到所有虚拟机:ssh-keygen -t rsa -P ‘’;ssh-copy-id user@vm_ip。
- 规划Inventory(/etc/ansible/hosts 或项目目录):
[webservers]
192.168.1.10
192.168.1.11
[db]
192.168.1.20
- 标准化初始化Playbook(示例要点)
- 关闭不必要服务与加固:按需关闭防火墙/SELinux或配置合规规则。
- 网络与时间:配置静态IP(/etc/sysconfig/network-scripts/ifcfg-ens33)、设置时区、配置NTP/chrony并定时同步。
- 基础软件与用户:安装常用包(如wget/net-tools/vim)、创建运维用户并加入wheel、分发公钥。
- 应用部署Playbook(示例)
- 安装并启动服务:
- hosts: webservers
become: yes
tasks:
- name: Install Apache
yum: name=httpd state=present
- name: Start and enable Apache
service: name=httpd state=started enabled=yes
- 运行:ansible-playbook -i inventory webserver.yml。
- 定时与巡检
- 定时任务:在目标机使用Cron执行备份/清理/巡检脚本。
- 轻量巡检脚本:磁盘阈值告警、服务状态检查等,配合邮件或企业微信/钉钉Webhook通知。
三、虚拟机生命周期自动化(宿主机为KVM)
- 常用virsh命令
- 列表与状态:virsh list --all
- 启动/关机:virsh start ;virsh shutdown (优雅关机)
- 强制断电:virsh destroy (相当于拔电,谨慎使用)
- 挂起/恢复:virsh suspend ;virsh resume
- 随宿主机启动:virsh autostart
- 备份与恢复:virsh dumpxml > /backup/.xml;virsh define /backup/.xml
- 取消定义(删除定义,不删磁盘):virsh undefine
- 批量关机脚本示例
- #!/bin/bash
vms=(“vm1” “vm2” “vm3”)
for vm in “${vms[@]}”; do
virsh shutdown “$vm”
sleep 10
done
提示:优雅关机优先,超时再考虑destroy;批量变更前先备份XML与重要数据。
四、CI/CD与监控日志联动
- 流水线设计
- 代码提交触发Jenkins/GitLab CI构建与单元测试;
- 制品上传(如RPM/镜像仓库);
- 使用Ansible在目标虚拟机上滚动发布(分批、回滚策略、健康检查)。
- 监控告警
- Prometheus采集主机与应用指标,Grafana做可视化与阈值告警;
- Zabbix做主机/服务可用性监控与事件通知。
- 日志治理
- Filebeat/rsyslog采集日志至ELK,实现错误聚类、检索与可视化。
五、安全与最佳实践
- 加固与合规:最小权限、禁用不必要端口与服务、密钥登录、启用SELinux或等效机制、定期补丁。
- 幂等与可重入:Playbook/脚本需多次运行结果一致,避免“重复创建/重复重启”。
- 错误处理与回滚:关键步骤加判断与回滚路径,保留失败现场日志。
- 模块化与复用:使用Ansible Roles与动态Inventory,将复杂配置拆解为可维护单元。
- 变更管控:代码化(Git)管理Playbook与清单,评审后上线,配合灰度/金丝雀发布。