Linux基础 - Ansible 服务实现自动化运维

目录

零. 简介

一. 安装

二. 模块介绍

三. 基本使用


零. 简介

Ansible 是一款极其强大且简单易用的开源 IT 自动化工具。

它的主要特点和优势包括:

  1. 无代理架构:Ansible 不需要在被管理的节点上安装代理程序,而是通过 SSH 协议与目标节点进行通信,这大大降低了部署和维护的复杂性。
  2. 简单的配置语言:使用 YAML 格式的配置文件,语法简洁易懂,易于学习和编写。
  3. 强大的模块库:提供了丰富的内置模块,涵盖了系统管理、应用部署、配置管理等众多领域,能够满足各种常见的自动化需求。
  4. 可扩展性:支持自定义模块和插件的开发,以满足特定的业务需求。
  5. 幂等性操作:Ansible 的操作具有幂等性,即多次执行相同的任务,其结果始终一致,不会产生意外的副作用。
  6. 跨平台支持:可以管理多种操作系统,包括 Linux、Windows、Unix 等。

Ansible 通常用于自动化服务器配置、应用部署、软件安装、系统更新、用户管理等一系列重复性的运维任务,能够显著提高工作效率,减少人为错误,保障系统的一致性和稳定性。

一. 安装

以下是在 Linux 系统上安装 Ansible 的一般步骤:

  1. 安装依赖(在基于 Red Hat 的系统上,如 CentOS 或 RHEL):
   sudo yum install epel-release
   sudo yum update

在基于 Debian 的系统上,如 Ubuntu:

   sudo apt-get update
   sudo apt-get install software-properties-common
   sudo apt-add-repository --yes --update ppa:ansible/ansible

安装 Ansible:

  • 在基于 Red Hat 的系统上:
     sudo yum install ansible
  • 在基于 Debian 的系统上:
     sudo apt-get install ansible

安装完成后,您可以通过以下命令验证 Ansible 是否安装成功:

ansible --version

这将显示 Ansible 的版本信息,表明安装成功。

