参阅:

[1].权威中文指南

[2].珂儿吖.自动化运维工具-ansible详解

[3].马哥教育高薪实战中心.ansible教程-马哥2019全新ansible入门到精通

ansible 简介

传统的远程访问为C/S模式,多台客户机访问一台服务器。

但ansible相反,一个主机(主控端)控制多台主机(被控端),且在控制端不需要安装agent,而是直接借助SSH服务实现(但存在效率差的问题)。

适用于中小型应用环境。

ansible 是什么

ansible 特点

image-20230120151509309

ansible 架构图

ansible 架构图

  • Ansible:Ansible核心程序。
  • HostInventory:记录由Ansible管理的主机信息,包括端口、密码、ip等。
    • 主机清单,让ansible知道访问哪些主机。
  • Playbooks:“剧本”YAML格式文件,多个任务定义在一个文件中,定义主机需要调用哪些模块来完成的功能。
  • CoreModules核心模块,主要操作是通过调用核心模块来完成管理任务。
  • CustomModules:自定义模块,完成核心模块无法完成的功能,支持多种语言。
  • ConnectionPlugins:连接插件,Ansible和Host通信使用。
    • 基于SSH协议实现

工作原理

image-20230120152353845

ansible的命令来源

  • cmdb(配置管理数据库) api调用
  • public/private cloud api调用
  • user,普通用户
    • 实现管理的方式(1)
      • Ad-Hoc方式,类似命令行的,一条一条命令执行。用于临时命令使用场景
  • ansible playbook,用户编写的剧本(命令集)
    • 实现管理的方式(2)
      • Ansible-playbook方式,用于长期规划好的,大型项目场景,需要提前规划

通常使用后两种

ansible 任务执行

ansible 任务执行模式

ansible 执行流程

ansible 命令执行过程

ansible 配置详解

ansible 安装方式

三种安装方法

其它方法请参考中文指南

  1. 使用红帽包管理器
1
2
yum install epel-release -y #需要先安装epel包
yum install ansible –y
  1. 使用pip工具
1
pip install ansible
  1. 源码安装
1
2
3
4
git clone git://github.com/ansible/ansible.git --recursive
cd ./ansible
source ./hacking/env-setup
. ./hacking/env-setup.fish

ansible 命令详解

命令的具体格式如下:

1
ansible <host-pattern> [-f forks] [-m module_name] [-a args]

可以通过ansible -h来查看帮助

部分含义:

  • -a MODULE_ARGS   #模块的参数,如果执行默认COMMAND的模块,即是命令参数,如: “date”,“pwd”等等
  • -k--ask-pass #ask for SSH password。登录密码,提示输入SSH密码而不是假设基于密钥的验证
  • --ask-su-pass #ask for su password。su切换密码
  • -K--ask-sudo-pass #ask for sudo password。提示密码使用sudo,sudo表示提权操作
  • --ask-vault-pass #ask for vault password。假设我们设定了加密的密码,则用该选项进行访问
  • -B SECONDS #后台运行超时时间
  • -C #模拟运行环境并进行预运行,可以进行查错测试
  • -c CONNECTION #连接类型使用
  • -f FORKS #并行任务数,默认为5
  • -i INVENTORY #指定主机清单的路径,默认为/etc/ansible/hosts
  • --list-hosts #查看有哪些主机组
  • -m MODULE_NAME #执行模块的名字,默认使用 command 模块,所以如果是只执行单一命令可以不用 -m参数
  • -o #压缩输出,尝试将所有结果在一行输出,一般针对收集工具使用
  • -S #用 su 命令
  • -R SU_USER #指定 su 的用户,默认为 root 用户
  • -s #用 sudo 命令
  • -U SUDO_USER #指定 sudo 到哪个用户,默认为 root 用户
  • -T TIMEOUT #指定 ssh 默认超时时间,默认为10s,也可在配置文件中修改
  • -u REMOTE_USER #远程用户,默认为 root 用户
  • -v #查看详细信息,同时支持-vvv-vvvv可查看更详细信息

在主机清单文件(/etc/ansible/hosts)中,使用ansible_ssh_port/user可指定端口和用户