Ansible介绍
Ansible是一种基于Python的自动化配置工具,通过OpenSSH的方式管理被管理节点,实现批量系统配置、批量程序部署、批量运行命令等功能。
当管理节点需要管理被管理节点时,只需要在管理节点安装ansible,无需在被管理节点安装客户端程序;
Ansible架构
Host Inventory 资产清单;定义了被管理主机
Playbooks 剧本;可以将多个任务定义到剧本中,由ansible自动执行
Core Modules 核心模块;ansible自带的模块(例如yum模块、user模块等)
Custon Modules 扩展模块;对核心模块的补充,完成核心模块无法完成的任务
Plugins 插件;ansible借助插件完成记录日志、邮件等功能
Connection Plugins 连接插件;负责管理节点和被管理节点实现通信
Ansible节点类型
管理节点
管理节点通过ssh的方式和被管理节点建立通信
1、管理被管理节点(在资产清单内定义的就是被管理节点)
2、定义任务(可以通过add-hoc临时命令、playbook剧本、role角色等方式定义任务)
2、下发任务(将管理节点上定义的任务下发到被管理节点)
被管理节点
需要开启ssh服务,能够被 管理节点 访问到
1、执行管理节点下发的任务
2、提供应用访问
Anisble配置文件
Ansible的全局配置文件为/etc/ansible/ansible.cfg
普通用户的Ansible的配置文件为~/etc/ansible/ansible.cfg(优先级高)
Ansible任务执行情况
Ansible任务的执行结果通过json格式显示
Success代表执行的结果是正确的,但并不单表此任务是有效的,具体通过颜色来判断任务的执行的情况
黄色:被管理主机已经成功执行了下发的任务,并且伴随着状态的改变
绿色:被管理主机已经成功执行了下发的任务,但是没有状态改变
表示遵循Ansible的幂等性(表示执行一次或者多次不会产生副作用),例如:任务要求安装apache服务,如果被管理节点已经安装的apache服务,则此被管理节点执行此任务的结果就是绿色的;任务能够执行,但是没有去执行,即任务无效
红色:执行失败
Ansible相关命令
ansible Ansibe AD-Hoc 临时命令执行工具,常用于临时命令的执行
ansible --version 查看ansible版本
ansible -m 指定调用的模块名称
ansible -v 显示任务结果
-vv 显示任务结果、任务配置
-vvv 显示被管理主机连接信息
-vvvv 增加连接插件相关的额外详细程度选项(包含受管主机上用于执行脚本的用户和所执行的插件)
ansible -a 调用模块的某些参数
ansilbe -c 测试命令执行结果,不实际执行
ansible -u 指定执行命令的客户端
ansilbe -i 指定访问的主机列表文件
ansible-doc Ansible 模块功能查看工具
ansible-doc -l 列出ansible所有模块
ansible-doc -s 模块名 查看模块的参数信息
ansible-galaxy 下载/上传优秀代码或Roles模块 的官网平台,基于网络的
ansible-playbook Ansible 定制自动化的任务集编排工具
ansible-inventory --list 查看默认资产清单的内容
ansible-pull Ansible远程执行命令的工具,拉取配置而非推送配置(使用较少,海量机器时使用,对运维的架构能力要求较高)
ansible-vault Ansible 文件加密工具
ansible-console Ansible基于Linux Consoble界面可与用户交互的命令执行工具
Ansible环境搭建
配置管理节点到被管理节点的ssh免密
在管理节点上生成私钥,然后发放给被管理节点,实现ssh免密
在管理节点配置
ssh-keygen 生成私钥
ssh-copy-id root@被管理节点
如果出现ssh-copy-id: command not found报错,则说明缺乏openssh-clientsansible包,通过yum安装此包就可以
安装Ansible
一般基于普通用户进行ansible管理,所以以下重点介绍普通用户的ansibke环境搭建
安装ansible不需要在客户端去安装,只需要在管理节点安装
基于root用户安装ansible
yum info ansible 基于root用户查看ansible是否安装 yum install -y ansible 基于root用户安装ansible
基于普通用户安装ansible(普通用户要有sudo权限)
sudo yum info ansible 基于普通用户查看ansible是否安装 sudo yum install -y ansible 基于普通安装ansible ansible --version 查看ansible的版本
创建Ansible相关文件
基于普通用户创建一套Ansible架构(即文件的所有者为普通用户)
1、创建基于用户的主配置文件ansible.cfg(定义ansible相关配置)
进入到普通用户下 cd ~ mkdir ansible cd ansible cp /etc/ansible/ansible.cfg . 将配置文件复制到家目录下
2、创建资产清单文件inventory(存放被管理节点,有静态的和动态的)
动态的资产清单需要结合CMDB实现,目前创建基于静态的 cd ~/ansible touch inventory 创建文件名为inventory的文件(文件名自定义,后续在ansible配置文件需要指定)
3、创建未来用于角色的roles目录(存放角色,简化任务的创建)
cd ~/ansible mkdir roles 创建roles目录(目录名自定义,后续在ansible配置文件需要指定)
配置ansible.cfg文件
关键配置(一般会做修改)
inventory =/home/student/ansible/inventory 指定资产清单的路径(就是之前创建的inventory文件的路径) ask_pass = Fasle 是否提示输入ssh密码(当使用公钥认证时,可以时false) roles_path=/home/student/ansible/roles 指定角色目录的路径(就是之前创建的roles目录的路径) remote_user = devops playbook默认远程用户,管理节点使用此管理节点上的此用户去管理被管理节点,向其下发任务,被管理节点也是用的此用户去执行任务(即管理节点和被管理节点都需要有此用户,并且需要sudo权限) [privilege_escalation] become=True 连接到被管理节点后是否自动在被管理主机上切换用户 become_method=sudo 切换用户的方式为sudo(也可以是su) become_user=root 在被管理节点上切换到哪个用户(默认为root) become_ask_pass=False 是否提示输入密码(默认是False) 以上配置表示连接到被管理节点的身份是devops(前提是被管理节点本地有devops用户,并且已经做了sudo的配置;如果没有就需要创建用户,并对此用户做sudo配置 )
非关键配置(一般不修改)
library = /usr/share/my_modules/ ansible默认模块的位置 module_utils = /usr/share/my_module_utils/ ansible默认模块的位置 forks = 5 主机通信的默认并行进程数 poll_interval = 15 异步执行任务时,每15s查一次任务状态 sudo_user = root 提权到root用户(被管理节点登录到管理节点时使用的身份) remote_port = 22 远程端口号 host_key_checking = False 配置主机是否进行ssh密钥对的检测 timeout = 10 配置ssh连接超时时间
在被管理节点验证是否有devops用户,并且此用户是否有sudo权限
id devops cd /etc/sudoers.d/ 查看此目录下sudo的配置(也可以直接通过visudo命令查看)
配置资产清单文件
Ansible允许有多个资产清单文件,优先级如下
当前路径下 > 家目录下 > etc目录下
基于IP/域名/主机名的形式
cd ~/ansible vim inventory 编辑资产清单文件 172.16.1.1 172.16.1.2
基于组的形式
通过设置组的形式来配置资产清单(自定义分类,可以按照功能分、位置分等)
并且还支持组可以再包含组(组嵌套)
组形式:用中括号来指定组,组下再添加主机名、FQDN、IP地址等
例如:
cd ~/ansible vim inventory 编辑资产清单文件 [ftpserver] node1 [webserver] webserver组包含主机名为node3主机 node3 [servers:children] servers组包含webserver组和ftpserver组 webserver ftpserver
验证测试资产清单
ansible命令测试
ansible servers -m ping 对属于servers组内的主机进行ping ansible all -m ping 对默认资产清单内的所有主机进行ping ansible all -i 资产清单路径 ping 对特定的资产清单内的所有主机进行ping 注意:使用ansible的ping模块进行ping被管理的主机时,必须是资产清单已经存在的,并且名称要一致
ansible-inventory命令测试
ansible-inventory -i 资产清单文件位置 --list 查看指定资产清单文件的内容 ansible-inventory --list 查看默认资产清单文件的内容