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及其广泛模块集的更多信息,请参阅其 官方文档。