Ansible自动化运维详细教程及playbook详解

Ansible 一种集成 IT 系统的配置管理、应用部署、执行特定任务的开源平台,是 AnsibleWorks 公司名下的项目,该公司由 Cobbler 及 Func 的作者于 2012 年创建成立。

Ansible 基于 Python 语言实现,由 Paramiko 和 PyYAML 两个关键模块构建。

Ansible 特点:

部署简单,只需在主控端部署 Ansible 环境,被控端无需做任何操作。
默认使用 SSH(Secure Shell)协议对设备进行管理。
主从集中化管理。
配置简单、功能强大、扩展性强。
支持 API 及自定义模块,可通过 Python 轻松扩展。
通过 Playbooks 来定制强大的配置、状态管理。
对云计算平台、大数据都有很好的支持。
提供一个功能强大、操作性强的 Web 管理界面和 REST API 接口 —- AWX 平台。
Ansible 与 SaltStack:

最大的区别是 Ansible 无需在被监控主机部署任何客户端代理,默认通过 SSH 通道进行远程命令执行或下发配置。
相同点是都具备功能强大、灵活的系统管理、状态配置,都使用 YAML 格式来描述配置,两者都提供丰富的模板及 API,对云计算平台、大数据都有很好的支持。

安装ansible
在这里插入图片描述
配置ansible
在这里插入图片描述

ansible.cfg 是 Ansible 工具的配置文件;hosts 用来配置被管理的机器;roles 是一个目录,playbook 将使用它

SSH秘钥认证

Ansible自动化运维详细教程及playbook详解_第1张图片
Ansible自动化运维详细教程及playbook详解_第2张图片

添加被管理主机
在这里插入图片描述Ansible自动化运维详细教程及playbook详解_第3张图片

测试ansible
Ansible自动化运维详细教程及playbook详解_第4张图片
-i 指定 hosts 文件位置
-u username 指定 SSH 连接的用户名
-k 指定远程用户密码
Ansible自动化运维详细教程及playbook详解_第5张图片
-f 指定并发数
-s 如需要 root 权限执行时使用 ( 连接用户不是 root 时 )
-K -s 时,-K 输入 root 密码

vim /etc/ansible/hosts
www.abc.com # 定义域名
192.168.1.100 # 定义 IP
192.168.1.150:37268 # 指定端口号
[WebServer] # 定义分组 192.168.1.10 192.168.1.20 192.168.1.30
[DBServer] # 定义多个分组 192.168.1.50 192.168.1.60 Monitor ansible_ssh_port=12378 ansible_ssh_host=192.168.1.200 # 定义别名
ansible_ssh_host 连接目标主机的地址
ansible_ssh_port 连接目标主机的端口,默认 22 时无需指定
ansible_ssh_user 连接目标主机默认用户
ansible_ssh_pass 连接目标主机默认用户密码
ansible_ssh_connection 目标主机连接类型,可以是 local 、ssh 或 paramiko
ansible_ssh_private_key_file 连接目标主机的 ssh 私钥
ansible_*_interpreter 指定采用非 Python 的其他脚本语言,如 Ruby 、Perl 或其他类似 ansible_python_interpreter 解释器
[webservers] # 主机名支持正则描述 www[01:50].example.com [dbservers] db-[a:f].example.com

ansible常用模块

列出 Ansible 支持的模块

Ansible自动化运维详细教程及playbook详解_第6张图片
查看该模块帮助信息
Ansible自动化运维详细教程及playbook详解_第7张图片
远程命令模块(command / script / shell)
Command
command 作为 Ansible 的默认模块,可以运行远程权限范围所有的 shell 命令,不支持管道符

查看 Client 分组主机内存使用情况

Ansible自动化运维详细教程及playbook详解_第8张图片
script
script 的功能是在远程主机执行主控端存储的 shell 脚本文件,相当于 scp + shell 组合。
远程执行本地脚本
Ansible自动化运维详细教程及playbook详解_第9张图片
shell
Shell 实现主控端向目标主机拷贝文件,类似于 scp 功能

Ansible自动化运维详细教程及playbook详解_第10张图片
copy模块
Copy 实现主控端向目标主机拷贝文件,类似于 scp 功能
#向 Client 组中主机拷贝 test.sh 到 /tmp 下,属主、组为 root ,权限为 0755
Ansible自动化运维详细教程及playbook详解_第11张图片
stat模块
获取远程文件状态信息,atime/ctime/mtime/md5/uid/gid 等信息

