一、Ansible简介

Ansible基于Python语言实现,由paramiko和PyYAML两个关键模块构建。Ansible的编排引擎可以出色地完成配置管理,流程控制,资源部署等多方面工作。Ansible公司负责Ansible开源软件的维护,管理。一般软件的更新大概每2个月发布一次(目前版本在2.4)Ansible主要承担的工作有以下几种:

  1. 配置管理
  2. 服务即时开通
  3. 应用部署
  4. 流程编排
  5. 监控告警
  6. 日志记录

   AnsibleSaltstack最大的区别是Ansible无需在被控主机部署任何客户端代理,默认直接通过SSH通道进行远程命令执行或下发配置:相同点是都具备功能强大、灵活的系统管理、状态配置,两者都提供丰富的模板及API,对云计算平台、大数据都有很好的支持。

特点:

  • 部署简单,只需在主控端部署Ansible环境,被控端无需做任何操作;
  • 默认使用SSH协议对设备进行管理;
  • 主从集中化管理;
  • 配置简单、功能强大、扩展性强;
  • 支持API及自定义模块,可通过Python轻松扩展;
  • 通过Playbooks来定制强大的配置、状态管理;
  • 对云计算平台、大数据都有很好的支持;
  • 提供一个功能强大、操作性强的Web管理界面和REST API接口——AWX平台。
  • 幂等性:一种操作重复多次结果相同
简评:
(1)、轻量级,无需在客户端安装agent,更新时,只需在操作机上进行一次更新即可;
(2)、批量任务执行可以写成脚本,而且不用分发到远程就可以执行;
(3)、使用python编写,维护更简单,ruby语法过于复杂;
(4)、支持sudo。

、Ansible架构及组件说明

1、架构图:

2、Ansible核心组件说明:

  • Ansible:Ansible的核心程序
  • Host Lnventory:记录了每一个由Ansible管理的主机信息,信息包括ssh端口,root帐号密码,ip地址等等。可以通过file来加载,可以通过CMDB加载

  • Playbooks:YAML格式文件,多个任务定义在一个文件中,使用时可以统一调用,“剧本”用来定义那些主机需要调用那些模块来完成的功能.

  • Core Modules:Ansible执行任何管理任务都不是由Ansible自己完成,而是由核心模块完成;Ansible管理主机之前,先调用core Modules中的模块,然后指明管理Host Lnventory中的主机,就可以完成管理主机。

  • Custom Modules:自定义模块,完成Ansible核心模块无法完成的功能,此模块支持任何语言编写。

  • Connection Plugins:连接插件,Ansible和Host通信使用

3、ansible任务执行流程
Ansible针对Ansible服务器对执行操作服务器的操作方式,分为两种执行模式:

  1. ad-hoc:这个模式支持执行单个模块,支持批量执行单条命令。
  2. playbook:这个可以理解成为面向对象的编程,就像上面举例那样可以把多个你想要执行的任务放到一个playbook当中,当然多个任务在事物逻辑上最好是有上下联系的。通过这多个任务可以完成一个总体的目标,这就是playbook。

三、Ansible部署及密钥分发

1、通过epel原安装ansible

[root@Node3 yum.repos.d]# rpm Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm   //安装epel源
[root@Node3 yum.repos.d]# yum -y install ansible //安装ansible
Loaded plugins: fastestmirror, langpacks
extras | 3.4 kB ::
Loading mirror speeds from cached hostfile
* base: mirrors.aliyun.com
* epel: mirrors.tongji.edu.cn
* extras: mirrors..com
* updates: mirrors.aliyun.com
Resolving Dependencies
--> Running transaction check
.........省略中间部分.........
Installed:
ansible.noarch 0:2.4.2.0-1.el7 Dependency Installed:(安装依赖程序包)
PyYAML.x86_64 :3.10-.el7 libtomcrypt.x86_64 :1.17-.el7 libtommath.x86_64 :0.42.-.el7
libyaml.x86_64 :0.1.-.el7_0 python-babel.noarch :0.9.-.el7 python-cffi.x86_64 :1.6.-.el7
python-enum34.noarch :1.0.-.el7 python-httplib2.noarch :0.9.-.el7 python-idna.noarch :2.4-.el7
python-ipaddress.noarch :1.0.-.el7 python-jinja2.noarch :2.7.-.el7 python-keyczar.noarch :.71c-.el7
python-markupsafe.x86_64 :0.11-.el7 python-paramiko.noarch :2.1.-.el7 python-ply.noarch :3.4-.el7
python-pycparser.noarch :2.14-.el7 python2-crypto.x86_64 :2.6.-.el7 python2-cryptography.x86_64 :1.7.-.el7_4.
python2-jmespath.noarch :0.9.-.el7 python2-pyasn1.noarch :0.1.-.el7 sshpass.x86_64 :1.06-.el7 Complete!

