Ansible 简介安装

1、概念介绍

Ansible 是一款为类 Unix 系统开发的自由开源的配置和自动化工具。由 Red Hat 公司使用 python 研发,类似于 saltstack 和 Puppet,但是有一个不同和优点是我们不需要在节点中安装任何客户端。它使用 SSH 来和节点进行通信。Ansible 基于 Python paramiko 开发,分布式,无需客户端,轻量级,配置语法使用 YMAL 及 Jinja2 模板语言,更强的远程命令执行操作。

Ansible 特点

部署简单,只在管理端部署 Ansible 环境(ssh 和 python 2.5 以上版本),被管理端无需做操作

默认使用 SSH 协议对设备进行管理

易读的语法,基于 yaml 语法编写 playbook

模块化设计,调用特定的模块来完成特定任务

基于 Python 语言实现,由 Paramiko(python 的一个可并发连接 ssh 主机功能库), PyYAML 和 Jinja2(模板化)三个关键模块实现。支持 API(供第三方程序调用的应用程序编程接口)及自定义模块,可通过 Python 轻松扩展

支持playbook 剧本,连续任务按先后设置顺序完成。通过Playbooks定制强大的配置、状态管理

幂等性,一个任务执行一遍和执行 n 遍效果一样,不会因为重复执行带来意外情况。意味着在同一台服务器上多次执行同一个 playbook 是安全的

对云计算平台、大数据都有很好的支持;

Ansible 基本架构

ansible 系统由管理节点和被管理节点组成,Ansible 在管理节点将 Ansible 模块通过 SSH 协议推送到被管理端执行,执行完之后自动删除,可以使用 SVN、GIT 等来管理自定义模块及编排。

由上面的图可以看到 Ansible 的组成由 5 个部分组成:

Ansible: ansible 的核心程序

Modules:包括 Ansible 自带的核心模块及自定义模块。

  • Core Modules:Ansible 执行任何管理任务都不是由 Ansible 自己完成,而是由核心 模块完成;Ansible 管理主机之前,先调用 core Modules 中的模块,然后指明管理Host Inventory 中的主机,就可以完成管理主机。
  • Custom Modules:自定义模块,完成 Ansible 核心模块无法完成的功能,此模块支持任何语言编写。

Plugins:模块功能补充,通过插件来实现记录日志,发送邮件或其他功能。 Connection Plugins:连接插件, ansible 基于连接插件连接到各个主机上,默认是使用 ssh。

Playbooks:剧本,YAML 格式文件。多个任务定义在一个文件中,定义主机需要调用哪些模块来完成的功能定义,即实现自动化部署文件。

Inventory: 记录由 Ansible 管理的主机信息,包括端口、密码、ip 等。

Ansible 任务执行方式

|----------|----------------------------------------------------------------------------------------------------------------------------------------------------------------|
| ad-hoc | 即 ansible 命令,命令行界面,单条命令的批量执行,称之为 ad-hoc。 这种方式,主要用来进行功能测试,或者是简单的应用部署。 |
| playbook | Playbook 方式(剧本方式),从字面意思就可以知道,我们的剧本方式是提前设置好内容,进行剧本的演示。Playbook 方式适用于大型自动化部署应用。 即把多个想要执行的任务放到一个 playbook 中,当然多个任务在事物逻辑上最好是有上下联系的。通过多个任务可以完成一个总体的目标,这就是 playbook。 |

2、安装配置

|---------|-----------------|-------------|----------|
| 主机 | IP | 角色 | 安装软件 |
| node_04 | 192.168.137.104 | Ansible 服务端 | Ansible |
| node_05 | 192.168.137.105 | | |
| node_06 | 192.168.137.106 | | |

安装 Ansible
复制代码
# 配置阿里网络源 
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
#  配置 epel 源:Ansible 软件默认不在 yum 仓库中,因此我们需要配置 epel 仓库
yum install -y epel-release

# 安装 absible 
yum install -y ansible
配置文件说明

通过 rpm -ql ansible 可以看到很多文件,主要是配置文件和可执行文件,以及所依赖的 python 库文件。

|--------------------------|------------------------------------------------------------------------------------------------|
| /etc/ansible/ansible.cfg | Ansible 主配置文件,这个文件主要定义了 roles_path 路径,主机清单路径,连接清单中的主机方式等配置,这些大部的默认配置已经足够我们平时使用,如需要特别配置可以自行去修改。 |
| /etc/ansible/hosts | 主机清单文件,这个配置文件就是默认主机清单配置文件,可通过 ansible.cfg 重新定义 |