Ansible自动化运维详细教程及playbook详解_第12张图片
Ansible自动化运维详细教程及playbook详解_第13张图片
Ansible自动化运维详细教程及playbook详解_第14张图片
Ansible自动化运维详细教程及playbook详解_第15张图片
get_url
实现在远程主机下载指定 URL 到本地,支持 sha256sum 文件校验
Ansible自动化运维详细教程及playbook详解_第16张图片
Ansible自动化运维详细教程及playbook详解_第17张图片
yum
软件包管理
name参数:必须参数,用于指定需要管理的软件包,比如 nginx。
state参数:用于指定软件包的状态 ,默认值为。present,表示确保软件包已经安装,除了。present,其他可用值有 installed、latest、absent、removed,其中 installed 与present 等效,latest 表示安装 yum 中最新的版本,absent 和 removed 等效,表示删除对应的软件包。
disable_gpg_check参数:用于禁用对 rpm 包的公钥 gpg 验证。默认值为 no,表示不禁用验证,设置为 yes 表示禁用验证,即不验证包,直接安装。在对应的 yum 源没有开启 gpg 验证的情况下,需要将此参数的值设置为 yes,否则会报错而无法进行安装。
enablerepo参数:用于指定安装软件包时临时启用的 yum 源。假如你想要从A源中安装软件,但是你不确定A源是否启用了,你可以在安装软件包时将此参数的值设置为 yes,即使A源的设置是未启用,也可以在安装软件包时临时启用A源。
disablerepo参数:用于指定安装软件包时临时禁用的 yum 源。某些场景下需要此参数,比如,当多个 yum 源中同时存在要安装的软件包时,你可以使用此参数临时禁用某个源,这样设置后,在安装软件包时则不会从对应的源中选择安装包。

enablerepo 参数和 disablerepo 参数可以同时使用。
Ansible自动化运维详细教程及playbook详解_第18张图片
Ansible自动化运维详细教程及playbook详解_第19张图片
Ansible自动化运维详细教程及playbook详解_第20张图片
Ansible自动化运维详细教程及playbook详解_第21张图片
Ansible自动化运维详细教程及playbook详解_第22张图片
确保 Client 主机上通过 yum 源安装了 nginx (对应 yum 源未开启 gpg 验证,所以需要设置 disable_gpg_check=yes),如下三条命令的效果相同。
ansible Client -m yum -a ‘name=nginx disable_gpg_check=yes’
ansible Client -m yum -a ‘name=nginx state=present disable_gpg_check=yes’
Ansible Client -m yum -a ‘name=nginx state=installed disable_gpg_check=yes’
2.确保 Client 主机上安装了 yum 源中最新版本的 nginx。
ansible Client -m yum -a ‘name=nginx state=latest disable_gpg_check=yes’
3.确保 Client 主机上通过 yum 源安装的 nginx 被卸载了。如下两条命令效果相同。
ansible Client -m yum -a ‘name=nginx state=absent’
Ansible Client -m yum -a ‘name=nginx state=removed’
4.在 Client 主机上安装 telnet 时不确定 local 源是否启用,使用 enablerepo=local确保临时启用 local 源。
ansible Client -m yum -a ‘name=telnet disable_gpg_check=yes enablerepo=local’
5.在 Client 主机上安装 telnet 时,确定多个源中都有 telnet,但是不想从 local 源中安装,所以在安装时临时禁用 local 源。
ansible Client -m yum -a ‘name=telnet disable_gpg_check=yes disablerepo=local’
corn
远程主机 crontab 配置
在这里插入图片描述
Ansible自动化运维详细教程及playbook详解_第23张图片
mount
远程主机分区挂载
Ansible自动化运维详细教程及playbook详解_第24张图片
在这里插入图片描述
service
远程主机系统服务管理
Ansible自动化运维详细教程及playbook详解_第25张图片
user
远程主机用户管理
添加删除用户
Ansible自动化运维详细教程及playbook详解_第26张图片
Ansible自动化运维详细教程及playbook详解_第27张图片

你可能感兴趣的:(Ansible)