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

Ansible 是 Red Hat 的一个基于 Python 的免费开源项目,是一个流行的配置管理和 IT 自动化平台。

它是多平台的,可以与大多数现代操作系统一起使用,包括 Linux、Windows 和 Mac。 它支持用 YAML 或 YAML Ain’t Markup Language 编写的声明性语言来描述系统配置。

Ansible 与其他现代配置管理平台一起,彻底改变了 IT 自动化和行业标准。 配置管理工具已成为 DevOps 工具集的一部分,并且是任何现代 IT 流程生命周期不可分割的一部分。 这适用于任何现代基础架构环境,无论是构建在本地、混合还是云环境中。 不仅适用于 DevOps,Ansible 还可以帮助自动化系统管理员完成的许多日常任务。

使用 Ansible 的优点之一是它是无代理的,除了对目标机器的 SSH 访问和支持的 Python 版本(大多数现代操作系统已经默认安装)之外,不需要太多开始。 此外,由于它是一个轻量级工具,因此可以部署和使用遗留系统到创新系统。

Ansible 的使用

编排

Ansible 是编排各种系统管理和部署任务的首选工具。 Playbooks 允许在不同的项目中使用相同的编排工作流,基于 YAML 的配置数据允许在 Git 存储库或任何受支持的版本控制平台上存储和版本化您的基础架构。

应用部署

无论是简单的几行代码应用程序还是多层重量级部署,Ansible 都可以实现端到端应用程序部署生命周期的自动化。

安全与合规

Ansible 还可以帮助确保您的系统按照组织的指导方针得到保护并符合行业标准。 它可以跨数千台服务器运行,生成审计并修复这些安全漏洞,让管理员完全控制环境。

现在让我们看看您可以使用 Ansible 自动执行的一些常见系统管理员任务。

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

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

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

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

---
- hosts: all
  gather_facts: no
  become: yes
  tasks:
    - name: Copy a new ntp configuration file and back up the original, if it differs
      copy:
        src: ./ntp.conf
        dest: /etc/ntp.conf
        owner: root
        group: root
        mode: '0644'
        backup: yes

配置额外的 cron 作业

设置计划作业以执行日常任务是管理任何服务器的一部分。 您可以在一天或一个月的特定时间自动安排自动备份、修补、审核等,并留出生产时间供您使用。

  小型企业的 SEO:简要指南

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

---
- hosts: all
  gather_facts: no
  become: yes
  tasks:
    - name: Deploy cron job
      cron:
        name: "Set rsync job"
        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: Create a partition
      parted:
        device: /dev/sdb
        number: 1
        part_end: "100%"
        state: present
    - name: Format new partition
      filesystem:
        fstype: ext4
        dev: /dev/sdb1
    - name: Create mount directory
      file:
        path: /data
        state: directory
    - name: Mount partition
      mount:
        path: /data
        src: /dev/sdb1
        fstype: ext4
        state: mounted

收集服务器日志

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

---
- hosts: all
  gather_facts: no
  become: yes
  tasks:
  
    - name: Find logs
      find:
        paths: /var/log/
        patterns: '*.log'
        recurse: yes
      register: _logs

    - name: Fetch logs
      fetch:
        src: "{{ item.path }}"
        dest: /tmp/logs
      with_items: "{{ _logs.files }}"

安装或删除软件包和软件

通常需要根据用户请求或作为初始服务器构建的一部分安装软件包。 我们可能还需要删除某些不再需要或存在一些严重错误等的包。Ansible 允许您轻松安装或删除包,而无需前往每个服务器并运行手动命令。 这是一个示例,演示了为 Ubuntu 和基于 RHEL/CentOS 的 Linux 服务器分别安装和删除一个软件包。

---
- hosts: ubuntu
  gather_facts: no
  tasks:
    - name: Install lsof utility
      apt:
        pkg: lsof
        state: latest
      sudo: yes
    - name: Remove ARP Scan utility
      apt:
        pkg: arp-scan
        state: absent
      sudo: yes
      
 ---
- hosts: centos
  gather_facts: no
  tasks:
    - name: Install lsof utility
      yum:
        pkg: lsof
        state: latest
      sudo: yes
    - name: Remove ARP Scan utility
      yum:
        pkg: arp-scan
        state: absent
      sudo: yes

管理用户

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

  2021 年 Ryzen CPU 的最佳 RAM(购买指南)

使用 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: Restart ssh daemon
      service:
        name: ssh
        state: restarted
    - name: Restart sssd daemon
      service:
        name: sssd
        state: stopped
    - name: Restart httpd daemon
      service:
        name: httpd
        state: started

在上面的例子中,SSH 服务将在接下来停止 SSSD 服务的同时重新启动。 httpd 守护进程在接近尾声时启动。 由于 Ansible 是幂等的,任何已经启动或停止的服务都不会改变,而重启总是会改变服务状态。 请记住检查服务名称,因为不同的 Linux 发行版使用其他名称,即使对于 ssh 和 sshd 等相同的服务也是如此。

  如何在 Ubuntu 服务器上的 Webmin 中设置 NFS 共享

总结👨‍💻

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

要阅读有关 Ansible 及其广泛模块集的更多信息,请参阅其 文件.