1、Ansible特性

模块化:

  • 调用特定的模块,完成特定的任务
  • 有paramiko、PyYAML、jinja2三个关键模块
  • 支持自定义模块
  • 基于python语言开发
  • 部署简单就要python和ssh,agentless
  • 安全,基于Openssh
  • 支持playbook编排任务
  • 幂等性:一个任务执行一遍和执行n遍效果一样,不会因为重复执行带来意外情况
  • 无序代理不依赖PKI(无需ssl)
  • 可使用认可编程语言编写模块
  • YAML格式编排任务,支持丰富的数据结构
  • 叫强大的多层解决方案

2、ansible架构解析

用户通过ansible去管理各个主机,那么ansible就是我们所说的主控端,后面的Host为被控端。

在控制主机时,ansible是如何知道哪些主机是被自己控制的呢?

这就需要一个Host Inventory(主机清单),用于记录ansible可以控制网络中的哪些主机。另外,要配置和管理这些主机,可以采用两种方式,一种是单一的命令实现,另外一种也可以使用palybook实现。单一的命令模式是采用不同的模块进行管理,一个模块类似于一些管理的命令,如top,ls,ping等等,适用于临时性的操作任务。如果需要执行一些例行性或经常性的操作,则需要采用playbook的方式,playbook类似于一个脚本,将多个模块按一定的逻辑关系进行组合,然后执行。ansible还支持一些插件,如邮件、日志等,在和远程主机通信时,也会采用类似的连接插件,这里使用则是SSH协议的插件进行通信。

3、ansible主要组成部分

1)命令执行来源:

  • ANSIBLE PLAYBOOKS :任务剧本,编排定义ansible任务急的配置文件,有Ansible顺序执行,通常为json格式的YAML文件
  • INBENTORY:Ansible管理主机的清单/etc/anaible/hosts
  • MODULES:Ansible的执行命令的功能模块,多数为内置核心模块,也可以自定义
  • PLUGINS:模块功能补充,比如链接类型插件、循环插件、变量插件、过滤插件等,不常用
  • API:供第三方程序调用的应用程序编程接口
  • ANSIBLE:组合INVENTORY API MODUES PLUGINS的绿框,可以理解为Ansible的命令工具,其为核心执行工具

2)利用ansible实现管理的方式

  • Ad-Hoc即ansible命令,主要用于临时命令场景
  • ansible-playbook主要用户长期规划好的,大型项目的场景,需要提前规划

3)Ansile-playbook执行过程

  • 将已有编排好的任务急写入Ansible-playbook
  • 通过ansible-playbook命令分拆任务急至逐条ansible命令,按照预定规则执行

4)Ansible主要操作对象

  • Hosts主机
  • Networking网络设备

5)注意事项

  • 执行ansile的主机一般称为主控端,中控,master或堡垒机
  • 主控端python版本需要2.6以上
  • 被控端python版本需要2.4以上,小于2。4需要安装python-simplejson
  • 被控端如开启selinux需要安装libselinux-python
  • windows端不能作为主控端

4、anisble部署

ansible官网

  • (1)环境说明
主机名称 IP地址 角色 系统版本
ansible 192.168.56.11 主控端 Centos 7.x
node01 192.168.56.12 被控端 Centos 7.x
node02 192.168.56.13 被控端 Centos 7.x
  • (2)ansible部署
[root@ansible ~]# yum install -y ansible
[root@ansible ~]# ansible --version
ansible 2.7.10
config file = /etc/ansible/ansible.cfg
configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python2.7/site-packages/ansible
executable location = /usr/bin/ansible
python version = 2.7.5 (default, Oct 30 2018, 23:45:53) [GCC 4.8.5 20150623 (Red Hat 4.8.5-36)]
  • (3)ansible主要配置文件功能解析
/etc/ansible/ansible.cfg 	#主配置文件,配置ansible工作特性
/etc/ansible/hosts #主机清单
/etc/ansible/roles/ #存放角色的目录
/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界面与用户交互的执行工具
  • (4)小试牛刀