2、SSH免密钥登录设置

[root@Node3 yum.repos.d]# ssh-keygen -t rsa -P ''   //生成公钥和私钥
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:nmuEMSEBMJF2uZXpE4EBfowEuKm504OkS+8Urwrq2TA root@Node3.contoso.com
The key's randomart image is:
+---[RSA ]----+
|B*oo=o+ |
|=oo+.=. |
|.=.o+... |
|o .. oo |
|.. . .+S |
|o. o .... |
|+E . . .o |
|O X . .. |
|+*o* .. |
+----[SHA256]-----+
[root@Node3 yum.repos.d]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@Node1 //分发公钥至Node1节点
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@node1's password:
Permission denied, please try again.
root@node1's password: Number of key(s) added: Now try logging into the machine, with: "ssh 'root@Node1'"
and check to make sure that only the key(s) you wanted were added.
[root@Node3 yum.repos.d]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@Node2 //分发公钥至Node2节点

三、Ansible命令介绍及配置文件

1、常用命令介绍及配置文件
  /usr/bin/ansible: Ansibe AD-Hoc 临时命令执行工具,常用于临时命令的执行
  /usr/bin/ansible-doc: Ansible 模块功能查看工具
  /usr/bin/ansible-galaxy: 下载/上传优秀代码或Roles模块的官网平台,基于网络的
  /usr/bin/ansible-playbook: Ansible 定制自动化的任务集编排工具
  /usr/bin/ansible-pull: Ansible远程执行命令的工具(使用较少,海量机器时使用,对运维的架构能力要求较高)
  /usr/bin/ansible-vault:  Ansible 文件加密工具
  /usr/bin/ansible-console:  Ansible基于Linux Consoble界面可与用户交互的命令执行工具

  /usr/share/ansible_plugins:Ansible高级自定义插件目录(需要python基础)
  /etc/ansible/ansible.cfg:配置文件
  /etc/ansible/hosts:主机清单

2、/etc/ansible/ansible.cfgansible.cfg配置文件

()[defaults]
#inventory = /etc/ansible/hosts # 主机列表配置文件
#library = /usr/share/my_modules/ # 库文件存放目录
#remote_tmp = $HOME/.ansible/tmp # 生成的临时py命令文件存放在远程主机的目录
#local_tmp = $HOME/.ansible/tmp # 本机的临时命令执行目录
#forks = 5 # 默认并发数
#poll_interval = 15 # 默认的线程池
#sudo_user = root # 默认sudo 用户
#ask_sudo_pass = True
#ask_pass = True
#transport = smart
#remote_port = 22
#module_lang = C
#module_set_locale = False host_key_checking = False ### 检查对应服务器的host_key ()[privilege_escalation]
()[paramiko_connection]
()[ssh_connection]
()[accelerate]
()[selinux]
()[colors]

