1. 首页 > Linux教程 > 正文

Linux教程FG410-Ansible批量运维

内容简介:本文风哥教程参考Linux官方文档、Red Hat Enterprise Linux官方文档、Ansible Automation Platform官方文档、Docker官方文档、Kubernetes官方文档和Podman官方文档等内容,详细介绍了相关技术的配置和使用方法。

本文档

风哥提示:

介绍使用Ansible进行批量运维的方法。

Part01-批量系统巡检

1.1 系统巡检Playbook

# 批量系统巡检Playbook
[root@ansible ~]# cat > /fglinux/ansible/playbooks/system_check.yml << 'EOF' --- - name: 批量系统巡检 hosts: all become: yes vars: check_items: - cpu_threshold: 80 - memory_threshold: 85 - disk_threshold: 90 tasks: - name: 获取系统信息 set_fact: system_info: hostname: "{{ ansible_hostname }}" ip: "{{ ansible_default_ipv4.address }}" os: "{{ ansible_distribution }} {{ ansible_distribution_version }}" kernel: "{{ ansible_kernel }}" cpu_cores: "{{ ansible_processor_vcpus }}" memory_total: "{{ ansible_memtotal_mb }}" - name: 检查CPU使用率 shell: top -bn1 | grep "Cpu(s)" | awk '{print $2}' | cut -d'%' -f1 register: cpu_usage changed_when: false - name: 检查内存使用率 shell: free | grep Mem | awk '{print ($3/$2)*100}' register: memory_usage changed_when: false - name: 检查磁盘使用率 shell: df -h / | tail -1 | awk '{print $5}' | tr -d '%' register: disk_usage changed_when: false - name: 检查系统负载 shell: cat /proc/loadavg | awk '{print $1,$2,$3}' register: system_load changed_when: false - name: 检查运行时间 shell: uptime -p register: uptime_info changed_when: false - name: 检查关键服务状态 service_facts: register: services_state - name: 检查网络连接数 shell: ss -s | grep TCP | awk '{print $2}' register: network_connections changed_when: false - name: 生成巡检报告 set_fact: check_report: system: "{{ system_info }}" cpu_usage: "{{ cpu_usage.stdout }}" memory_usage: "{{ memory_usage.stdout }}" disk_usage: "{{ disk_usage.stdout }}" system_load: "{{ system_load.stdout }}" uptime: "{{ uptime_info.stdout }}" network_connections: "{{ network_connections.stdout }}" check_time: "{{ ansible_date_time.iso8601 }}" - name: 显示巡检结果 debug: msg: | ======================================== 系统巡检报告 ======================================== 主机名: {{ system_info.hostname }} IP地址: {{ system_info.ip }} 操作系统: {{ system_info.os }} 内核版本: {{ system_info.kernel }} CPU核心: {{ system_info.cpu_cores }} 总内存: {{ system_info.memory_total }} MB ---------------------------------------- CPU使用率: {{ cpu_usage.stdout }}% 内存使用率: {{ memory_usage.stdout }}% 磁盘使用率: {{ disk_usage.stdout }}% 系统负载: {{ system_load.stdout }} 运行时间: {{ uptime_info.stdout }} 网络连接: {{ network_connections.stdout }} 巡检时间: {{ ansible_date_time.iso8601 }} ======================================== - name: CPU告警 debug: msg: "警告: CPU使用率超过阈值" when: cpu_usage.stdout | float > 80

– name: 内存告警
debug:
msg: “警告: 内存使用率超过阈值”
when: memory_usage.stdout | float > 85

– name: 磁盘告警
debug:
msg: “警告: 磁盘使用率超过阈值”
when: disk_usage.stdout | int > 90
EOF

# 执行系统巡检
[root@ansible ~]# ansible-playbook /fglinux/ansible/playbooks/system_check.yml

PLAY [批量系统巡检] **********************************************************

TASK [Gathering Facts] ******************************************************
ok: [web1.fgedu.net.cn]
ok: [web2.fgedu.net.cn]
ok: [db1.fgedu.net.cn]

TASK [获取系统信息] **********************************************************
ok: [web1.更多视频教程www.fgedu.net.cnfgedu.net.cn]
ok: [web2.fgedu.net.cn]
ok: [db1.fgedu.net.cn]

TASK [检查CPU使用率] ********************************************************
ok: [web1.fgedu.net.cn]
ok: [web2.fgedu.net.cn]
ok: [db1.fgedu.net.cn]

TASK [检查内存使用率] *******************************************************
ok: [web1.fgedu.net.cn]
ok: [web2.fgedu.net.cn]
ok: [db1.fgedu.net.cn]

TASK [检查磁盘使用率] *******************************************************
ok: [web1.fgedu.net.cn]
ok: [web2.fgedu.net.cn]
ok: [db1.fgedu.net.cn]

TASK [检查系统负载] *********************************************************
ok: [web1.fgedu.net.cn]
ok: [web2.fgedu.net.cn]
ok: [db1.fgedu.net.cn]

TASK [检查运行时间] *********************************************************
ok: [web1.fgedu.net.cn]
ok: [web2.fgedu.net.cn]
ok: [db1.fgedu.net.cn]

TASK [检查关键服务状态] *****************************************************
ok: [web1.fgedu.net.cn]
ok: [web2.fgedu.net.cn]
ok: [db1.fgedu.net.cn]

