ansible分为以下几个部份:

Ansible:核心引擎

Modules:包括 Ansible 自带的核心模块(core modules)及自定义模块 (custom modules);

核心模块:ansible模块资源分发到远程节点使其执行特定任务或匹配一个特定的状态。

自定义模块:如果核心模块不足以完成某种功能,可以添加自定义模块。

Plugins:完成模块功能的补充,包括连接插件、邮件插件等

Playbooks:网上很多翻译为剧本,个人觉得理解为编排更为合理;定义ansible任务的配置文件,可以将多个任务定义在一个剧本中,由ansible自动执行,剧本执行支持多个任务,可以由控制主机运行多个任务,同时对多台远程主机进行管理。

Inventory:定义 Ansible 管理主机的清单

ansible功能特性

应用代码自动化部署。
系统管理配置自动化。
支持持续交付自动化。
支持云计算、大数据平台(如AWS、OpenStack、VMWare等)环境。
轻量级,无需在客户端安装agent,更新时只需在控制机上进行一次更新即可。
批量任务执行可以写成脚本,不用分发到远程就可以执行。
使用Python编写,维护更简单,Ruby语法过于复杂。
支持非root用户管理操作,支持sudo。
可以按组分发、按机器名分发

python版本要在2.6以上

OS:(3台都一样)
[root@ansible-1 ~]# cat /etc/centos-release
CentOS release 6.8 (Final)

关闭selinux和防火墙:(3台都一样)
[root@ansible-1 ~]# vim /etc/selinux/config
SELINUX=disabled
[root@ansible-1 ~]# service iptables stop

安装Ansible:
一台控制主机:192.168.0.223
三台管理主机:
192.168.0.224
192.168.0.225

准备安装:
修改yum源、挂载光盘等......

控制主机端配置:
安装ansible前需要安装依赖包
[root@ansible-1 ~]# yum -y install epel-release
安装ansible:
[root@ansible-1 ~]# yum -y install ansible
配置机组:
[root@ansible-1 ~]# vim /etc/hosts #在最后插入以下内容
192.168.0.223 ansible-1        #服务端的主机名和IP
192.168.0.224 ansible-2       #客户端的主机名和IP
192.168.0.225 ansible-3        #客户端的主机名和IP

服务端ssh配置:
[root@ansible-1 ~]# /etc/ssh/sshd_config
Protocol 2
PasswordAuthentication no      #去掉密码登录
PubkeyAuthentication yes       #使用key登录
AuthorizedKeysFile .ssh/authorized_keys     #这里的名字要记好,下面要用到

服务端生成自己的秘钥:(当前是哪个用户生成的就是这个用户的秘钥)
[root@ansible-1 ~]# ssh-keygen -t rsa
//按4次回车,每一次都不输入任何东西,如果在生成公钥的过程中有一次输入了密码什么的免秘钥配置就会失败。

查看自己的公钥和私钥:
[root@ansible-1 ~]# cd ~/.ssh
[root@ansible-1 .ssh]# ls
id_rsa id_rsa.pub
//id_rsa(私钥)    id_rsa.pub(公钥)
[root@ansible-1 .ssh]# chmod 700 id_rsa

#重命名公钥,保持和/etc/ssh/sshd_config里的一致
[root@ansible-1 .ssh]# mv id_rsa.pub authorized_keys
[root@ansible-1 .ssh]# chmod 600 authorized_keys     //!!!这一步是必须的

把自己的公钥copy到其他服务器上去:
############ 在发送之前客户端也要生成秘钥 ###############
[root@ansible-1 .ssh]# scp authorized_keys root@192.168.0.224:~/.ssh
[root@ansible-1 .ssh]# scp authorized_keys root@192.168.0.225:~/.ssh

第一次登录会提示输入密码:
[root@ansible-1 .ssh]# ssh ansible-2
The authenticity of host 'ansible-2 (192.168.0.224)' can't be established.
RSA key fingerprint is 61:2b:96:30:20:43:68:24:d8:ed:18:03:66:f5:c0:4a.
Are you sure you want to continue connecting (yes/no)? yes      ###这里、这里、这里
Warning: Permanently added 'ansible-2' (RSA) to the list of known hosts.
Last login: Wed Nov 15 18:01:58 2017 from 192.168.0.49

第二次登录:
[root@ansible-1 .ssh]# ssh ansible-2
Last login: Wed Nov 15 22:56:11 2017 from ansible-1

修改ansible的hosts文件:
[root@ansible-1 .ssh]# cd
[root@ansible-1 ~]# vim /etc/ansible/ansible.cfg
inventory = /etc/ansible/hosts        #指定默认hosts配置的位置
## ask_sudo_pass = True        #不进行host_key检查,省去目标key发生变化时输入(yes/no)的步骤
## ask_pass = True            # 每次执行ansible命令是否询问ssh密码
host_key_checking = False        # 每次执行ansible命令时是否询问sudo密码
[root@ansible-1 ~]# vim /etc/ansible/hosts
[xycm]
192.168.0.224
192.168.0.225
注:将要管理的主机写进去,可以填写IP或主机名