3、Ansible主机清单(/etc/ansible/hosts)

  • Hosts部分中经常用到的变量部分:

    ansible_ssh_host     #用于指定被管理的主机的真实IP
    ansible_ssh_port     #用于指定连接到被管理主机的ssh端口号,默认是22
    ansible_ssh_user     #ssh连接时默认使用的用户名
    ansible_ssh_pass     #ssh连接时的密码
    ansible_sudo_pass     #使用sudo连接用户时的密码
    ansible_sudo_exec     #如果sudo命令不在默认路径,需要指定sudo命令路径
    ansible_ssh_private_key_file     #秘钥文件路径,秘钥文件如果不想使用ssh-agent管理时可以使用此选项
    ansible_shell_type     #目标系统的shell的类型,默认sh
    ansible_connection     #SSH 连接的类型: local , ssh , paramiko,在 ansible 1.2 之前默认是 paramiko ,后来智能选择,优先使用基于 ControlPersist 的 ssh (支持的前提)
    ansible_python_interpreter     #用来指定python解释器的路径,默认为/usr/bin/python 同样可以指定ruby 、perl 的路径
    ansible_*_interpreter     #其他解释器路径,用法与ansible_python_interpreter类似,这里"*"可以是ruby或才perl等其他语

    示列如下:
    [test]
    192.168.10.1 ansible_ssh_user=root ansible_ssh_pass='P@ssw0rd'
    192.168.10.2 ansible_ssh_user=tony ansible_ssh_pass='123456'
    192.168.10.3 ansible_ssh_user=tom ansible_ssh_port=3022 ansible_ssh_pass='456789'
    上面的示例中指定了三台主机,三台主机的用密码分别是P@ssw0rd、123456、45789,指定的ssh连接的用户名分别为root、tony、tom,ssh 端口分别为22、22、3022 ,这样在ansible命令执行的时候就不用再指令用户和密码等了

  • 简单的主机和组
        [webservers]
        web1.contoso.com
        web2.contoso.com
        [dbservers]
        db1.contoso.com
        db2.contoso.com
    a、中括号中的名字代表组名,可以根据自己的需求将庞大的主机分成具有标识的组,如上面分了两个组webservers和dbservers组;
    b、主机(hosts)部分可以使用域名、主机名、IP地址表示;当然使用前两者时,也需要主机能反解析到相应的IP地址,一般此类配置中多使用IP地址;

四、Ansible使用

1、定义主机清单(/etc/ansible/hosts)

[root@Node3 ansible]# tail - /etc/ansible/hosts 

## db-[:]-node.example.com
[Webservers] //定义Web组
172.17.21.206
172.17.21.207

2、使用ping模块测试主机是否在线

[root@Node3 ansible]# ansible all -m ping        //测试所有主机是否在线
172.17.21.206 | SUCCESS => {
"changed": false,
"ping": "pong"
}
172.17.21.207 | SUCCESS => {
"changed": false,
"ping": "pong"
}

3、ansible命令的使用说明