二. 模块介绍

  1. command 模块:在远程主机执行命令,这是 Ansible 的默认模块,可忽略 -m 选项。但它不支持 $varname<>|;& 等,也不支持管道符、重定向符号,并且不具有幂等性。
    • 基本格式:ansible <组名/ip> (-m command) -a '命令'
    • 常用参数:
      • chdir:在远程主机上运行命令前,提前进入指定目录。
      • creates:判断指定文件是否存在,如果存在,不执行后面的操作。
      • removes:判断指定文件是否存在,如果存在,执行后面的操作。
    • 示例:
      • 指定组或 IP 执行命令:ansible 192.168.2.102 -a 'date' 或 ansible webservers -a 'date'
      • 使用 chdir 参数:ansible all -m command -a "chdir=/home ls./"
      • 使用 creates 参数:ansible all -m command -a "creates=/opt/test.txt ls./"
      • 使用 removes 参数:ansible all -m command -a "removes=/opt/test.txt ls./"
  2. shell 模块:和 command 模块类似,用于在远程主机执行命令,相当于调用远程主机的 shell 进程,然后在该 shell 下打开一个子 shell 运行命令。此模块支持管道符号等功能,但也不具有幂等性。
    • 基本格式:ansible <组/ip/all> -m shell -a '命令'
  3. cron 模块:用于管理远程主机上的定时任务。
    • 常用参数:
      • minute:分钟字段,取值范围 0-59。
      • hour:小时字段,取值范围 0-23。
      • day:日期字段,取值范围 1-31。
      • month:月份字段,取值范围 1-12。
      • weekday:星期字段,取值范围 0-6(0 表示星期日)。
      • job:要执行的任务或命令。
      • name:定时任务的名称。
      • state:状态,可选值为 present(添加或更新定时任务)、absent(删除定时任务)。
    • 示例:添加一个每天凌晨 2 点执行的备份任务,任务名为 daily_backup :ansible hosts -m cron -a "minute=0 hour=2 job='/usr/local/bin/backup.sh' name=daily_backup state=present"
  4. user 模块:用于管理远程主机上的用户。
    • 常用参数:
      • name:用户名。
      • password:用户密码(需加密)。
      • state:状态,可选值为 present(创建或确保用户存在)、absent(删除用户)。
      • system:是否为系统用户。
      • uid:用户 ID。
      • group:用户所属的主组。
      • groups:用户所属的附加组列表。
    • 示例:创建一个名为 testuser 的用户,密码为 pass123 ,主组为 users ,附加组为 admins :ansible hosts -m user -a "name=testuser password='$6$salt$encrypted_password' state=present group=users groups=admins"
  5. group 模块:用于管理远程主机上的用户组。
    • 常用参数:
      • name:组名。
      • state:状态,可选值为 present(创建或确保组存在)、absent(删除组)。
      • gid:组 ID。
    • 示例:创建一个名为 testgroup 的组:ansible hosts -m group -a "name=testgroup state=present"
  6. copy 模块:用于将本地文件复制到远程主机。
    • 常用参数:
      • src:本地源文件路径。
      • dest:远程目标文件路径。
      • backup:在覆盖之前,是否将源文件备份,备份文件包含时间信息,可选值为 yes 或 no 。
      • content:用于替代 src,可以直接设定指定文件的值。
    • 示例:将本地的 /etc/hosts 文件复制到远程主机的 /tmp/hosts 位置:ansible hosts -m copy -a "src=/etc/hosts dest=/tmp/hosts"
  7. file 模块:用于设置文件的属性。
    • 常用参数:
      • path:文件或目录的路径。
      • state:状态,可选值包括 directory(创建目录)、file(创建文件)、link(创建符号链接)、hard(创建硬链接)、absent(删除文件或目录)。
      • owner:文件或目录的所有者。
      • group:文件或目录的所属组。
      • mode:文件或目录的权限,例如 0644 。
    • 示例:创建一个目录:ansible hosts -m file -a "path=/tmp/testdir state=directory"
  8. hostname 模块:用于设置远程主机的主机名。
    • 示例:将远程主机的主机名设置为 new_hostname :ansible hosts -m hostname -a "name=new_hostname"
  9. ping 模块:用于测试与远程主机的连通性。
    • 示例:ansible hosts -m ping
  10. yum/apt 模块:用于在基于 Yum(如 CentOS、RedHat)或 Apt(如 Debian、Ubuntu)的系统上安装、更新或删除软件包。
    • 常用参数:
      • name:软件包名称。
      • state:状态,可选值为 present(安装)、latest(安装最新版本)、absent(删除)。
    • 示例:使用 Yum 安装 Nginx:ansible hosts -m yum -a "name=nginx state=present"
  11. service/systemd 模块:用于管理远程主机上的服务。
    • 常用参数:
      • name:服务名称。
      • state:状态,可选值为 started(启动服务)、stopped(停止服务)、restarted(重启服务)、reloaded(重新加载服务配置)。
    • 示例:启动 Nginx 服务:ansible hosts -m service -a "name=nginx state=started"
  12. script 模块:用于在远程主机上执行本地的脚本。
    • 示例:执行本地的 /path/to/local_script.sh 脚本:ansible hosts -m script -a "/path/to/local_script.sh"
  13. mount 模块:用于管理远程主机上的挂载点。
    • 常用参数:
      • name:挂载点路径。
      • src:设备或文件系统的源路径。
      • opts:挂载选项。
      • state:状态,可选值为 mounted(挂载)、unmounted(卸载)。
    • 示例:挂载一个设备到 /mnt/data :ansible hosts -m mount -a "name=/mnt/data src=/dev/sdb1 opts=defaults state=mounted"
  14. archive 模块:用于创建归档文件(如 tar 包)。
    • 常用参数:
      • path:要归档的文件或目录路径。
      • dest:归档文件的目标路径。
      • format:归档格式,如 tar 、zip 等。
    • 示例:将 /data 目录打包成 /tmp/data.tar :ansible hosts -m archive -a "path=/data dest=/tmp/data.tar format=tar"
  15. unarchive 模块:用于解压归档文件。
    • 常用参数与 archive 模块类似,需要指定 src 为归档文件的路径,以及解压的 dest 目录。
    • 示例:解压 /tmp/data.tar 到 /opt 目录:ansible hosts -m unarchive -a "src=/tmp/data.tar dest=/opt"
  16. replace 模块:用于在文件中替换字符串。

三. 基本使用

以下是 Ansible 的基本使用步骤:

  1. 配置主机清单(Inventory):
    • 在 /etc/ansible/hosts 文件中添加要管理的主机信息,可以按照组来划分主机。例如:
     [webservers]
     server1
     server2

     [dbservers]
     db1
     db2
  1. 创建 Ansible 剧本(Playbook):
    • 使用 YAML 格式创建一个剧本文件,例如 deploy.yml 。以下是一个简单的示例,用于在目标主机上安装 Nginx 服务:
     ---
     - hosts: webservers
       tasks:
         - name: Install Nginx
           yum:
             name: nginx
             state: present
  1. 运行剧本:
    • 使用以下命令运行剧本:
     ansible-playbook deploy.yml

在运行命令后,Ansible 将连接到指定的主机,并按照剧本中的任务进行操作。

您还可以使用 Ansible 的模块进行各种其他操作,如文件管理、用户管理、服务管理等。可以通过 ansible-doc -l 查看可用的模块列表,通过 ansible-doc 模块名 查看特定模块的详细用法。

  • 22
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一然明月(全栈)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值