Ansible基本介绍

Ansible发展史

Ansible
Michael DeHaan( Cobbler 与 Func 作者)
名称来自《安德的游戏》中跨越时空的即时通信工具
2012-03-09,发布0.0.1版,2015-10-17,Red Hat宣布收购
官网:https://www.ansible.com/
官方文档:https://docs.ansible.com/
同类自动化工具GitHub关注程度(2016-07-10)

clipboard.png

特性

1> 模块化:调用特定的模块,完成特定任务
2> Paramiko(python对ssh的实现),PyYAML,Jinja2(模板语言)三个关键模块
3> 支持自定义模块
4> 基于Python语言实现
5> 部署简单,基于python和SSH(默认已安装),agentless
6> 安全,基于OpenSSH
7> 支持playbook编排任务
8> 幂等性:一个任务执行1遍和执行n遍效果一样,不因重复执行带来意外情况
9> 无需代理不依赖PKI(无需ssl)
10> 可使用任何编程语言写模块
11> YAML格式,编排任务,支持丰富的数据结构
12> 较强大的多层解决方案

Ansible架构

clipboard

ansible的作用以及工作结构
1、ansible简介:
ansible是新出现的自动化运维工具,基于Python开发,
集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,
实现了批量系统配置、批量程序部署、批量运行命令等功能。
ansible是基于模块工作的,本身没有批量部署的能力。
真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。
主要包括:
    (1)、连接插件connection plugins:负责和被监控端实现通信;
    (2)、host inventory:指定操作的主机,是一个配置文件里面定义监控的主机;
    (3)、各种模块核心模块、command模块、自定义模块;
    (4)、借助于插件完成记录日志邮件等功能;
    (5)、playbook:剧本执行多个任务时,非必需可以让节点一次性运行多个任务。

2、ansible的架构:连接其他主机默认使用ssh协议

Ansible工作原理

clipboard

Ansible主要组成部分

ANSIBLE PLAYBOOKS:任务剧本(任务集),编排定义Ansible任务集的配置文件,
                   由Ansible顺序依次执行,通常是JSON格式的YML文件
INVENTORY:Ansible管理主机的清单  /etc/anaible/hosts
MODULES:  Ansible执行命令的功能模块,多数为内置核心模块,也可自定义
PLUGINS:  模块功能的补充,如连接类型插件、循环插件、变量插件、过滤插件等,该功能不常用
API:      供第三方程序调用的应用程序编程接口 
ANSIBLE:  组合INVENTORY、API、MODULES、PLUGINS的绿框,可以理解为是ansible命令工具,其为核心执行工具
Ansible命令执行来源:
    1> USER,普通用户,即SYSTEM ADMINISTRATOR
    2> CMDB(配置管理数据库) API 调用
    3> PUBLIC/PRIVATE CLOUD API调用  (公有私有云的API接口调用)
    4> USER-> Ansible Playbook -> Ansibile

利用ansible实现管理的方式:
    1> Ad-Hoc 即ansible单条命令,主要用于临时命令使用场景
    2> Ansible-playbook 主要用于长期规划好的,大型项目的场景,需要有前期的规划过程

Ansible-playbook(剧本)执行过程
    将已有编排好的任务集写入Ansible-Playbook
    通过ansible-playbook命令分拆任务集至逐条ansible命令,按预定规则逐条执行

Ansible主要操作对象
   HOSTS主机
   NETWORKING网络设备

注意事项:
   执行ansible的主机一般称为主控端,中控,master或堡垒机
   主控端Python版本需要2.6或以上
   被控端Python版本小于2.4需要安装python-simplejson
   被控端如开启SELinux需要安装libselinux-python
   windows不能做为主控端
   ansible不是服务,不会一直启动,只是需要的时候启动

安装方式

rpm包安装: EPEL源
    yum install epel-release
    yum install ansible

