使用 Ansible 自动化的 7 项日常系统管理员任务

Ansible:强大的自动化工具

Ansible是红帽公司开发的一款基于Python的免费开源项目,它是一个非常受欢迎的配置管理和IT自动化平台。

Ansible具有跨平台特性,能够与包括Linux、Windows和macOS在内的多种现代操作系统协同工作。它采用YAML(即“YAML Ain’t Markup Language”)声明式语言来描述系统配置,这种语言简洁易懂。

Ansible等现代配置管理平台的出现,彻底改变了IT自动化及行业标准。配置管理工具现已成为DevOps工具集中不可或缺的一部分,对任何现代IT流程的生命周期都至关重要。无论基础架构是构建在本地、混合还是云环境中,Ansible都能发挥作用。它不仅适用于DevOps,还能帮助系统管理员自动化执行许多日常任务。

使用Ansible的优势之一在于它无需在目标机器上安装代理程序。只需要SSH访问权限和一个受支持的Python版本(大多数现代操作系统已默认安装),即可开始使用。此外,Ansible工具轻巧,可用于部署从遗留系统到创新系统的各种环境。

Ansible 的应用场景

编排

Ansible是编排各种系统管理和部署任务的首选工具。通过使用Playbooks,用户可以在不同项目中复用相同的编排工作流。基于YAML的配置数据可以存储在Git存储库或任何受支持的版本控制平台上,实现基础设施的版本控制。

应用部署

无论是简单的几行代码应用还是复杂的多层部署,Ansible都能实现端到端应用部署生命周期的自动化。

安全与合规

Ansible还可以帮助确保系统安全,并符合组织的指导方针和行业标准。它可以跨数千台服务器运行,生成审计报告并修复安全漏洞,从而使管理员能够完全掌控环境。

接下来,让我们看看可以使用Ansible自动执行的一些常见的系统管理员任务。

从本地或远程系统复制文件

系统管理员经常需要将文件从一个目录复制到另一个目录。例如,配置文件通常需要复制到远程服务器,或者有时需要将文件从一个远程位置移动到另一个位置。

Ansible的复制模块可以帮助您在剧本中完成这些任务。

对于系统管理员来说,了解服务器的状态并根据组织策略执行预定义的操作是例行任务。其中一个任务是了解服务器的正常运行时间。使用Ansible,我们可以轻松获取正常运行时间值并将其打印出来。以下示例演示了如何使用复制模块将ntp配置从本地复制到远程服务器:

---
- hosts: all
  gather_facts: no
  become: yes
  tasks:
    - name: 复制新的ntp配置文件,并在不同时备份原始文件
      copy:
        src: ./ntp.conf
        dest: /etc/ntp.conf
        owner: root
        group: root
        mode: '0644'
        backup: yes
  

配置额外的 cron 作业

设置计划任务以执行日常维护是服务器管理的重要组成部分。您可以自动安排备份、补丁、审计等任务在一天或一个月的特定时间执行,从而腾出更多时间进行其他工作。

cron是Linux中用于计划任务的工具之一,Ansible可以帮助您添加或修改这些作业。例如,以下剧本演示了如何使用Ansible轻松地在部分或全部服务器上为root用户设置rsync作业。

---
- hosts: all
  gather_facts: no
  become: yes
  tasks:
    - name: 部署cron作业
      cron:
        name: "设置rsync作业"
        user: root
        minute: "5"
        hour: "4"
        job: "rsync -avz /path/to/folder1 /path/to/folder1 2>&1"
  

管理磁盘和文件系统

Ansible可用于管理磁盘、分区布局、文件系统和挂载,包括Linux服务器上的/etc/fstab文件。通过不同的Ansible模块可以实现这些功能。以下示例展示了如何在100GB磁盘上创建分区,使用ext4文件系统进行格式化,创建用于挂载分区的新目录,并最终将分区挂载到指定目录。通过模块选项,可以在/etc/fstab中创建临时或永久的挂载条目。