ansible 主执行程序,一般用于命令行下执行

ansible-playbook 执行 playbook 中的任务

ansible-doc 获取各模块的帮助信息

复制代码
# 配置主机清单,文件 /etc/ansible/hosts 维护着 Ansible 中服务器的清单。在文件最后追加以下内容
vim /etc/ansible/hosts 
----------------------------------------------------------------------
[web_servers] 
192.168.137.105 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass=123456
----------------------------------------------------------------------

# 测试主机连通性
ansible -i /etc/ansible/hosts web-servers -m ping

注意:模块组只能使用字母、数字、下划线,且字母不能开头

SSH 秘钥访问

一般来说,使用明文密码不安全,所以增加主机无密码访问。在 Ansible 服务端生成密钥,并且复制公钥到节点中。

复制代码
[root@node_04 ~] ssh-keygen
ssh-copy-id root@192.168.1.12 
ssh-copy-id root@192.168.1.13

#  修改 web_servers 为以下内容
vim /etc/ansible/hosts
[web_servers] 
192.168.137.105 
192.168.137.106


# ping 模块检查网络连通性,command 模块执行 shell 命令
# command:作为 ansible 的默认模块,可以运行远程权限范围内的所有 shell 命令
ansible -i /etc/ansible/hosts web-servers -m ping

注意 ansible web_servers -m ping如果不指定配置文件,默认使用/etc/ansible/hosts 文件

3、Ansible 命令

语法格式:ansible [-i 主机文件] [-f 批次] [组名] [-m 模块名称] [-a 模块参数]

|--------------------------------------|-------------------------------------------|
| 选项 | 说明 |
| -v,--verbose | 详细模式,如果命令执行成功,输出详细的结果 (-vv --vvv -vvvv) |
| -i PATH, -inventory=PATH | 指定 host 文件的路径,默认是在 /etc/ansible/hosts |
| f NUM,-forks=NUM | NUM 是指定一个整数,默认是 5 ,指定 fork 开启 同步进程的个数。 |
| -m NAME,-module-name=NAME | 指定使用的 module 名称,默认使用 command 模块 |
| -a,MODULE_ARGS | 指定 module 模块的参数 |
| -s,--sudo (旧) -b, --become(新) | 远程执行命令时使用 sudo 方式,相当于 Linux 系统下的 sudo 命令。 |
| -U SUDO_USERNAME(旧) --become-user(新) | sudo 到哪个用户,默认为 root |
| -K,-ask-sudo-pass | 提示输入 sudo 密码,与 -sudo 一起使用 |
| -u USERNAME,-user=USERNAME | 指定移动端的执行用户 |
| -k,-ask-pass | 提示输入 ssh 的密码,而不是使用基于 ssh 的密钥认证 |
| -C,-check | 测试此命令执行会改变什么内容,不会真正的去执行 |

ansible 基于 ssh 连接 -i (inventory)参数后指定的远程主机时,也可以写端口,用户,密码。

检查节点运行时间
复制代码
# 检查 Ansible 节点的运行时间 
ansible web_servers -m command -a uptime
给节点增加新用户
复制代码
# 给节点增加用户 
ansible web_servers -m command -a "useradd user1"
复制代码
ansible web_servers -m command -a "id user1"
复制代码
# 给新增的节点用户设置密码
ansible web_servers -m shell -a "echo 'user1:123456' | chpasswd "
将输出重定向本机
复制代码
# 将 df 命令在所有节点执行后,重定向输出到本机的/tmp/command-output.txt 文件中 
ansible -m command -a "df -Th" 'web-servers' > /tmp/command-output.txt 

cat /tmp/command-output.txt
相关推荐
风清再凯1 天前
自动化工具ansible,以及playbook剧本
运维·自动化·ansible
IT乌鸦坐飞机1 天前
ansible部署数据库服务随机启动并创建用户和设置用户有完全权限
数据库·ansible·centos7
遇见火星14 天前
如何使用Ansible一键部署MinIO集群?
ansible
粥周粥14 天前
ANSIBLE
ansible
码农101号14 天前
Linux中ansible模块补充和playbook讲解
linux·运维·ansible
码农101号14 天前
Linux的Ansible软件基础使用讲解和ssh远程连接
ansible
烟雨书信16 天前
ANSIBLE运维自动化管理端部署
运维·自动化·ansible
碎碎-li16 天前
ANSIBLE(运维自动化)
运维·自动化·ansible
@donshu@19 天前
Linux运维-ansible-python开发-获取inventroy信息
linux·运维·ansible
Kendra91922 天前
Ansible
ansible