[root@ansible-1 ~]# ansible all -m ping
192.168.0.224 | SUCCESS => {
"changed": false,
"ping": "pong"
}
192.168.0.225 | SUCCESS => {
"changed": false,
"ping": "pong"
}

常用模块介绍(module_name)
官方模块介绍地址:http://docs.ansible.com/ansible/latest/modules_by_category.html

1)command模块:远程主机上运行命令
command模块为ansible默认模块,不指定-m参数时,使用的就是command模块;
comand模块比较简单,常见的命令都可以使用,但其命令的执行不是通过shell执行的,所以,像这些 "<", ">", "|", and "&"操作都不可以,当然,也就不支持管道;
缺点:不支持管道,就没法批量执行命令
示例:
[root@ansible-1 ~]# ansible xycm -m command -a "ls /"
192.168.0.224 | SUCCESS | rc=0 >>
bin
boot
cgroup
dev
etc
home
lib
.......... 略一部分 ...........
192.168.0.225 | SUCCESS | rc=0 >>
bin
boot
cgroup
dev
etc
home
lib
.......... 略一部分 ...........

给远程主机添加用户,并设置密码:
[root@ansible-1 ~]# ansible xycm -a "useradd ansible-2"
192.168.0.224 | SUCCESS | rc=0 >>

192.168.0.225 | SUCCESS | rc=0 >>
设置密码:
[root@ansible-1 ~]# ansible xycm -a "echo weixiao | passwd --stdin ansible-2"
192.168.0.224 | SUCCESS | rc=0 >>
weixiao | passwd --stdin ansible-2

192.168.0.225 | SUCCESS | rc=0 >>
weixiao | passwd --stdin ansible-2

shell模块:
使用shell模块,在远程命令通过/bin/sh来执行;所以,我们在终端输入的各种命令方式,都可以使用;
但是我们自己定义在.bashrc/.bash_profile中的环境变量shell模块由于没有加载,所以无法识别;如果需要使用自定义的环境变量,就需要在最开始,执行加载自定义脚本的语句;

对shell模块的使用可以分成两块:
1) 如果待执行的语句少,可以直接写在一句话中:
[root@ansible-1 ~]# ansible xycm -a ". .bash_profile;ps -ef|grep crond" -m shell

2) 使用scripts模块可以在本地写一个脚本,在远程服务器上执行:
示例:
[root@ansible-1 /]# vim 123.sh

#!/bin/bash
echo "ni ye bu de yi wo hui xiao xiao de liqu"

[root@ansible-1 /]# ansible xycm -m script -a "/123.sh"
192.168.0.225 | SUCCESS => {
"changed": true,
"rc": 0,
"stderr": "Shared connection to 192.168.0.225 closed.\r\n",
"stdout": "ni ye bu de yi wo hui xiao xiao de liqu\r\n",
"stdout_lines": [
"ni ye bu de yi wo hui xiao xiao de liqu"
]
}
192.168.0.224 | SUCCESS => {
"changed": true,
"rc": 0,
"stderr": "Shared connection to 192.168.0.224 closed.\r\n",
"stdout": "ni ye bu de yi wo hui xiao xiao de liqu\r\n",
"stdout_lines": [
"ni ye bu de yi wo hui xiao xiao de liqu"
]
}

3) copy模块:把当前主机文件复制到远程主机位置,可以指定mode(权限)、own(所属主)、group(所属组)
[root@ansible-1 /]# ansible all -m copy -a "src=/123.sh dest=/ mode=644 owner=root group=root"

4)fetch模块:和copy相反,从远程主机拷贝文件到本地主机
[root@ansible-1 /]# ansible xycm -m fetch -a "src=/opop-1 dest=/mnt/kkkk/"
192.168.0.224 | SUCCESS => {
"changed": true,
"checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
"dest": "/mnt/kkkk/192.168.0.224/opop-1",
"md5sum": "d41d8cd98f00b204e9800998ecf8427e",
"remote_checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
"remote_md5sum": null
}
192.168.0.225 | SUCCESS => {
"changed": false,
"file": "/opop-1",
"msg": "the remote file does not exist, not transferring, ignored"
}
注:当dest=/kkkk/,abc.txt会保存在/kkkk/目录下
当dest=/kkkk,会拷贝abc.txt文件,并命名为kkkk

5)cron模块:在远程主机制定crontab周期性计划任务
minute= hour= day= month= weekday= job= name=(必须填写) state=
分 时 日 月 周 执行的命令 用户名
例如:
ansible all -m cron -a "minute=*/10 job='/sbin/ntpdate 10.10.10.10 &> /dev/null' name=Synctime"

在被管理的主机上使用crontab -l查看
[root@WebServer ~]# crontab -l
#Ansible: Synctime
*/10 * * * * /sbin/ntpdate 10.10.10.10 &> /dev/null