常用选项

  • ansible -m MOD_NAME -a MOD_ARGS 表示调用什么模块,使用模块的那些参数
  • ansible-doc -l 获取模块信息
  • ansible-doc -s MOD_NAME 获取指定模块的使用帮助
  • ansible -h

    [root@Node3 ansible]# ansible -h
    Usage: ansible <host-pattern> [options]
    Options:
    -a MODULE_ARGS, --args=MODULE_ARGS 模块的参数,如果执行默认COMMAND的模块,即是命令参数,如:“date”,"pwd"等等
    module arguments 模块参数
    -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, --background=SECONDS 后台运行超时时间
    run asynchronously, failing after X seconds
    (default=N/A)
    -C, --check don't make any changes; instead, try to predict some 只是测试一下会改变什么内容,不会真正去执行;相反,试图预测一些可能发生的变化
    of the changes that may occur
    -c CONNECTION, --connection=CONNECTION 连接类型使用。可能的选项是paramiko(SSH),SSH和地方。当地主要是用于crontab或启动。
    connection type to use (default=smart)
    -f FORKS, --forks=FORKS 并行任务数。NUM被指定为一个整数,默认是5
    specify number of parallel processes to use
    (default=)
    -h, --help show this help message and exit 打开帮助文档API
    -i INVENTORY, --inventory-file=INVENTORY 指定库存主机文件的路径,默认为/etc/ansible/hosts
    specify inventory host file
    (default=/etc/ansible/hosts)
    -l SUBSET, --limit=SUBSET 进一步限制所选主机/组模式 --limit=192.168.91.135 只对这个ip执行
    further limit selected hosts to an additional pattern
    --list-hosts outputs a list of matching hosts; does not execute
    anything else
    -m MODULE_NAME, --module-name=MODULE_NAME 执行模块的名字,默认使用 command 模块,所以如果是只执行单一命令可以不用 -m参数
    module name to execute (default=command)
    -M MODULE_PATH, --module-path=MODULE_PATH 要执行的模块的路径,默认为/usr/share/ansible/
    specify path(s) to module library
    (default=/usr/share/ansible/)
    -o, --one-line condense output 压缩输出,摘要输出.尝试一切都在一行上输出。
    -P POLL_INTERVAL, --poll=POLL_INTERVAL 调查背景工作每隔数秒。需要- b
    set the poll interval if using -B (default=)
    --private-key=PRIVATE_KEY_FILE 私钥路径,使用这个文件来验证连接
    use this file to authenticate the connection
    -S, --su run operations with su 用 su 命令
    -R SU_USER, --su-user=SU_USER 指定SU的用户,默认是root用户
    run operations with su as this user (default=root)
    -s, --sudo run operations with sudo (nopasswd)
    -U SUDO_USER, --sudo-user=SUDO_USER sudo到哪个用户,默认为 root
    desired sudo user (default=root)
    -T TIMEOUT, --timeout=TIMEOUT 指定SSH默认超时时间, 默认是10S
    override the SSH timeout in seconds (default=)
    -t TREE, --tree=TREE log output to this directory 将日志内容保存在该输出目录,结果保存在一个文件中在每台主机上。
    -u REMOTE_USER, --user=REMOTE_USER 远程用户, 默认是root用户
    connect as this user (default=root)
    --vault-password-file=VAULT_PASSWORD_FILE
    vault password file
    -v, --verbose verbose mode (-vvv for more, -vvvv to enable 详细信息
    connection debugging)
    --version show program's version number and exit 输出ansible的版本
  • ansible-doc -h
    [root@Node3 ansible]# ansible-doc  -h
    Usage: ansible-doc [options] [module...]
    Show Ansible module documentation 显示Ansible模块文档
    Options:
    --version show program's version number and exit 显示ansible-doc的版本号
    -h, --help show this help message and exit 显示命令参数API文档
    -M MODULE_PATH, --module-path=MODULE_PATH 查询模块,--module-path=MODULE_PATH 指定模块的路径
    Ansible modules/ directory
    -l, --list List available modules 显示已存在的所有模块列表
    -s, --snippet Show playbook snippet for specified module(s) 显示playbook制定模块的用法
    -v Show version number and exit 显示ansible-doc的版本号

