Ansible介绍与安装

Ansible简介

Ansible是一个IT自动化配置工具。它能备注系统、部署软件、编排更复杂的IT任务,如连续部署或零停机时间滚动更新。

Ansible特性

  • Agentless:不需要在被管理节点上安装插件,只需要有sshd和python即可
  • Serverless:在服务端不需要启动任何服务,只需要执行命令就行
  • Module in any language:基于模块工作,可以使用任意语言开发ansible模块
  • YAML,not code:使用yaml语言定制playbook
  • SSH by default:默认使用ssh控制各节点

Ansible基本组件

  • 核心模块(Core Modules):这些都是ansible自带的模块
  • 扩展模块(Costome Modules):如果核心模块不足以完成某些功能,可以添加扩展模块
  • 插件(Plugins):完成模块功能的补充,比如执行完了发个邮件,记录日志等等
  • 主机组(Host Inventory):可以选择只在哪些主机上执行playbook
  • 剧本(Playbooks):剧本,运行的指令

ansible安装

环境信息

角色 IP地址
ansible主控端 192.168.10.130
ansible被控端 192.168.10.131
  1. 权限委派
    生产环境下,一般不建议使用root来执行playbook,因为权限太大,万一playbook写错,会导致不可挽回的结果

ALL=(ALL)代表可以在所有机器上变换所有身份执行

vim /etc/sudoers

admin   ALL=(ALL)       NOPASSWD: /usr/sbin/useradd, /usr/bin/ls
  1. 关闭防火墙与SELinux
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -ri '/^[^#]*SELINUX=/s#=.+$#=disabled#' /etc/selinux/config
  1. 免密登录
    打通ansible主控端到被控端的admin用户免密登录
ssh-keygen
#连续三次回车

ssh-copy-id -i /home/admin/.ssh/id_rsa.pub root@192.168.10.131
#由于秘钥名称和存储路径都是默认的,所以也可以用如下简写命令代替
ssh-copy-id 192.168.10.131
  1. hosts文件拷贝
# 在主控端hosts里写好所有节点的ip到主机名的映射,然后分发给所有节点
vim /etc/hosts
scp /etc/hosts root@node2:/etc/
  1. 使用yum安装ansible
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

yum -y install ansible
ansible --version

ansible配置文件

配置文件优先级

ansible的配置文件名为ansible.cfg,它一般会存在于四个地方,优先级按顺序排列:

  1. ANSIBLE_CONFIG:首先,Ansible命令会检查该环境变量,及这个环境变量将指向的配置文件

  2. ./ansible.cfg:当前工作目录,即当前执行ansible指令的目录,如果ANSIBEL_CONFIG环境变量未定义,则优先使用该配置文件

  3. ~/.ansible.cfg:当前用户家目录下的一个隐藏文件,如果当前工作目录下不存在ansible.cfg配置文件,则会查找用户家目录下的该隐藏文件

  4. /etc/ansible/ansible.cfg:默认配置文件,如果上面两个路径下的ansible.cfg都不存在,则使用该文件

配置文件详解

vim /etc/ansible/ansible.cfg
#全局配置
[defaults]

#Ansible需要连接管理的主机列表hosts文件路径,默认/etc/ansible/hosts
inventory = /etc/ansible/hosts
#ansible role存放路径,默认/etc/ansible/roles
roles_path = /etc/ansible/roles
#Ansible日志路径,默认/var/log/ansible.log
log_path = /var/log/ansible.log


#SSH连接超时时间,默认10s
timeout = 10
#ansible第一次连接客户端是是否要检查ssh密钥
host_key_checking = False


#ansible执行并发数,默认5
forks = 5
#异步执行任务时查询间隔,默认15s
poll_interval = 15
#执行ansible命令时使用的用户,默认root
sudo_user = root
#远程主机SSH端口,默认22
remote_port = 22
#ansible执行playbook时远程认证用户,默认root
remote_user = root


#Ansible搜寻模块的位置,默认/usr/share/my_modules/
library = /usr/share/my_modules/
module_utils = /usr/share/my_module_utils/


#ansible模块运行语言环境,默认C
module_lang = C
module_set_locale = False
#ansible使用模块,默认command
module_name=command

#提权
[privilege_escalation]
#打开提权
become=True
#提权命令
become_method=sudo
#提取为谁的权限
become_user=root
#是否检查提权密码
become_ask_pass=False
vim /etc/ansible/hosts
[webservers]
192.168.7.1
192.168.7.2

[prod]
192.168.7.1
192.168.7.3

#定义一个prod和webservers的子组,使用it会调用子组,children是固定写法
[it:children]
prod
webservers
WilliamZheng©版权所有 转载请注明出处! 运维架构师群:833329925
原文地址:https://www.cnblogs.com/williamzheng/p/14760246.html