TASK [检查网络连接数] *******************************************************
ok: [web1.fgedu.net.cn]
ok: [web2.f学习交流加群风哥微信: itpux-comgedu.net.cn]
ok: [db1.fgedu.net.cn]

TASK [生成巡检报告] *********************************************************
ok: [web1.fgedu.net.cn]
ok: [web2.fgedu.net.cn]
ok: [db1.fgedu.net.cn]

TASK [显示巡检结果] *********************************************************
ok: [web1.fgedu.net.cn] => {
“msg”: “========================================\n系统巡检报告\n========================================\n主机名: web1\nIP地址: 192.168.1.20\n操作系统: Rocky 9.3\n内核版本: 5.14.0-284.11.1.el9_2.x86_64\nCPU核心: 4\n总内存: 8192 MB\n—————————————-\nCPU使用率: 15.5%\n内存使用率: 27.3%\n磁盘使用率: 45%\n系统负载: 0.00 0.01 0.05\n运行时间: up 10 days\n网络连接: 50\n巡检时间: 2026-04-04T03:00:00Z\n========================================”
}

TASK [CPU告警] *********************************************更多学习教程公众号风哥教程itpux_com****************
skipping: [web1.fgedu.net.cn]
skipping: [web2.fgedu.net.cn]
skipping: [db1.fgedu.net.cn]

TASK [内存告警] *************************************************************
skipping: [web1.fgedu.net.cn]
skipping: [web2.fgedu.net.cn]
skipping: [db1.fgedu.net.cn]

TASK [磁盘告警] *************************************************************
skipping: [web1.fgedu.net.cn]
skipping: [web2.fgedu.net.cn]
skipping: [db1.fgedu.net.cn]

PLAY RECAP *****************************学习交流加群风哥QQ113257174*************************************
web1.fgedu.net.cn : ok=11 changed=0 unreachable=0 failed=0 skipped=3
web2.fgedu.net.cn : ok=11 changed=0 unreachable=0 failed=0 skipped=3
db1.fgedu.net.cn : ok=11 changed=0 unreachable=0 failed=0 skipped=3

Part02-批量软件更新

2.1 批量更新Playbook

# 批量软件更新Playbook
[root@ansible ~]# cat > /fglinux/ansible/playbooks/batch_update.yml << 'EOF' --- - name: 批量软件更新 hosts: all become: yes vars: update_type: security reboot_if_needed: true exclude_packages: - kernel* - mysql* tasks: - name: 检查可用更新 command: dnf check-update register: available_updates changed_when: false failed_when: false - name: 显示可用更新 debug: msg: "{{ available_updates.stdout_lines }}" when: available_updates.stdout_lines | length > 0

– name: 更新软件包
dnf:
name: ‘*’
state: latest
exclude: “{{ exclude_packages }}”
register: update_result
when: update_type == ‘all’

– name: 更新安全补丁
command: dnf update –security -y
register: security_update
changed_when: security_update.rc == 0
when: update_type == ‘security’

– name: 检查是否需要重启
stat:
path: /var/run/reboot-required
register: reboot_required

– name: 显示重启需求
debug:
msg: “系统需要重启以完成更新”
when: reboot_required.stat.exists

– name: 重启系统
reboot:
msg: “系统更新后重启”
connect_timeout: 5
reboot_timeout: 300
pre_reboot_delay: 0
post_reboot_delay: 30
when:
– reboot_required.stat.exists
– reboot_if_needed | bool

– name: 等待系统恢复
wait_for_connection:
delay: 10
timeout: 300
when:
– reboot_required.stat.exists
– reboot_if_needed | bool

– name: 验证系统状态
command: uptime
register: uptime_result
changed_when: false

– name: 显示更新结果
debug:
msg: “更新完成,系统运行时间: {{ uptime_result.stdout }}”
EOF

# 执行批量更新
[root@ansible ~]# ansible-playbook /fglinux/ansible/playbooks/batch_update.yml

PLAY [批量软件更新] **********************************************************

TASK [Gathering Facts] ******************************************************
ok: [web1.fgedu.net.cn]

TASK [检查可用更新] *********************************************************
ok: [web1.fgedu.net.cn]

TASK [显示可用更新] *********************************************************
skipping: [web1.fgedu.net.cn]

TASK [更新软件包] ***********************************************************
skipping: [web1.fgedu.net.cn]

TASK [更新安全补丁] *********************************************************
changed: [web1.fgedu.net.cn]

TASK [检查是否需要重启] *****************************************************
ok: [web1.fgedu.net.cn]

TASK [显示重启需求] *********************************************************
skipping: [web1.fgedu.net.cn]

TASK [重启系统] *************************************************************
skipping: [web1.fgedu.net.cn]

TASK [等待系统恢复] *********************************************************
skipping: [web1.fgedu.net.cn]

TASK [验证系统状态] *********************************************************
ok: [web1.fgedu.net.cn]

TASK [显示更新结果] *********************************************************
ok: [web1.fgedu.net.cn] => {
“msg”: “更新完成,系统运行时间: 03:15:00 up 10 days, 2:30, 1 user, load average: 0.00, 0.01, 0.05”
}

PLAY RECAP ******************************************************************
web1.fgedu.net.cn : ok=5 changed=1 unreachable=0 failed=0 skipped=6

风哥针对批量运维建议:

  • 先在测试环境验证
  • 分批次执行更新
  • 保留操作日志
  • 设置回滚方案
  • 监控执行结果

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息