[root@ansible ~]# ansible --help	#查看ansible使用帮助
Usage: ansible <host-pattern> [options] #使用方法,ansible+主机+选项 [root@ansible ~]# ansible 192.168.56.12 -m ping #检测主机的存活,返回pong则是正常,这里使用了-m参数,采用ping模块进行检测目标主机的存活性
192.168.56.12 | SUCCESS => {
"changed": false,
"ping": "pong"
} [root@ansible ~]# ansible -m ping 192.168.56.13 #连接另外1台被控端,提示无法匹配
[WARNING]: Could not match supplied host pattern, ignoring: 192.168.56.13 [WARNING]: No hosts matched, nothing to do #这里就需要在主机清单中增加被控端主机,需要注意的是,主机清单也支持分组模式,这里将三台主机分为web组
[root@ansible ~]# vim /etc/ansible/hosts
[web]
192.168.56.11
192.168.56.12
192.168.56.13
[root@ansible ~]# ansible web -m ping #通过对一组服务器进行存活性检测
192.168.56.13 | SUCCESS => {
"changed": false,
"ping": "pong"
}
192.168.56.12 | SUCCESS => {
"changed": false,
"ping": "pong"
}
192.168.56.11 | SUCCESS => {
"changed": false,
"ping": "pong"
} #PS:这里需要注意的是,远程连接采用的不是单纯的ping命令,如果没有做ssh密钥认证,是会出现无法ping通的错误,此时可以采用-k参数,默认执行使用root用户进行连接远程主机。
[root@ansible ~]# ansible 192.168.56.13 -m ping -k
SSH password:
192.168.56.13 | SUCCESS => {
"changed": false,
"ping": "pong"

在使用ansible时,我们会发现ssh链接较慢的现象,这里则需要修改sshd服务的两个参数来解决该问题:

UseDNS no
GSSAPIAuthentication no

5、主配置文件ansible.cfg解析

配置文件大部分都是注释,只需要保持默认配置即可。这里需要开启日志记录以及关闭远程首次连接的ssh认证检查。

[root@ansible ~]# vim /etc/ansible/ansible.cfg
[defaults] 默认配置 # some basic default values... #inventory = /etc/ansible/hosts #主机列表配置文件
#library = /usr/share/my_modules/ #库文件存放目录
#module_utils = /usr/share/my_module_utils/ #模块存放目录
#remote_tmp = ~/.ansible/tmp #临时py命令文件存放在远程主机目录
#local_tmp = ~/.ansible/tmp #本机的临时命令执行目录
#forks = 5 #默认并发数
#poll_interval = 15 #时间间隔
#sudo_user = root #默认sudo用户
#ask_sudo_pass = True #每次执行ansible命令是否询问sudo用户密码
#ask_pass = True #每次执行ansible命令是否询问ssh密码
#transport = smart #传输方式
#remote_port = 22 #远程端口号
#module_lang = C
#module_set_locale = False
... ...
host_key_checking = False #检查对应服务器的host_key,建议取消注释.
log_path=/var/log/ansible.log #记录日志及位置,默认不记录 建议取消注释

Ansible入门笔记(1)之工作架构和使用原理的更多相关文章

  1. Ansible入门笔记(3)之Playbook

    目录 Ansible-playbook 1.1.什么是playbook? 1.2.playbook的核心组成 1.3.playbook的handlers.notify触发 1.4.playbook的变 ...

  2. Ansible入门笔记(2)之常用模块

    目录 Ansible常用模块 1.1.Ansible Ad-hoc 1.2.Ansible的基础命令 1.3.常用模块 Ansible常用模块 1.1.Ansible Ad-hoc 什么事ad-hoc ...

  3. 1 TensorFlow入门笔记之基础架构

    ------------------------------------ 写在开头:此文参照莫烦python教程(墙裂推荐!!!) ---------------------------------- ...

  4. 每天成长一点---WEB前端学习入门笔记

    WEB前端学习入门笔记 从今天开始,本人就要学习WEB前端了. 经过老师的建议,说到他每天都会记录下来新的知识点,每天都是在围绕着这些问题来度过,很有必要每天抽出半个小时来写一个知识总结,及时对一天工 ...

  5. MySQL入门笔记

    MySQL入门笔记 版本选择: 5.x.20 以上版本比较稳定 一.MySQL的三种安装方式: 安装MySQL的方式常见的有三种: ·          rpm包形式 ·          通用二进制 ...

  6. Ansible 入门指南 - 安装及 Ad-Hoc 命令使用

    安装及配置 ansible Ansilbe 管理员节点和远程主机节点通过 SSH 协议进行通信.所以 Ansible 配置的时候只需要保证从 Ansible 管理节点通过 SSH 能够连接到被管理的远 ...

  7. Centos7——docker入门(笔记)

    docker 入门(笔记) 一.Docker是什么? 官方原话: Docker provides a way to run applications securely isolated in a co ...

  8. React.js入门笔记

    # React.js入门笔记 核心提示 这是本人学习react.js的第一篇入门笔记,估计也会是该系列涵盖内容最多的笔记,主要内容来自英文官方文档的快速上手部分和阮一峰博客教程.当然,还有我自己尝试的 ...

  9. redis入门笔记(2)

    redis入门笔记(2) 上篇文章介绍了redis的基本情况和支持的数据类型,本篇文章将介绍redis持久化.主从复制.简单的事务支持及发布订阅功能. 持久化 •redis是一个支持持久化的内存数据库 ...

随机推荐

  1. fastclick select 闪退 bug

    这时候needsclick就派上用场了 <select class='needsclick'></select> 附上fastclick github上的链接

  2. GIT回推本地commit近期版本

    一次意外吧,本地add并且commit之后拉了别人错误的代码下来,后来本地又需要进行编写测试,无奈只能回推到自己刚刚commit过的代码,但是git命令除了拉去提交等其他的不是很熟悉,在度娘之后也遇到 ...

  3. [CENTOS7] 将域群组加入到Sudoer里

    文章来源:https://derflounder.wordpress.com/2012/12/14/adding-ad-domain-groups-to-etcsudoers/ Adding AD d ...

  4. 万恶的浏览器缓存 Vuex state里面的成员改名后浏览器不会马上更新

    今天在用Vuex的时候,在state里面加了个名叫rootUrl的属性 但是怎么都取不到值,重新启动程序,ctrl+f5浏览器刷新都不行,纠结了大半上午,于是用console.log(store.ge ...

  5. python基础之os.system函数

    前言 os.system方法是os模块最基础的方法,其它的方法一般在该方法基础上封装完成. os的system原理 system函数可以将字符串转化成命令在服务器上运行:其原理是每一条system函数 ...

  6. django —— 邮件

    官方文档 1.11 配置settings.py # QQ邮箱为例, 其他邮箱对应的SMTP配置可查官方 EMAIL_HOST = "smtp.qq.com" EMAIL_PORT ...

  7. 将 SecondaryNameNode 配置到 s105 节点上

    相关链接  Hadoop 完全分布式安装 0. 说明 SecondaryNameNode 的作用  参考[待补充] 在 Hadoop 完全分布式的基础之上配置 将 SecondaryNameNode ...

  8. mysql数据库管理工具(navicat for mysql) 10.1.7 绿色中文版

    Navicat for MySQL:Navicat for MySQL 是一套专为 MySQL 设计的高性能数据库管理及开发工具.它可以用于任何版本 3.21 或以上的 MySQL 数据库服务器,并支 ...

  9. HDFS NameNode内存详解

    前言 <HDFS NameNode内存全景>中,我们从NameNode内部数据结构的视角,对它的内存全景及几个关键数据结构进行了简单解读,并结合实际场景介绍了NameNode可能遇到的问题 ...

  10. 运行结果出现Process finished with exit code 0

    表示程序正常执行完毕并退出. 可以科普一下exit code,在大部分编程语言中都适用 exit code 0表示程序执行成功,正常退出 exit code 1表示执行过程中遇到了某些问题或者错误,非 ...