---
- hosts: all
  gather_facts: no
  become: yes
  tasks:
    - name: 创建分区
      parted:
        device: /dev/sdb
        number: 1
        part_end: "100%"
        state: present
    - name: 格式化新分区
      filesystem:
        fstype: ext4
        dev: /dev/sdb1
    - name: 创建挂载目录
      file:
        path: /data
        state: directory
    - name: 挂载分区
      mount:
        path: /data
        src: /dev/sdb1
        fstype: ext4
        state: mounted
  

收集服务器日志

将日志保存在方便的位置对于安全、审计和分析至关重要。Ansible允许从企业环境中的不同服务器收集日志,并将其轻松保存在您定义的位置。以下是一个实现此目标的剧本:

---
- hosts: all
  gather_facts: no
  become: yes
  tasks:
  
    - name: 查找日志
      find:
        paths: /var/log/
        patterns: '*.log'
        recurse: yes
      register: _logs

    - name: 获取日志
      fetch:
        src: "{{ item.path }}"
        dest: /tmp/logs
      with_items: "{{ _logs.files }}"
  

安装或删除软件包和软件

通常需要根据用户请求或作为初始服务器构建的一部分安装软件包。有时也需要删除不再需要或存在严重错误的软件包。Ansible允许您轻松安装或删除软件包,而无需逐个登录服务器并运行手动命令。以下示例演示了如何为Ubuntu和基于RHEL/CentOS的Linux服务器分别安装和删除一个软件包。

---
- hosts: ubuntu
  gather_facts: no
  tasks:
    - name: 安装lsof工具
      apt:
        pkg: lsof
        state: latest
      sudo: yes
    - name: 删除ARP扫描工具
      apt:
        pkg: arp-scan
        state: absent
      sudo: yes
      
 ---
- hosts: centos
  gather_facts: no
  tasks:
    - name: 安装lsof工具
      yum:
        pkg: lsof
        state: latest
      sudo: yes
    - name: 删除ARP扫描工具
      yum:
        pkg: arp-scan
        state: absent
      sudo: yes
  

管理用户

用户和组是基于Unix/Linux的系统管理访问和权限的基本结构。在大型组织中,尽管有自动化支持,管理用户和组仍然可能是一个巨大的挑战。

通过Ansible,系统管理员可以利用强大的工具来创建、修改和删除用户和组,并且操作系统支持所有不同的操作。

以下是一个简单的示例,演示了如何使用Ansible创建和删除用户和组。此Playbook运行后,目标服务器将创建具有给定GID的groupA和groupB,并且删除user1(如果存在)。一个新的无shell用户user2将被创建,具有给定的UID、分配的组和锁定的密码。

---
- hosts: all
  gather_facts: no
  become: yes
  tasks:
    - group:
        gid: 12310
        name: groupA
        state: present
    - group:
        gid: 12311
        name: groupB
        state: present
    - user:
        name: user1
        state: absent
    - user:
        name: user2
        uid: 12427
        shell: /bin/false
        password_lock: yes
        groups: groupA, groupB
  

管理服务

服务是在后台运行的守护进程,提供诸如SSH连接(通过sshd)等服务。通过Ansible,您可以管理系统和服务,例如启动、停止和重启它们。以下是一个示例剧本来说明:

---
- hosts: all
  gather_facts: no
  become: yes
  tasks:
    - name: 重启ssh守护进程
      service:
        name: ssh
        state: restarted
    - name: 停止sssd守护进程
      service:
        name: sssd
        state: stopped
    - name: 启动httpd守护进程
      service:
        name: httpd
        state: started
  

在上述示例中,SSH服务将被重启,同时停止SSSD服务。最后,httpd守护进程将被启动。由于Ansible具有幂等性,任何已启动或停止的服务都不会改变,而重启操作始终会改变服务状态。请记住检查服务名称,因为不同的Linux发行版即使对于像ssh和sshd这样的相同服务,也可能使用不同的名称。

总结 👨‍💻

Ansible使系统管理员的生活变得轻松,允许以自动化的方式执行重复且耗时的任务,并减少人为错误和工作量。此外,它支持将配置数据存储在诸如Git之类的中央代码存储库中,允许多个用户协作和审查每个活动。

要了解有关Ansible及其广泛模块集的更多信息,请参阅其 官方文档