编译安装:
    yum -y install python-jinja2 PyYAML python-paramiko python-babel
    python-crypto
    tar xf ansible-1.5.4.tar.gz
    cd ansible-1.5.4
    python setup.py build
    python setup.py install
    mkdir /etc/ansible
    cp -r examples/* /etc/ansible

Git方式:
    git clone git://github.com/ansible/ansible.git --recursive
    cd ./ansible
    source ./hacking/env-setup

pip安装: pip是安装Python包的管理器,类似yum
    yum install python-pip python-devel
    yum install gcc glibc-devel zibl-devel rpm-bulid openssl-devel
    pip install --upgrade pip
    pip install ansible --upgrade

确认安装:
    ansible --version
配置文件:
    /etc/ansible/ansible.cfg  主配置文件,配置ansible工作特性(一般无需修改)
    /etc/ansible/hosts        主机清单(将被管理的主机放到此文件)
    /etc/ansible/roles/       存放角色的目录

ansible 配置文件查找顺序:
    首先检测ABSIBLE_CONFIG 变量定义的配置文件
    其次检查当前目录下的 ./ansiblle.cfg 文件
    再次检查当前用户家目录下的   ~/ansible.cfg 文件
    最后检查/etc/ansible/ansible.cfg 文件

程序:
    /usr/bin/ansible          主程序,临时命令执行工具
    /usr/bin/ansible-doc      查看配置文档,模块功能查看工具
    /usr/bin/ansible-galaxy   下载/上传优秀代码或Roles模块的官网平台
    /usr/bin/ansible-playbook 定制自动化任务,编排剧本工具
    /usr/bin/ansible-pull     远程执行命令的工具
    /usr/bin/ansible-vault    文件加密工具
    /usr/bin/ansible-console  基于Console界面与用户交互的执行工具

ansible 配置文件ansible.cfg

修改 Ansible 配置文件/etc/ansible/ansible.cfg 
vim /etc/ansible/ansible.cfg 【一般只要修改下面的几行内容】
...........
inventory  = /etc/ansible/hosts                 #14行,打开注释
host_key_checking = False                       # ssh连接时,不需要输入yes; 如果为True, 就需要输入yes
log_path=/var/log/ansible.log                   #日志文件,默认是不开启的
...........

其他配置文件说明:
[defaults]
#inventory     = /etc/ansible/hosts      # 主机列表配置文件
#library       = /usr/share/my_modules/  # 库文件存放目录
#remote_tmp    = $HOME/.ansible/tmp      # 临时py命令文件存放在远程主机目录
#local_tmp     = $HOME/.ansible/tmp      # 本机的临时命令执行目录  
#forks         = 5                       # 默认并发数,同时可以执行5次
#sudo_user     = root                    # 默认sudo 用户
#ask_sudo_pass = True                    # 每次执行ansible命令是否询问ssh密码
#ask_pass      = True                    # 每次执行ansible命令是否询问ssh口令
#remote_port   = 22                      # 远程主机的端口号(默认22)

主机清单inventory

Inventory 主机清单
    ansible的主要功用在于批量主机操作,为了便捷地使用其中的部分主机,可以在inventory file中将其分组命名 
    默认的inventory file为/etc/ansible/hosts
    inventory file可以有多个,且也可以通过Dynamic Inventory来动态生成

/etc/ansible/hosts文件格式
    inventory文件遵循INI文件风格,中括号中的字符为组名。
    可以将同一个主机同时归并到多个不同的组中;
    此外,当如若目标主机使用了非默认的SSH端口,还可以在主机名称之后使用冒号加端口号来标明

[root@manager ~]# cat /etc/ansible/hosts 
192.168.1.2     #不分组,直接加

#分组
[redis]
193.168.151.5

[nginx]
193.168.151.3 ansible_ssh_user=root ansible_ssh_pass=test1     #手动指定用户名,密码

[base]
193.168.151.6 ansible_ssh_user=vmuser ansible_ssh_pass=test1 ansible_become_pass=1    #手动指定用户名,密码,sudo 提权【前提这个用户有sudo权限】

[services]
193.168.151.[7:13]       #多个连续IP

[postgresql]
193.168.151.13:2222      #可以指定端口

[all:vars]
#指定连接用户名,一般生产环境机器只允许普通用户登录
ansible_ssh_user=vmuser

#给所有主机指定私钥,key,需要提前将公钥传输到对应的主机上 ssh-copy-id 192.168.1.X   [-i  指定公钥文件]
ansible_ssh_private_key_file=/root/.ssh/id_rsa

#sudo 提权到root 用户
ansible_become_pass=#fffsdsds20dsf8  

测试ansible配置是否成功

[root@manager ~]# ansible all -m ping
193.168.151.6 | SUCCESS => {
    ansible_facts: {
        discovered_interpreter_python: /usr/bin/python
    }, 
    changed: false, 
    ping: pong
}

193.168.151.11 | SUCCESS => {
    ansible_facts: {
        discovered_interpreter_python: /usr/bin/python
    }, 
    changed: false, 
    ping: pong
}

193.168.151.5 | SUCCESS => {
    ansible_facts: {
        discovered_interpreter_python: /usr/bin/python
    }, 
    changed: false, 
    ping: pong
}

测试ansible使用sudo 提取

#测试ansible 使用sudo 批量在/root 目录下创建,删除文件,-b 表示提权的意思

[root@manager ~]# ansible all -m shell -a mkdir /root/1 -b
193.168.151.5 | CHANGED | rc=0 >>
193.168.151.11 | CHANGED | rc=0 >>
193.168.151.6 | CHANGED | rc=0 >>
193.168.151.12 | CHANGED | rc=0 >>

[root@manager ~]# ansible all -m shell -a rm -rf /root/1 -b
193.168.151.11 | CHANGED | rc=0 >>
193.168.151.5 | CHANGED | rc=0 >>
193.168.151.6 | CHANGED | rc=0 >>
193.168.151.12| CHANGED | rc=0 >>

本文版权归 飞翔沫沫情 作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出 原文链接 如有问题, 可发送邮件咨询,转贴请注明出处:https://www.fxkjnj.com/3529/

(1)
打赏 WeChat WeChat Alipay Alipay
上一篇 2022年2月26日 上午9:55
下一篇 2022年2月26日 上午11:23

相关推荐

发表评论

登录后才能评论
分享本页
返回顶部