在管理(ansible)的主机上,可以删除制定的计划任务
[root@wlm ~] ansible all -m cron -a "state=absent name=Synctime"
### absent = 缺席 ###

Ansible安装及配置的更多相关文章

  1. 服务器批量管理软件ansible安装以及配置

    1.yum安装(管理主机以及被管理主机都需要安装) yum install epel-release yum install ansible 2.配置管理主机 vim /etc/ansible/hos ...

  2. Ansible 安装与配置(一)

    公司大概有200多云主机需要进行管理,但是如果通过手工管理费时还累最终结果也容易出错,所以考虑通过自动化的方式来管理云主机,目前开源的自动化工具,大家用的比较多的有Ansible和Saltstack这 ...

  3. 15.Ansible安装与配置简单版

    Ansible是一个简单高效的自动化运维管理工具,用Python开发,能大批量管理N多台机器,可以并发的在多台机器上部署应用.安装软件.执行命令.配置和编排任务. 一.Ansible工作机制 从图中可 ...

  4. 1.Ansible安装以及配置

    本节内容以Centos7为系统环境进行讲解: 1.安装epel源,方便直接yum安装: wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun ...

  5. ansible安装和配置

    一.安装ansible准备 //安装准备 .两台机器 172.7.15.106 172.7.15.111 .设置hostname以及hosts 172.7.15.106 web9.lulu.com 1 ...

  6. ansible安装、配置ssh、hosts、测试连接

    .安装ansible 1.1.源码安装 源码安装参照 https://www.cnblogs.com/guxiong/p/7218717.html [root@kube-node3 ~]# .tar. ...

  7. Ansible安装 入门教程

    learn一门新技术咯: ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet.cfengine.chef.func.fabric)的优点,实现了批量系统配置 ...

  8. Ansible安装部署及常用模块详解

    Ansible命令使用 Ansible语法使用ansible <pattern_goes_here> -m <module_name> -a <arguments> ...

  9. Ansible安装配置Nginx

    一.思路 现在一台机器上编译安装好nginx.打包,然后在用ansible去下发 cd /etc/ansible 进入ansible配置文件目录 mkdir roles/{common,install ...

随机推荐

  1. Spring全家桶–SpringBoot Rest API

    Spring Boot通过提供开箱即用的默认依赖或者转换来补充Spring REST支持.在Spring Boot中编写RESTful服务与SpringMVC没有什么不同.总而言之,基于Spring ...

  2. 利用批处理文件删除系统托盘上的图标(适用于Windows各个版本)

    对于我这种强迫症患者来说,如果我已经删除了一些软件,但是系统托盘里面还有它,我会很难受.所以,没办法,必须想办法把它清除掉,还自己一片安宁!!!不知各位是否遇到过和我一样的问题,下面贴一段批处理文件的 ...

  3. a标签禁止跳转或者不跳转的几种实现方式

    1.onclick事件中返回false <a href="http://www.baidu.com"  onclick="return false" &g ...

  4. 【读书笔记】iOS-UDID

    UIDevice类可以返回当前iOS设备的UDID,以前开发者通常使用UDID作为识别每台设备的唯一标识,然后从iOS5开始,苹果公司将这一功能标记为废止并不推荐使用,苹果公司在iOS6之后将这个功能 ...

  5. spark (java API) 在Intellij IDEA中开发并运行

    概述:Spark 程序开发,调试和运行,intellij idea开发Spark java程序. 分两部分,第一部分基于intellij idea开发Spark实例程序并在intellij IDEA中 ...

  6. Sharepoint 2013 Gatherer 数据库的架构版本低于此 Gatherer 应用程序支持的向后兼容的最低架构版本

    管理中心 ->升级和迁移 ->查看数据库状态 解决方法: 开始-运行(以管理员身份运行),输入如下命令. cd  C:\Program Files\Common Files\Microso ...

  7. Python 基于urllib.request封装http协议类

    基于urllib.request封装http协议类 by:授客QQ:1033553122 测试环境: Python版本:Python 3.3   代码实践 #!/usr/bin/env python ...

  8. Cordova/Ionic开发的Android APP启用Chrome Inspect调试的方法

    Cordova/Ionic开发的Android APP,需要启用WebView的调试模式,才可以在Chrome浏览器中输入chrome://Inspect,然后使用大家熟悉的开发者工具进行调试.不启用 ...

  9. 创建Android Apps的30个经验教训

    这个世界上有两种人-从经验教训中学习的人以及听从别人建议的人.这里是我一路走来学到的一些东西,分享给大家: 在添加任何第三方party之前,请三思:这真的是一个成熟的项目吗? 如果一个东西用户看不到, ...

  10. id、name、setter方法注入、构造方法注入、工厂方法注入、注解注入、方法注入、方法替换、Web作用域、普通bean引用Web作用域的bean

    spring IoC的id和name id的命名需要满足XML对id的命名规范,必须以字母开始,后面可以是字母.数字.连字符.下画线.句号.冒号等等号,但逗号和空格是非法的.如果用户确实希望用一些特殊 ...