Ansible基础概述的更多相关文章

  1. 自动化运维工具-Ansible基础及Ansible Ad-Hoc

    第58章 Ansible 目录 第58章 Ansible 一.Ansible基础概述 1.1)什么是Ansible 1.2)Ansible可以完成哪些功能呢?1.3)Ansible特点 1.4)Ans ...

  2. ansible基础-playbook剧本的使用

    ansible基础-playbook剧本的使用 作者:尹正杰  版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.YAML概述 1>.YAML的诞生 YAML是一个可读性高,用来表达数据序 ...

  3. Laxcus大数据管理系统2.0(2)- 第一章 基础概述 1.1 基于现状的一些思考

    第一章 基础概述 1.1 基于现状的一些思考 在过去十几年里,随着互联网产业的普及和高速发展,各种格式的互联网数据也呈现爆炸性增长之势.与此同时,在数据应用的另一个重要领域:商业和科学计算,在各种新兴 ...

  4. 【MySQL】MySQL无基础学习和入门之一:数据库基础概述和实验环境搭建

    数据库基础概述  大部分互联网公司都选择MySQL作为业务数据存储数据库,除了MySQL目前还有很多公司使用Oracle(甲骨文).SQLserver(微软).MongoDB等. 从使用成本来区分可以 ...

  5. SQL Tuning 基础概述10 - 体会索引的常见执行计划

    在<SQL Tuning 基础概述05 - Oracle 索引类型及介绍>的1.5小节,提到了几种"索引的常见执行计划": INDEX FULL SCAN:索引的全扫描 ...

  6. ansible基础-安装与配置

    一 安装 1.1 ansible架构 ansible是一个非常简单的自动化部署项目,由python编写并且开源.用于提供自动化云配置.配置文件管理.应用部署.服务编排和很多其他的IT自动化需求. an ...

  7. ansible基础-优化

    简介 当管理集群达到一定规模时,ansible达到性能瓶颈是难以避免的,此时我们可以通过一定手段提高ansible的执行效率和性能. 笔者虽未管理过超大规模服务器,但也通过查找资料和咨询大神了解了一些 ...

  8. ansible基础-Jinja2模版 | 过滤器

    Jinja2模版介绍 注:本文demo使用ansible2.7稳定版 在ansible基础-变量的「8.2 模版使用变量」章节中关于模版与变量也有所提及,有兴趣的同学可以去回顾一下. ansible通 ...

  9. ansible基础-理解篇

    1. 介绍 要说现在的部署工具,ansible可以说家喻户晓了. ansible是一个开源软件,用于软件供应.配置管理.应用部署.ansible可以通过SSH.remote PowerShell.其他 ...

随机推荐

  1. First Day!

    刚申请博客第一天,多多关照! 小弟,给各位大佬递茶! 出现什么错误, 还请明确指出! 现在, 正在找工作, 如果有老哥, 公司缺人, 何不让老弟我去试试! 不入前端, 不知水深. 一入前端, 如入泥潭 ...

  2. Linux Ubuntu 安装、汉化、常用操作

    一.安装Ubuntu Desktop 安装前准备 现在的PC机都可以满足要求. 软件准备 vmware:http://www.vmware.com/cn ubuntu:18ubuntu Desktop ...

  3. 【深度学习的实用层面】(一)训练,验证,测试集(Train/Dev/Test sets)

    在配置训练.验证.和测试数据集的过程中做出正确的决策会更好地创建高效的神经网络,所以需要对这三个名词有一个清晰的认识. 训练集:用来训练模型 验证集:用于调整模型的超参数,验证不同算法,检验哪种算法更 ...

  4. SQL面经汇总

    转载链接:https://www.nowcoder.com/discuss/95812 目前的打算是还要写一个假设检验的汇总和机器学习的汇总. 之前写的概率论汇总: https://www.nowco ...

  5. xlrd模块学习

    python常用模块目录 )# 打开Excel文件读取数据 import xlrd workbook = xlrd.open_workbook('mcw_test.xlsx') print(workb ...

  6. 模块-Memcached、Redis

    目录 Mecache 安装 使用 Redis 安装 Python操作Redis 操作模式 连接池 操作 String Hash List Set sort set 其他常用操作 管道 发布订阅 sen ...

  7. Scrum Meeting 10.29

    成员 今日活动 明日计划 用时 徐越 配置tomcat+eclipse 将上届后端代码迁移到服务器 4h 赵庶宏 与数据库连接的java代码学习及编写,测试代码 进行数据库的建立并学习数据库方面的知识 ...

  8. Linux环境下服务器环境搭建-mysql

    下载对应版本的mysql.rpm(Linux 6 安装el6 Linux 7 安装el7) 安装环境 centos 7,安装版本mysql57-community-release-el7-9.noar ...

  9. 《UML大战需求分析》-读后感二

    活动图将流成分解为一个一个的活动,通过活动的先后顺序来展示流程,而状态机图是从某个事物的状态是如何转变的角度来展示流程,首先确定事物,然后找出状态,状态之间的箭头叫转换,箭头上的文字说明了是什么事情导 ...

  10. week2-作业2

    项目地址:https://git.coding.net/Rainoob/calculate.git ·1.需求分析:程序可以根据输入的参数n随机产生n道四则运算计算题,每个数字在0-100之间.运算符 ...