一、cobbler实现自动装机html
二、saltstack实现工程自动化配置前端
三、kubernetes实现容器自动化编排java
四、zabbix实现自动化监控node
五、elastic实现应用日志自动化收集python
六、jenkins实现开发持续化交付mysql
自动化运维范围包括 : 安装自动化、部署自动化、监控自动化、发布自动化、升级自动化、安全管控自动化、优化自动化、数据备份自动化等。linux
自动化运维系统包括 : 商用自动化运维系统、开源自动化运维系统,自建(研发)自动化运维系统。android
常见的自动化运维产品技术ios
ansiblenginx
Puppet
Chef
SaltStack
腾讯蓝鲸
Splunk
IBM
BMC
日志易
天旦
Ansible 是一个配置管理和应用部署工具,功能相似于目前业界的配置管理工具 Chef,Puppet,Saltstack。Ansible 是经过 Python 语言开发。Ansible 平台由 Michael DeHaan 建立,他同时也是知名软件 Cobbler 与 Func 的做者。Ansible 的第一个版本发布于 2012 年 2 月。Ansible 默认经过 SSH 协议管理机器,因此 Ansible 不须要安装客户端程序在服务器上。
Ansible是一种配置和管理工具,面向客户端的软件部署和配置,支持Unix、Linux和Windows。它使 用JSON和YAML,而不是IAC,根本不须要节点代理就能够安装。它能够经过OpenStack在内部系统上使用,也能够在亚马逊EC2上使用。
Ansible 能够从中央控制节点统一配置服务器、安装软件或执行各类 IT 任务。它采用一对多、无客户端的机制,从控制节点上经过 SSH 发送指令给远端的客户机来完成任务(固然除了 SSH 外也能够用别的协议)。
Ansible是新出现的运维工具是基于Python研发的综合了众多老牌运维工具的优势实现了批量操做系统配置、批量程序的部署、批量运行命令等功能。在进行大规模部署时,手工配置服务器环境是不现实的,这时必须借助于自动化部署工具。
Ansible 是一个模型驱动的配置管理器,支持多节点发布、远程任务执行。默认使用 SSH 进行远程链接。无需在被管理节点上安装附加软件,可以使用各类编程语言进行扩展。
Ansible做为一款灵活、高效、功能丰富的自动化部署工具在企业运维管理中备受推崇。通过测试,我来使用ansible部署小型企业服务框架,实现高可用、负载均衡的目标。若有错误敬请赐教。
Ansible基本架构
上图为ansible的基本架构,从上图能够了解到其由如下部分组成:
核心:ansible
核心模块(Core Modules):这些都是ansible自带的模块
扩展模块(Custom Modules):若是核心模块不足以完成某种功能,能够添加扩展模块
插件(Plugins):完成模块功能的补充
剧本(Playbooks):ansible的任务配置文件,将多个任务定义在剧本中,由ansible自动执行
链接插件(Connectior Plugins):ansible基于链接插件链接到各个主机上,虽然ansible是使用ssh链接到各个主机的,可是它还支持其余的链接方法,因此须要有链接插件
主机群(Host Inventory):定义ansible管理的主机
Ansible工做原理
一、管理端支持local 、ssh、zeromq 三种方式链接被管理端,默认使用基于ssh的链接---这部分对应基本架构图中的链接模块;
二、能够按应用类型等方式进行Host Inventory(主机群)分类,管理节点经过各种模块实现相应的操做---单个模块,单条命令的批量执行,咱们能够称之为ad-hoc;
三、管理节点能够经过playbooks 实现多个task的集合实现一类功能,如web服务的安装部署、数据库服务器的批量备份等。playbooks咱们能够简单的理解为,系统经过组合多条ad-hoc操做的配置文件 。
安装完ansible后,ansible一共提供了七个指令:ansible、ansible-doc、ansible-galaxy、ansible-lint、ansible-playbook、ansible-pull、ansible-vault 。查看usage部分,详细部分能够经过 "指令 -h" 的方式获取。
常见的自动化运维工具 : Fabric、Puppet、Chef、SaltStack、Ansible。
Ansible 中小企业高可用负载均衡部署方案拓扑图 :
前端代理层由两台nginx实现,并安装keepalived实现地址滑动达成高可用。 web层由两套Apache+PHP+WordPress 构建应用环境。
相关连接:https://www.ansible.com
(1)no agents :不须要在被管控主机上安装任务客户端 ;
(2)no server : 无服务器端,使用时直接运行命令便可;
(3)modules in any languages : 基于模块工做,可以使用任意语言开发模块;
(4)yaml. not code : 使用yaml语言定制剧本playbook;
(5)ssh by default : 基于SSH工做;
(6)strong multi-tier solution : 可实现多级指挥;
(1)轻量级,无需在客户端安装agent,更新时,只需在操做机上进行一次更新便可;
(2)批量任务执行能够写成脚本,并且不用分发到远程就能够执行;
(3)使用python编写,维护更简单,ruby语法过于复杂;
(4)支持sudo。
(5) 无代理,部署简单。
(6) 模块丰富,覆盖面较广,使用场景较多。
(7) 社区热度高,资料丰富。
Ansible的缺点是:
1、性能相对较弱,须要优化或更改链接模式提高性能。
2、HPUX、WindowsServer08支持较弱。
3、对于中文环境依旧存在一些弊端。
4、日志记录功能不够强大。
5、基于幂等设计,回退机制弱。
优缺点分析:优势是模块能够用任何语言开发、备管节点不须要安装代理软件、有Web管理界面、安装运行简单,缺点是对windows备管节点须要增强、执行效率相对较低。
下图是Puppet、Saltstack、Ansible这三款运维工具处理能力与处理效率的对比:
区别 : Puppet适用于软件自动化配置和部署;SaltStack适用于基础设施管理,在几分钟内可运行起来,很容易管理上万台服务器,速度够快;Ansible适用于批量操做系统配置、批量程序的部署、批量运行命令等。
Ansible基本架构
组成部分 :
核心:ansible
核心模块(Core Modules):这些都是ansible自带的模块
扩展模块(Custom Modules):若是核心模块不足以完成某种功能,能够添加扩展模块
插件(Plugins):完成模块功能的补充
剧本(Playbooks):ansible的任务配置文件,将多个任务定义在剧本中,由ansible自动执行
链接插件(Connectior Plugins):ansible基于链接插件链接到各个主机上,虽然ansible是使用ssh链接到各个主机的,可是它还支持其余的链接方法,因此须要有链接插件
主机群(Host Inventory):定义ansible管理的主机
ansible是基于模块工做的,自己没有批量部署的能力。真正具备批量部署的是ansible所运行的模块,ansible只是提供一种框架。主要包括:
(1)、链接插件connection plugins:负责和被监控端实现通讯;
(2)、host inventory:指定操做的主机,是一个配置文件里面定义监控的主机;
(3)、各类模块核心模块、command模块、自定义模块;
(4)、借助于插件完成记录日志邮件等功能;
(5)、playbook:剧本执行多个任务时,非必需可让节点一次性运行多个任务。
(6)、Ansible经常使用模块command、shell、copy、cron、fetch、file、service、user、 setup等模块
(7)、Anshible playbook(剧本)核心元素Hosts、Tasks、Variables、Templaters、 Handlers、Roles
(8)、Puppet高级用法:安装配置puppet-dashboard、Puppet kick功能实现
(9)、目前主流的自动化运维工具备puppet、ansible、saltstack。
(10)、若是考虑到快速使用,建议puppet,有一个foreman作web平台,上手快。
(11)、ansible主要是远程命令执行,比较适合作“一次性”的工做。统部署、应用发布、打补丁等等。
注意:
在企业中使用ansible,要注意如下几点:
1. 安全控制,简单来讲就是避免用root用户来执行。
2. 控制好依赖 在写playbook的时候,控制好前后顺序和依赖关系。
3. 结果的收集和分析 由于一会儿几百台机器一块儿干活,因此,就要本身写外置脚本,更好地收集ansible的操做结果,而且进行直观的汇总和展示。
一、管理端支持local 、ssh、zeromq 三种方式链接被管理端,默认使用基于ssh的链接---这部分对应基本架构图中的链接模块;
二、能够按应用类型等方式进行Host Inventory(主机群)分类,管理节点经过各种模块实现相应的操做---单个模块,单条命令的批量执行,咱们能够称之为ad-hoc;
三、管理节点能够经过playbooks 实现多个task的集合实现一类功能,如web服务的安装部署、数据库服务器的批量备份等。playbooks咱们能够简单的理解为,系统经过组合多条ad-hoc操做的配置文件 。
ansible的七个命令
安装完ansible后,发现ansible一共提供了七个指令:ansible、ansible-doc、ansible-galaxy、ansible-lint、ansible-playbook、ansible-pull、ansible-vault 。只查看usage部分,详细部分能够经过 "指令 -h" 的方式获取。
一、ansible
[root@localhost ~]# ansible -h
Usage: ansible [options]
ansible是指令核心部分,其主要用于执行ad-hoc命令,即单条命令。默认后面须要跟主机和选项部分,默认不指定模块时,使用的是command模块。如:
[root@361way.com ~]# ansible 192.168.0.102 -a 'date'
192.168.0.102 | success | rc=0 >>
Tue May 12 22:57:24 CST 2015
不过默认使用的模块是能够在ansible.cfg 中进行修改的。ansible命令下的参数部分解释以下:
二、ansible-doc
Usage: ansible-doc [options] [module...]
该指令用于查看模块信息,经常使用参数有两个-l 和 -s ,具体以下:
//列出全部已安装的模块
# ansible-doc -l
//查看具体某模块的用法,这里如查看command模块
# ansible-doc -s command
三、ansible-galaxy
Usage: ansible-galaxy [init|info|install|list|remove] [--help] [options] ...
ansible-galaxy 指令用于方便的从https://galaxy.ansible.com/ 站点下载第三方扩展模块,咱们能够形象的理解其相似于centos下的yum、python下的pip或easy_install 。以下示例:
[root@localhost ~]# ansible-galaxy install aeriscloud.docker
- downloading role 'docker', owned by aeriscloud
- downloading role from https://github.com/AerisCloud/ansible-docker/archive/v1.0.0.tar.gz
- extracting aeriscloud.docker to /etc/ansible/roles/aeriscloud.docker
- aeriscloud.docker was installed successfully
这个安装了一个aeriscloud.docker组件,前面aeriscloud是galaxy上建立该模块的用户名,后面对应的是其模块。在实际应用中也能够指定txt或yml 文件进行多个组件的下载安装。这部分能够参看官方文档。
四、ansible-lint
ansible-lint是对playbook的语法进行检查的一个工具。用法是ansible-lint playbook.yml 。
五、ansible-playbook
该指令是使用最多的指令,其经过读取playbook 文件后,执行相应的动做,这个后面会作为一个重点来说。
六、ansible-pull
该指令使用须要谈到ansible的另外一种模式---pull 模式,这和咱们日常常常用的push模式恰好相反,其适用于如下场景:你有数量巨大的机器须要配置,即便使用很是高的线程仍是要花费不少时间;你要在一个没有网络链接的机器上运行Anisble,好比在启动以后安装。这部分也会单独作一节来说。
七、ansible-vault
ansible-vault主要应用于配置文件中含有敏感信息,又不但愿他能被人看到,vault能够帮你加密/解密这个配置文件,属高级用法。主要对于playbooks里好比涉及到配置密码或其余变量时,能够经过该指令加密,这样咱们经过cat看到的会是一个密码串类的文件,编辑的时候须要输入事先设定的密码才能打开。这种playbook文件在执行时,须要加上 --ask-vault-pass参数,一样须要输入密码后才能正常执行。(来源:361way)
系统层:Linux、Windows、AIX等,对应的模块有acl、cron、pip、yum、shell、command、file、copy、user、lvol等等。
虚拟化:OpenStack、VMware、Docker、CloudStack、LXC等,对应的模块glance_image、os_server、vmware_vmkernel、docker等等。
商业化软件:F五、ASA、Citrix、Eos等
系统应用层:Apache、Jboss、Zabbix、Rabbitmq、SVN、GIT、Mysql、Mariadb等,对应的模块apache2_module、jboss、zabbix_group、rabbitmq_binding、subversion、git等
GitHub社区活跃度:
一、Ad-hoc - ansible命令
二、Playbook - YAML
Ad-hoc
ansible主机或组 -m模块名-a'模块参数' ansible参数
• 主机和组 : 是在/etc/ansible/hosts里面进行指定的部分,动态Inventory使用的是脚本从外部应用里面获取的主机
• 模块名 : 能够经过ansible-doc -l 查看目前安装的模块,默认不指定时,使用的是command模块,具体能够查看/etc/ansible/ansible.cfg的”#module-name = command“ 部分,默认模块能够在配置文件中进行修改
• 模块参数 : 能够经过 ”ansible-doc -s ,模块名“查看具体的用法及后面的参数
• ansible参数 : 能够经过ansible命令的帮助信息李查看到,这里有不少参数能够供选择,如是否须要输入密码、是否sudo等。
ping模块
ansible all -m ping
command模块
ansible all -m command -a "uptime"
shell模块
ansible all -m shell -a "cat /dev/null > /var/log/nginx/access.log"
yum模块
ansible all -m yum -a "name=telnet state=present"
service模块
ansible all -m service -a "name=nginx state=retarted"
copy模块
ansible all -m copy -a "src=root/nginx.conf desc=/etc/nginx/nginx.conf owner=nginx group=nginx mode=644"
unarchive模块
ansible all -m unarchive -a "src=java7.tar.gz copy=yes dest=/usr/java owner=root group=root"
file模块
ansible all -m file "src=/usr/java/jdk1.7 dest=/usr/java/jdk state=link owner=root"
lineinfle模块
ansible all -m lineinfile -a "dest=/etc/hosts line='10.10.31.181 db1'"
replace模块
ansible all -m replace -a "path=/etc/hosts regexp='^10.10' replace='10.12'"
主要应用在Linux操做系统上,根据实际运维须要咱们应用在Agent批量安装、用户批量开设、配置批量更新等方面。
使用最多的是Zabbix和Flume的Agent批量安装,特别是Zabbix使用Ansible工具特别方便,除了安装Agent以外,批量更改配置很是方便,如使用Zabbix服务器或代理服务器地址更换、自定义Key的新增调整等等。
在使用Ansible进行批量变动的时候,须要保证代码进行充分测试,虽然Ansible在使用上很是简单,但回退机制较弱。好比文件的批量更新,虽然能够进行备份,但没法将备份批量进行回退。
基础设施即代码的概念中最困难的一点是碎片服务器,因为存在大量的存量服务器,因此这个问题没法避免。这就须要企业内部使用Ansible的时候必定要将Ansible做为一种软件代码进行管理,创建开发测试发布机制,保证代码充分测试。在批量变动的时候寻找不一样类型的设备进行试点后再逐步推送。若是使用Ansible进行过一次推送后,碎片的问题基本就不是问题了,从此能够较为放心的反复更新。
除了批量变动以外,Ansible主要是实现基础软件的安装,好比mysql、oracle、jboss等等。在使用Ansible安装此类软件时将配置独立出来,这样能够根据用户需求获取不一样参数,以实现不一样配置的软件。
除了批量变动以外,Ansible主要是实现基础软件的安装,好比mysql、oracle、jboss等等。
在环境交付层面,因为Ansible是基于操做系统或是虚拟化云平台的,因此在裸机部署上并不适用。在虚拟化云平台上,经过Ansible基于OpenStack和VMWare的模块开设实例和虚机以及挂盘,完成虚机的下放后,再进行软件的安装。从Ansible的Playbook的设计上只须要将下放虚机挂盘操做做为一部分再集成前述的软件安装部分便可。下放虚机挂盘的操做也能够由自动化运维平台中集成各个虚拟化平台的命令完成。
最后呈现的形式由用户递交环境申请信息,标注须要什么配置的服务器、几台、须要安装什么样的软件。递交申请审批经过,由自动化平台自动运行部署后交付至用户。
利用Ansible的现成链接通道以及自带的facts模块,实现主机信息的自动发现和更新功能,并将这些信息按期更新至配置平台中,以辅助配置平台的数据准确性。因为Ansible的facts模块采集的信息有限,且基于Linux、HPUX以及Windows采集的内容也稍有不一样,因此仍是须要一些本地化的程序辅助。
Facts中能够采集的信息主要包含了主机的一些基础信息,如主机名、IP地址、网卡信息、CPU、MEM以及操做系统版本等信息。而从需求出发,咱们可能还关注基础软件的版本信息、文件系统以及用户的信息等等。因此须要根据需求定义一些程序以获取这些信息。
目前采用以下图,设计方法获取主机信息,根据需求编制Ansible的模块,好比获取用户的信息,定义新的模块,定义完成后即造成新的AnsibleAD-HOC命令,经过一段程序获取全部受控的主机的facts以及自定义的信息以后将其入库,并同步更新至CMDB库。运维人员本身就能够根据自身的需求去定义须要的信息,而且将其入库,无需专业的开发人员实施。
Ansible主要是应用的发布和变动,利用Ansible自己与Git结合的能力.
foreman是基于puppet的一个“加强工具”,主要可以帮到咱们运维狗的有:
1. 操做系统的部署
foreman提供了一个基于kickstart的部署工具,输入一台服务器的部署网卡的mac地址和hostname、ip等信息,就能自动的帮咱们部署完,而且,还能够生成一个部署iso,用于该服务器的从新部署。
2. puppet的节点管理(ENC)
原声的puppet管理节点分类以及节点和puppet类之间的映射靠文件描述,企业客户更但愿有一个直观的工具,foreman能够经过Web界面将节点分组,将类分组,而且构建二者的映射关系。
3. puppet的Web界面
有个Web老是比命令行要方便,foreman提供了一个还算的过去的web界面,用于节点管理、类管理、变量管理、配置管理、部署管理等功能。
如何利用foreman呢?
前面几个项目都是基于foreman进行扩展的,当时学习ruby,作需求分析,苦逼的用ruby实现功能,当时实现了自动化的安全检查、系统升级等功能。
后来客户需求愈来愈多,咱们以为不能局限于foreman的限制,就开始利用foreman的REST API实现功能的扩展,保证一个干净、原生的foreman。
foreman给咱们的一个很大帮助就是,他把全部的配置、fact结果、运行结果什么都放到了mysql数据库里,因此,咱们在作一些运行分析的时候,能够直接从数据库中获取数据进行分析便可。
foreman帮咱们搞定了节点管理、数据入库,剩下的就是你的想象力了。
fact就是puppet的一个组件,这个组件以一堆ruby脚本的形式存在在被管理服务器上,每次运行puppet命令的时候,都会先执行这一堆脚本,得到一堆变量=>值对,而后返回给服务器。
能够在一个安装了puppet的服务器上执行facter命令:
[root@fm-server ~]# facter
architecture => x86_64
augeasversion => 1.0.0
bios_release_date => 12/01/2006
bios_vendor => innotek GmbH
bios_version => VirtualBox
......
interfaces => eth0,lo
ipaddress => 192.168.56.30
ipaddress_eth0 => 192.168.56.30
ipaddress_lo => 127.0.0.1
is_virtual => true
kernel => Linux
kernelmajversion => 3.8
kernelrelease => 3.8.13-44.1.1.el6uek.x86_64
kernelversion => 3.8.13
具体脚本的位置在:/usr/lib/ruby/site_ruby/1.8/facter/ 这个目录中,有兴趣的同窗能够本身看看。
系统默认了将近100个fact变量,实际上咱们也能够本身扩展本身须要的fact变量,扩展fact有4种方法:
1. 直接在/usr/lib/ruby/site_ruby/1.8/facter/目录中本身写一个fact脚本,看看其余的怎么写的,比划着写就好了
2. 本身随便找个目录,把你本身的ruby脚本放到哪一个目录中,而后定义变量:export FACTERLIB=/mypuppet/myfact/,脚本写法同上
3. fact支持外部fact,这个定义写在了/usr/lib/ruby/site_ruby/1.8/facter/util/config.rb文件中:
@external_facts_dirs = ["/opt/puppetlabs/facter/facts.d",
"/etc/facter/facts.d",
"/etc/puppetlabs/facter/facts.d"]
把你的fact定义放到那些目录中(可能须要本身建立),fact定义支持txt、yaml、json、sh四种方式,我比较喜欢用sh:
[root@fm-server ~]# mkdir -p /etc/facter/facts.d
[root@fm-server ~]# cd /etc/facter/facts.d/
[root@fm-server facts.d]# vi test.sh
#!/bin/bash
echo "testfact=Test"
[root@fm-server facts.d]# chmod 755 test.sh
[root@fm-server facts.d]# facter |grep test
testfact => Test
4. 用pluginsync发布,这个方法我用的不多,由于太麻烦了,我是极简主义者
对于自定义facter,你们能够参考
https://docs.puppetlabs.com/facter/3.1/fact_overview.html
找到了这个机制,咱们如何利用facter呢? 一般来讲,有2个用法:
1. 使用fact变量来实现配置的自动调节
例如apache服务器,但愿按照cpu的核数调整并发的进程数
fact变量中有一个:
[root@fm-server ~]# facter |grep process
physicalprocessorcount => 1
processor0 => Intel(R) Core(TM) i5-5257U CPU @ 2.70GHz
processorcount => 1
processors => {"physicalcount"=>1, "count"=>1, "models"=>["Intel(R) Core(TM) i5-5257U CPU @ 2.70GHz"]}
就能够在apache的puppet类中写:
<IfModule prefork.c>
StartServers <%= @processorcount.to_i*12 %>
这样不一样的服务器的apache的启动进程就不一样了
2. 利用fact收集想收集的信息
这个在自定义配置中已经讲了方法,反正是shell脚本,你想干啥就干啥,
foreman会把fact入库,你能够很方便的经过api或者直接访问数据库来得到你想要的数据。
您只须要将 Ansible 安装在一台服务器,在 Ansible 安装完后,您就能够去管理控制其它服务器。不须要为它配置数据库,Ansible 不会以 daemons 方式来启动或保持运行状态。Ansible 能够实现如下目标:
自动化部署应用
自动化管理配置
自动化的持续交付
自动化的(AWS)云服务管理。
Linux中的官方源、镜像源汇总。:https://mp.weixin.qq.com/s?__biz=MzU5NDU0NTY4NQ==&mid=2247483940&idx=1&sn=7f3527d0e5004dcf7b0ee82cf38073ff&scene=21#wechat_redirect
根据 Ansible 官方提供的信息,当前使用 Ansible 的用户有:evernote、rackspace、NASA、Atlassian、twitter 等。
另外一个centOS 的安装:https://my.oschina.net/kangvcar/blog/1830155
Ansible是由控制机和被管理机组成:控制机是用来安装Ansible工具软件和执行指令的服务器,被管理机是指运行业务的服务器,由控制机经过SSH进行管理。
Ansible是一个模型驱动管理器,支持多节点发布,远程任务执行,默认使用SSH远程链接,无需在被管理节点上安装附加软件。
Ansible集合了许多运维工具,实现了批量系统配置、批量程序部署,批量运行命令等功能,Ansible是基于模块工做的,自己没有批量部署的能力,真正干活的Ansible所运行的模块,Ansible只提供一种框架。
应用代码自动化部署;
系统管理配置自动化;
支持云计算、大数据平台;
轻量级无需安装agent;
批量任务执行可用脚本无需分发到远程;
支持非root用户和sudo;
Ansible系统由控制主机对被管节点的操做方式可分为两类(ad-hoc)和(playbook)
ad-hoc支持单个模块,支持批量执行单条命令;
playbook经过多个task集合完成一类功能,能够理解为经过组合多条ad-hoc操做的配置文件;
Ansible的安装方式很是灵活,知足各类环境的部署需求。
一、YUM安装
安装epel做为Ansible的默认yum源
#以CentOS7.2安装阿里的epel为例 rpm -Uvh https://mirrors.aliyun.com/epel/7/x86_64/Packages/e/epel-release-7-11.noarch.rpm
其余源可参考:
安装Ansible
yum install -y ansible
二、Ansible配置参数
配置文件在:/etc/ansible/ansible.cfg
参考:http://www.ansible.com.cn/docs/intro_configuration.html#config-values-by-section
inventory
这个参数表示资源清单 . inventory文 件 的 位 置 , 资源清单就是 一些Ansible须要链接管理的主机列表 。
实例以下:
inventory == /etc/Ansible/hosts
library
Ansible的操做动做,不管是本地或远程,都使用一小段代码来执行,这小段代码称为模块 , 这个library参数就是指向存放Ansible模块的 目录 。
实例以下:
library = /usr/share/Ansible
Ansible支持多个记录方式,只要用W号(:)隔幵就能够,同时也会检査当前执行playbook位罝下的•/library目录。
forks
默认悄况下Ansible最多能有多少个进程同时丁-做,默认设置敁多5个 进程并进行理 。 具体须要设置多少个,能够根据控制主机的性能和被管节点的数诂来肯定,多是50或100,默认值5是很是保守的设置。
实例以下:
forks = 5
sudo_user
这是设罝默认执行命令的用户,也能够在playbook中从新设置这个参数。
实例以下:
sudo_user = root
remote_port
这是指定链接被管节点的管理端口,默认是22。除非设置了特殊的SSH端门.否则这个参数通常是不须要修改的。
实例以下:
remote_port = 22
host_key_checking
这是设置是否检査SSH主机的密钥。能够设置为True或False。
实例以下:
host_key_checking = False
timeout
这是设置SSH链接的超时间隔,单位是秒。
实例以下:
timeout = 60
log_path
Ansible系统默认是不记录日志的,若是想把Ansible系统的输出记录 到日志文件,须要设置log_ path指定一个存储Ansible日志的文件 。
实例以下:
log__path = /var/log/Ansible. log
注意:
执行Ansible的用户须要有写入日志的权限,模块将会调用被管节点的syslog来记录,口令是不会出如今日志中的。
一、yum源安装
以centos为例,默认在源里没有ansible,不过在fedora epel源里有ansible,配置完epel 源后,能够直接经过yum 进行安装。这里以centos6.8为例:
# yum install http://mirrors.sohu.com/fedora-epel/6/x86_64/epel-release-6-8.noarch.rpm # yum install ansible
二、apt-get安装
在ubuntu及其衍生版中,能够经过增长ppa源进行apt-get安装,具体以下:
$ sudo apt-get install software-properties-common $ sudo apt-add-repository ppa:ansible/ansible $ sudo apt-get update $ sudo apt-get install ansible
源码安装须要python2.6以上版本,其依赖模块paramiko、PyYAML、Jinja二、httplib二、simplejson、pycrypto模块,以上模块能够经过pip或easy_install 进行安装,不过本部分既然提到的是源码安装,主要针对的没法上外网的状况下,能够经过pypi 站点搜索以上包,下载后经过python setup.py install 进行安装。
最后经过github或pypi上下载ansible源码包,经过python setup.py install 安装便可。因为安装过程相对简单,这里略过,主要介绍安装后,可能遇到的问题。
a、安装PyYAML时,报错以下:
# python setup.py install libyaml is not found or a compiler error: forcing --without-libyaml (if libyaml is installed correctly, you may need to specify the option --include-dirs or uncomment and modify the parameter include_dirs in setup.cfg) running install_lib running install_egg_info Removing /usr/lib64/python2.6/site-packages/PyYAML-3.11-py2.6.egg-info Writing /usr/lib64/python2.6/site-packages/PyYAML-3.11-py2.6.egg-info
在centos6.8系统中,能够经过yum -y install libyaml 包解决,或者从ISO文件中提供该包,经过rpm -ivh进行安装。
b、安装完ansible是,报错以下:
[root@localhost ansible-1.9.1]# ansible -h Traceback (most recent call last): File "/usr/local/src/ansible-devel/bin/ansible", line 36, in from ansible.runner import Runner File "/usr/local/src/ansible-devel/lib/ansible/runner/__init__.py", line 62, in from Crypto.Random import atfork File "/usr/lib64/python2.6/site-packages/Crypto/Random/__init__.py", line 29, in from Crypto.Random import _UserFriendlyRNG File "/usr/lib64/python2.6/site-packages/Crypto/Random/_UserFriendlyRNG.py", line 38, in from Crypto.Random.Fortuna import FortunaAccumulator File "/usr/lib64/python2.6/site-packages/Crypto/Random/Fortuna/FortunaAccumulator.py", line 39, in import FortunaGenerator File "/usr/lib64/python2.6/site-packages/Crypto/Random/Fortuna/FortunaGenerator.py", line 34, in from Crypto.Util.number import ceil_shift, exact_log2, exact_div File "/usr/lib64/python2.6/site-packages/Crypto/Util/number.py", line 56, in if _fastmath is not None and not _fastmath.HAVE_DECL_MPZ_POWM_SEC: AttributeError: 'module' object has no attribute 'HAVE_DECL_MPZ_POWM_SEC'
import paramiko包时,报错以下:
>>> import paramiko Traceback (most recent call last): File "", line 1, in File "/usr/lib/python2.6/site-packages/paramiko/__init__.py", line 69, in from transport import randpool, SecurityOptions, Transport File "/usr/lib/python2.6/site-packages/paramiko/transport.py", line 32, in from paramiko import util File "/usr/lib/python2.6/site-packages/paramiko/util.py", line 32, in from paramiko.common import * File "/usr/lib/python2.6/site-packages/paramiko/common.py", line 98, in from rng import StrongLockingRandomPool File "/usr/lib/python2.6/site-packages/paramiko/rng.py", line 22, in from Crypto.Util.randpool import RandomPool as _RandomPool File "/usr/lib64/python2.6/site-packages/Crypto/Util/randpool.py", line 30, in import Crypto.Random File "/usr/lib64/python2.6/site-packages/Crypto/Random/__init__.py", line 29, in from Crypto.Random import _UserFriendlyRNG File "/usr/lib64/python2.6/site-packages/Crypto/Random/_UserFriendlyRNG.py", line 38, in from Crypto.Random.Fortuna import FortunaAccumulator File "/usr/lib64/python2.6/site-packages/Crypto/Random/Fortuna/FortunaAccumulator.py", line 39, in import FortunaGenerator File "/usr/lib64/python2.6/site-packages/Crypto/Random/Fortuna/FortunaGenerator.py", line 34, in from Crypto.Util.number import ceil_shift, exact_log2, exact_div File "/usr/lib64/python2.6/site-packages/Crypto/Util/number.py", line 56, in if _fastmath is not None and not _fastmath.HAVE_DECL_MPZ_POWM_SEC: AttributeError: 'module' object has no attribute 'HAVE_DECL_MPZ_POWM_SEC'
经网上查找,确认为pycrypto包安装时依赖的GMP版本不对的问题,具体能够经过如下步骤验证:
[root@localhost pycrypto-2.6.1]# python setup.py build running build running build_py running build_ext running build_configure warning: GMP or MPIR library not found; Not building Crypto.PublicKey._fastmath.
解决方法:
打开 /usr/lib64/python2.6/site-packages/Crypto/Util/number.py 文件,能够 看到 56 行上的注释说明,要求 libgmp 为 v5 以上版本。而系统现有版本为 4.1.4,把如下两行暂时注释掉,Ansible 执行正常。
if _fastmath is not None and not _fastmath.HAVE_DECL_MPZ_POWM_SEC: _warn("Not using mpz_powm_sec. You should rebuild using libgmp >= 5 to avoid timing attack vulnerability.", PowmInsecureWarning)
不过,此方法只是临时加以解决,更好的方式是去将 libgmp 升级到符合要求的版本。
c、执行时报错
[root@localhost src]# ansible test -m raw -a 'uptime' 10.212.52.14 | FAILED => to use the 'ssh' connection type with passwords, you must install the sshpass program 10.212.52.16 | FAILED => to use the 'ssh' connection type with passwords, you must install the sshpass program
安装sshpass程序。默认源里没有,我这里选择直接从sohu源里下载安装。
这里以pypi上下载的源码内有一个examles包,能够将使用该示例文件作为默认配置,具体以下:
[root@localhost ansible-1.9.1]# mkdir -p /etc/ansible [root@localhost ansible-1.9.1]# cp -rp examples/* /etc/ansible/ [root@localhost ansible-1.9.1]# cd /etc/ansible/
使用默认示例配置文件后,编辑/etc/ansible/hosts文件,经过如下方式验证ansible是否可用:
[root@localhost .com ~]# cat /etc/ansible/hosts [test] 10.212.52.252 ansible_ssh_user=root ansible_ssh_pass=361way.com 10.212.52.14 ansible_ssh_user=root ansible_ssh_pass=abc123 10.212.52.16 ansible_ssh_user=root ansible_ssh_pass=91it.org
以上的配置中,我配置了一个test组,该组下有三台主机,三台都使用root验证,三台的密码分别是361way.com、abc12三、91it.org 。
注:后面的用户和密码项是非必须的,在配置key认证的状况下,不使用密码也能够直接操做 。未使用key的,也能够在ansible经过 -k参数在操做前询问手动输入密码。
[root@localhost ~]# ansible test -a 'uptime' 10.212.52.252 | success | rc=0 >> 18:01pm up 21 days 3:24, 3 users, load average: 0.39, 0.38, 0.35 10.212.52.16 | success | rc=0 >> 18:09pm up 329 days 1:01, 2 users, load average: 0.08, 0.03, 0.05 10.212.52.14 | success | rc=0 >> 18:08pm up 329 days 0:23, 2 users, load average: 0.06, 0.06, 0.05
执行以上指令后,有结果输出,证实安装成功。
测试主机是不是通的,用法很简单,不涉及参数:
[root@localhost ~]# ansible 10.212.52.252 -m ping 10.212.52.252 | success >> { "changed": false, "ping": "pong" }
setup模块,主要用于获取主机信息,在playbooks里常常会用到的一个参数gather_facts就与该模块相关。setup模块下常用的一个参数是filter参数,具体使用示例以下(因为输出结果较多,这里只列命令不写结果):
[root@localhost ~]# ansible 10.212.52.252 -m setup -a 'filter=ansible_*_mb' //查看主机内存信息 [root@localhost ~]# ansible 10.212.52.252 -m setup -a 'filter=ansible_eth[0-2]' //查看地接口为eth0-2的网卡信息 [root@localhost ~]# ansible all -m setup --tree /tmp/facts //将全部主机的信息输入到/tmp/facts目录下,每台主机的信息输入到主机名文件中 (/etc/ansible/hosts里的主机名)
file模块主要用于远程主机上的文件操做,file模块包含以下选项:
force:须要在两种状况下强制建立软连接,一种是源文件不存在但以后会创建的状况下;另外一种是目标软连接已存在,须要先取消以前的软链,而后建立新的软链,有两个选项:yes|no
group:定义文件/目录的属组
mode:定义文件/目录的权限
owner:定义文件/目录的属主
path:必选项,定义文件/目录的路径
recurse:递归的设置文件的属性,只对目录有效
src:要被连接的源文件的路径,只应用于state=link的状况
dest:被连接到的路径,只应用于state=link的状况
state: directory:若是目录不存在,建立目录
file:即便文件不存在,也不会被建立
link:建立软连接
hard:建立硬连接
touch:若是文件不存在,则会建立一个新的文件,若是文件或目录已存在,则更新其最后修改时间
absent:删除目录、文件或者取消连接文件
使用示例:
ansible test -m file -a "src=/etc/fstab dest=/tmp/fstab state=link" ansible test -m file -a "path=/tmp/fstab state=absent" ansible test -m file -a "path=/tmp/test state=touch"
复制文件到远程主机,copy模块包含以下选项:
backup:在覆盖以前将原文件备份,备份文件包含时间信息。有两个选项:yes|no
content:用于替代"src",能够直接设定指定文件的值
dest:必选项。要将源文件复制到的远程主机的绝对路径,若是源文件是一个目录,那么该路径也必须是个目录
directory_mode:递归的设定目录的权限,默认为系统默认权限
force:若是目标主机包含该文件,但内容不一样,若是设置为yes,则强制覆盖,若是为no,则只有当目标主机的目标位置不存在该文件时,才复制。默认为yes
others:全部的file模块里的选项均可以在这里使用
src:要复制到远程主机的文件在本地的地址,能够是绝对路径,也能够是相对路径。若是路径是一个目录,它将递归复制。在这种状况下,若是路径使用"/"来结尾,则只复制目录里的内容,若是没有使用"/"来结尾,则包含目录在内的整个内容所有复制,相似于rsync。
validate :The validation command to run before copying into place. The path to the file to validate is passed in via '%s' which must be present as in the visudo example below.
示例以下:
ansible test -m copy -a "src=/srv/myfiles/foo.conf dest=/etc/foo.conf owner=foo group=foo mode=0644" ansible test -m copy -a "src=/mine/ntp.conf dest=/etc/ntp.conf owner=root group=root mode=644 backup=yes" ansible test -m copy -a "src=/mine/sudoers dest=/etc/sudoers validate='visudo -cf %s'"
用于管理服务
该模块包含以下选项:
arguments:给命令行提供一些选项
enabled:是否开机启动 yes|no
name:必选项,服务名称
pattern:定义一个模式,若是经过status指令来查看服务的状态时,没有响应,就会经过ps指令在进程中根据该模式进行查找,若是匹配到,则认为该服务依然在运行
runlevel:运行级别
sleep:若是执行了restarted,在则stop和start之间沉睡几秒钟
state:对当前服务执行启动,中止、重启、从新加载等操做(started,stopped,restarted,reloaded)
使用示例:
# Example action to reload service httpd, in all cases - service: name=httpd state=reloaded # Example action to enable service httpd, and not touch the running state - service: name=httpd enabled=yes # Example action to start service foo, based on running process /usr/bin/foo - service: name=foo pattern=/usr/bin/foo state=started # Example action to restart network service for interface eth0 - service: name=network state=restarted args=eth0
用于管理计划任务
包含以下选项:
backup:对远程主机上的原任务计划内容修改以前作备份
cron_file:若是指定该选项,则用该文件替换远程主机上的cron.d目录下的用户的任务计划
day:日(1-31,,/2,……)
hour:小时(0-23,,/2,……)
minute:分钟(0-59,,/2,……)
month:月(1-12,,/2,……)
weekday:周(0-7,*,……)
job:要执行的任务,依赖于state=present
name:该任务的描述
special_time:指定何时执行,参数: reboot,yearly,annually,monthly,weekly,daily,hourly
state:确认该任务计划是建立仍是删除
user:以哪一个用户的身份执行
示例:
ansible test -m cron -a 'name="a job for reboot" special_time=reboot job="/some/job.sh"' ansible test -m cron -a 'name="yum autoupdate" weekday="2" minute=0 hour=12 user="root ansible 10.212.52.252 -m cron -a 'backup="True" name="test" minute="0" hour="2" job="ls -alh > /dev/null"' ansilbe test -m cron -a 'cron_file=ansible_yum-autoupdate state=absent'
使用yum包管理器来管理软件包,其选项有:
config_file:yum的配置文件
disable_gpg_check:关闭gpg_check
disablerepo:不启用某个源
enablerepo:启用某个源
name:要进行操做的软件包的名字,也能够传递一个url或者一个本地的rpm包的路径
state:状态(present,absent,latest)
示例以下:
ansible test -m yum -a 'name=httpd state=latest' ansible test -m yum -a 'name="@Development tools" state=present' ansible test -m yum -a 'name=http://nginx.org/packages/centos/6/noarch/RPMS/ nginx-release-centos-6-0.el6.ngx.noarch.rpm state=present'
user模块是请求的是useradd, userdel, usermod三个指令,goup模块请求的是groupadd, groupdel, groupmod 三个指令,具体参数这里再也不细讲,直接上示例。
一、user模块示例:
- user: name=johnd comment="John Doe" uid=1040 group=admin - user: name=james shell=/bin/bash groups=admins,developers append=yes - user: name=johnd state=absent remove=yes - user: name=james18 shell=/bin/zsh groups=developers expires=1422403387 #生成密钥时,只会生成公钥文件和私钥文件,和直接使用ssh-keygen指令效果相同, 不会生成authorized_keys文件。 - user: name=test generate_ssh_key=yes ssh_key_bits=2048 ssh_key_file=.ssh/id_rsa
注:指定password参数时,不能使用后面这一串密码会被直接传送到被管理主机的/etc/shadow文件中,因此须要先将密码字符串进行加密处理。而后将获得的字符串放到password中便可。
[root@localhost ~]# openssl passwd -1 -salt $(< /dev/urandom tr -dc '[:alnum:]' | head -c 32) Password: $1$YngB4z8s$atSVltYKnDxJmWZ3s.4/80 或者 [root@localhost ~]# echo "123456" | openssl passwd -1 -salt $(< /dev/urandom tr -dc '[:alnum:]' | head -c 32) -stdin $1$4P4PlFuE$ur9ObJiT5iHNrb9QnjaIB0 #经验证下面生成的密码串也能够正常使用,不过与/etc/shadow的格式不统一,不建议使用 [root@localhost ~]# openssl passwd -salt -1 "123456" -1yEWqqJQLC66 #使用上面的密码建立用户 [root@localhost ~]#ansible all -m user -a 'name=foo password="$1$4P4PlFuE$ur9ObJiT5iHNrb9QnjaIB0"'
不一样的发行版默认使用的加密方式可能会有区别,具体能够查看/etc/login.defs文件确认,centos 6.5版本使用的是SHA512加密算法,生成密码能够经过ansible官方给出的示例:
python -c "from passlib.hash import sha512_crypt; import getpass; print sha512_crypt.encrypt (getpass.getpass())"
二、group示例
- group: name=somegroup state=present
使用rsync同步文件,其参数以下:
archive: 归档,至关于同时开启recursive(递归)、links、perms、times、owner、group、-D选项都为yes ,默认该项为开启
checksum: 跳过检测sum值,默认关闭
compress:是否开启压缩
copy_links:复制连接文件,默认为no ,注意后面还有一个links参数
delete: 删除不存在的文件,默认no
dest:目录路径
dest_port:默认目录主机上的端口 ,默认是22,走的ssh协议
dirs:传速目录不进行递归,默认为no,即进行目录递归
rsync_opts:rsync参数部分
set_remote_user:主要用于/etc/ansible/hosts中定义或默认使用的用户-与rsync使用的用户不一样的状况
mode: push或pull 模块,push模的话,通常用于从本机向远程主机上传文件,
pull 模式用于从远程主机上取文件
另外还有其余参数,这里再也不一一说明。上几个用法:
src=some/relative/path dest=/some/absolute/path rsync_path="sudo rsync" src=some/relative/path dest=/some/absolute/path archive=no links=yes src=some/relative/path dest=/some/absolute/path checksum=yes times=no src=/tmp/helloworld dest=/var/www/helloword rsync_opts=--no-motd,--exclude=.git mode=pull
配置挂载点
选项:
dump
fstype:必选项,挂载文件的类型
name:必选项,挂载点
opts:传递给mount命令的参数
src:必选项,要挂载的文件
state:必选项present:只处理fstab中的配置
absent:删除挂载点
mounted:自动建立挂载点并挂载之'
umounted:卸载
示例:
name=/mnt/dvd src=/dev/sr0 fstype=iso9660 opts=ro state=present name=/srv/disk src='LABEL=SOME_LABEL' state=present name=/home src='UUID=b3e48f45-f933-4c8e-a700-22a159ec9077' opts=noatime state=present ansible test -a 'dd if=/dev/zero of=/disk.img bs=4k count=1024' ansible test -a 'losetup /dev/loop0 /disk.img' ansible test -m filesystem 'fstype=ext4 force=yes opts=-F dev=/dev/loop0' ansible test -m mount 'name=/mnt src=/dev/loop0 fstype=ext4 state=mounted opts=rw'
该模块主要用于从http、ftp、https服务器上下载文件(相似于wget),主要有以下选项:
sha256sum:下载完成后进行sha256 check;
timeout:下载超时时间,默认10s
url:下载的URL
url_password、url_username:主要用于须要用户名密码进行验证的状况
use_proxy:是事使用代理,代理需事先在环境变动中定义
示例:
- name: download foo.conf get_url: url=http://example.com/path/file.conf dest=/etc/foo.conf mode=0440 - name: download file with sha256 check get_url: url=http://example.com/path/file.conf dest=/etc/foo.conf sha256sum=b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c
模块部分就先介绍到这里吧,官方提供的可能用到模块有git、svn版本控制模块,sysctl 、authorized_key_module系统模块,apt、zypper、pip、gem包管理模块,find、template文件模块,mysql_db、redis数据库模块,url 网络模块等。具体能够参看官方手册模块部分;
ansible主要文件
(/etc/ansible/ansible.cfg)
ansible主配置文件。
(/etc/ansible/hosts)
主机清单,保存管理的主机信息。
(/etc/ansible/roles)
公共角色,主要在自动化部署多台主机时应用。
ansible命令集
ansible
定义并运行简单任务。
ansible-config
查看、编辑、管理ansible配置。
ansible-doc
文档查看工具。
ansible-galaxy
共享和下载roles的工具。
ansible-inventory
查看inventory的信息。
ansible-playbook
执行playbook。
ansible-pull
从仓库中拉去playbook。
ansible-vault
文件加密工具。
ansible-console
repl控制台执行ansible任务。
配置SSH免秘钥访问
为了不ansible每次下发指令都要输入目标主机密码,因此这里使用(ssh-keygen)在控制主机建立一对秘钥,使用(ssh-copy-id)来下发生成的公钥。
[root@master ~]# ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): (回车) Created directory '/root/.ssh'. Enter passphrase (empty for no passphrase):(回车) Enter same passphrase again:(回车) 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: e8:2b:a7:a2:6b:19:87:0b:b5:4e:fc:46:5b:9e:3d:7b root@master The key's randomart image is: +--[ RSA 2048]----+ | . . | | o.. . S | |.o+.... | |.o=o +.o | | +o = +.o E | |+o o.+. .+ | +-----------------+
在/root/.ssh/下生产一对秘钥,其中(id_rsa)为私钥,(id_rsa.pub)为公钥.
[root@master ~]# tree /root/.ssh/ /root/.ssh/ ├── id_rsa └── id_rsa.pub
控制主机把公钥(id_rsa.pub)下发到被管节点上用户下的.ssh目录,并重命名为authorized_key,权限制为400,这里使用秘钥拷贝工具(ssh-copy-id)把公钥文件(id_rsa.pub)拷贝到被管节点。
[root@master ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.1.111 The authenticity of host '192.168.1.111 (192.168.1.111)' can't be established. ECDSA key fingerprint is 75:5c:83:a1:b4:cc:bf:28:71:a5:d5:d1:94:35:3c:9a. Are you sure you want to continue connecting (yes/no)? yes /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: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys root@192.168.1.111's password: Number of key(s) added: 1 Now try logging into the machine, with: "ssh 'root@192.168.1.111'" and check to make sure that only the key(s) you wanted were added.
公钥分发后,须要验证SSH无密码登陆,以下为成功。
[root@master ~]# ssh root@192.168.1.111 Last login: Wed Jul 17 23:13:35 2018 from master [root@slave ~]#
若是有多台节点分发公钥和上面同样,或者写一个简单的脚本分发。
主机连通性测试
[root@master ~]# cat >>/etc/ansible/hosts <<EOF > [cluster_host] > 192.168.1.111 > EOF [root@master ~]# ansible cluster_host -m command -a 'uptime' 192.168.1.111 | SUCCESS | rc=0 >> 09:58:17 up 1:03, 2 users, load average: 0.01, 0.04, 0.05
经常使用模块解析
查询某个模块请执行:(ansible-doc -s 模块名)
查询更多模块请执行:(ansible-doc -l)
(setup)模块
#查看目标主机的一些信息
示例:
[root@master ~]# ansible cluster_host -m setup 192.168.1.111 | SUCCESS => { "ansible_facts": { "ansible_all_ipv4_addresses": [ "172.16.1.15", "192.168.1.111" ], "ansible_all_ipv6_addresses": [ "fe80::20c:29ff:fe91:ce86", "fe80::20c:29ff:fe91:ce7c" ], "ansible_apparmor": { "status": "disabled" }
(ping)模块
#测试目标主机的运行状态
示例:
[root@master ~]# ansible cluster_host -m ping 192.168.1.111 | SUCCESS => { "changed": false, "ping": "pong" }
(file)模块
#对目标主机的文件进行操做
参数以下:
force
在两种状况下强制建立软连接
1.源文件不存在但以后会创建的状况下;
2.目标软链接已经存在,须要取消以前的软连接,而后建立洗的软链接,有两个选项:yes|no;
group
定义文件/目标的属组。
mode
定义文件/目录的权限。
owenr
定义文件/目录的属主。
path
必选项,定义文件/目录的路径。
recurse
递归的设置文件的属性,只对目录有效。
src
要被连接的源文件的路径,只应用于state=link的状况。
dest
被连接到的路径,只应用于state=link的状况。
file
即便文件不存在,也不会被建立。
link
建立软链接。
hard
建立硬连接。
touch
若是文件不存在,则会建立一个新的文件,若是文件或目录已存在,则更新其最后修改时间。
absent
删除目录、文件或者取消连接文件。
示例:
#建立远程文件符号连接 [root@master ~]# ansible cluster_host -m file -a "src=/etc/resolv.conf dest=/tmp/resolv.conf state=link" 192.168.1.111 | SUCCESS => { "changed": true, "dest": "/tmp/resolv.conf", "gid": 0, "group": "root", "mode": "0777", "owner": "root", "size": 16, "src": "/etc/resolv.conf", "state": "link", "uid": 0 } [root@master ~]# #远程文件信息查看 [root@master ~]# ansible cluster_host -m command -a "ls -la /tmp/resolv.conf" 192.168.1.111 | SUCCESS | rc=0 >> lrwxrwxrwx 1 root root 16 7月 18 10:21 /tmp/resolv.conf -> /etc/resolv.conf #删除远程文件符号连接 [root@master ~]# ansible cluster_host -m file -a "path=/tmp/resolv.conf state=absent" 192.168.1.111 | SUCCESS => { "changed": true, "path": "/tmp/resolv.conf", "state": "absent" } #远程文件信息查看 [root@master ~]# ansible cluster_host -m command -a "ls -la /tmp/resolv.conf" 192.168.1.111 | FAILED | rc=2 >> ls: 没法访问/tmp/resolv.conf: 没有那个文件或目录non-zero return code
(copy)模块
#进行远程复制
参数以下:
src
被复制到远程主机的本地对象文件或者文件夹,能够是绝对路径,也能够是相对路径。
dest
被复制到远程主机的本地对象文件或者文件夹。
mode
复制对象的设定权限。
backup
在文件存在的时候能够选择覆盖以前,将源文件备份.设定值:yes/no 缺省为yes。
force
是否强制覆盖.设定值:yes/no 缺省为no。
示例:
#将本地文件/etc/ansible/ansible.cfg复制到目标机器/tmp/ansible.cfg [root@master ~]# ansible cluster_host -m copy -a "src=/etc/ansible/ansible.cfg dest=/tmp/ansible.cfg owner=root group=root mode=0644" 192.168.1.111 | SUCCESS => { "changed": true, "checksum": "4cb7c9f51f91d0c5895c2ae5bca18b4904ed407e", "dest": "/tmp/ansible.cfg", "gid": 0, "group": "root", "md5sum": "1f7011f69060831cfcd3b04136c2be6a", "mode": "0644", "owner": "root", "size": 19549, "src": "/root/.ansible/tmp/ansible-tmp-1531881922.82-138288626316266/source", "state": "file", "uid": 0 } #查看目标主机的/tmp/ansible.cfg文件 [root@master ~]# ansible cluster_host -m command -a "ls -la /tmp/ansible.cfg" 192.168.1.111 | SUCCESS | rc=0 >> -rw-r--r-- 1 root root 19549 7月 18 10:45 /tmp/ansible.cfg [root@master ~]#
(command)模块
#在远程主机上执行命令
参数以下:
chdiiv
在执行命令以前,经过cd命令进入指定目录中。
creates
定义一个文件是否存在,若是不存在运行相应命令;若是存在跳过此步骤。
executable
改变shell使用command进行执行,而且执行时要使用绝对路径。
free_form
命令模块采用自由形式命令组合;便可以输入任意linux命令。
removes
定义一^文件是否存在,若是存在运行相应命令;若是不存在跳过此步骤。
warn
若是ansible配置文件中定义了命令警告,若是参数设置了no/false将不会警告此行命令。
示例:
[root@master ~]# ansible cluster_host -m command -a "pwd" 192.168.1.111 | SUCCESS | rc=0 >> /root [root@master ~]# ansible cluster_host -m command -a "who" 192.168.1.111 | SUCCESS | rc=0 >> root pts/0 2018-07-18 09:13 (10.0.0.1) root pts/1 2018-07-18 10:58 (10.0.0.5)
(shell)模块
#切换到某个shell执行指定命令,参数与command模块相同
示例:
#本地建立一个shell脚本 [root@master ~]# vim /tmp/test.sh #!/bin/bash date +%F_%H.%M.%S :wq [root@master ~]# chmod +x /tmp/test.sh #将建立的脚本分发到目标主机 [root@master ~]# ansible cluster_host -m copy -a "src=/tmp/test.sh dest=/tmp/test.sh owner=root group=root mode=0755" 7192.168.1.111 | SUCCESS => { "changed": true, "checksum": "eccafd201f4a61757facc4a34e67e955b4f8a03f", "dest": "/tmp/test.sh", "gid": 0, "group": "root", "md5sum": "f027af9860d5c4548220b09bfa042b57", "mode": "0755", "owner": "root", "size": 30, "src": "/root/.ansible/tmp/ansible-tmp-1531883311.27-270962148668548/source", "state": "file", "uid": 0 } #目标主机执行 [root@master ~]# ansible cluster_host -m shell -a "/tmp/test.sh" 192.168.1.111 | SUCCESS | rc=0 >> 2018-07-18_11.09.31
更多模块
service
系统服务管理
cron
计划任务管理
yum
yum软件包安装管理
synchronize
使用rsync同步文件
user
系统用户管理
group
系统用户组管理
查询更多模块请执行:(ansible-doc -l)
template
module 来生成应用的配置,好比生成 Nginx 的配置或者 sudoers 配置。而像 sudoers 文件内的配置错误可能直接致使没法登陆。因此,咱们但愿在生成这些配置文件后能校验一下它的正确性。若是校验失败,直接中止,不生成该配置文件。而 template
module 有一个属性 validate
就是为了实现这一需求的:
- template: src: "user-sudoers" dest: "/etc/sudoers.d/abc" validate: visudo -cf %s
校验 Nginx 配置文件的文件:
- name: Copy the nginx file template: src: nginx.conf.j2 dest: /etc/nginx/nginx.conf validate: "/usr/sbin/nginx -t -c %s" notify: - restart nginx
校验 Prometheus 配置文件:
- name: Copy Prometheus config template: src: prometheus.yml.j2 dest: "/etc/prometheus.yml" validate: "promtool check config %s" notify: reload prometheus config
校验 Logstash 配置文件:
- name: template configs template: src: "logstash-filter.conf" dest: "/opt/logstash/conf" validate: "logstash -t -f %s" environment: JAVA_HOME: "" ## logstash 命令须要 JAVA_HOME 环境变量
在部署 Zookeeper 时,一般会部署 3 台组成集群,同时每台 Zookeeper 都须要在配置一个 myid 的文本文件,而这个文件中只放id。而 id 是要求每台机器都是不一样的。这时 host 变量派上用场了。定义 host 变量有两种方式:
[zk] 192.168.1.11 myid=1 192.168.1.12 myid=2 192.168.1.13 myid=3
这种方式笔者认为可维护性更高
├── group_vars ├── host_vars │ ├── 192.168.1.11 │ ├── 192.168.1.12 │ ├── 192.168.1.13 ├── hosts
#cat 192.168.1.11myid: 1
不推荐两种方式都使用,由于变量的做用域问题会把你搞晕
某个 shell 须要一个临时变量,可使用 environment 实现
- name: install | Build commons daemon. shell: "./configure && make chdir=/opt/pinpoint/" environment: - JAVA_HOME: ""
如下方式会生成:a,a,a,a,
注意最后的逗号咱们是不须要的:
{% for f in files %} a, {% endfor %}
这时,咱们能够这样:
{% for f in files %} a{%- if not loop.last -%},{% endif %} {% endfor %}
机器标准化要求每台机器的ssh链接方式及管理员用户名及密码都是同样的。可是事实中,面对老机器,经常作不过。因此,咱们的 Ansible 脚本必须能作到不一样的机器可使用不一样的链接方式、管理员用户名和密码。利用 host 变量就能够实现了。
举个例子,当前的文件内容以下:
├── group_vars ├── host_vars │ ├── 192.168.1.11 │ ├── 192.168.1.12 │ ├── 192.168.1.13 ├── hosts
#cat 192.168.1.11ansible_ssh_user: abcansible_become_method: sudoansible_ssh_private_key_file: /users/abc/id_rsa
#cat 192.168.1.12ansible_ssh_user: bcdansible_become_method: sudoansible_ssh_pass: 1234567
#cat 192.168.1.13ansible_ssh_user: bcdansible_become_method: suansible_ssh_private_key_file: /users/bcd/id_rsaansible_ssh_pass: 1234567
参考连接:
https://mp.weixin.qq.com/s/QCIXY4WFF15Coez4a6r53A
Ansible 自动化运维实践 : https://mp.weixin.qq.com/s/8p8CyIV0rAFYVw77Lf8gHA
Ansible 架构与工做原理 : https://mp.weixin.qq.com/s/fgeJZz6NYkciZy6O791rCA
企业级自动化运维方案设计及SaltStack、Ansible等5种工具比较分析 : https://mp.weixin.qq.com/s/m_rmvzJxrnIAtYLICIwsMw
连接:
11步极快速搭建:Ansible自动化运维体系在生产环境下实践 :https://mp.weixin.qq.com/s/6F6xmaE_9TYTxFylg4jMbQ
自动化运维工具Ansible详细部署 : https://www.cnblogs.com/gzxbkk/p/7515634.html
自动化工具——ansible : http://blog.51cto.com/cuchadanfan/1693889
ansible: 当参数定义时执行task : http://smileytechadventures.blogspot.com/2015/07/ansible-test-variable-defined-and-not.html
ansible-playbook : https://www.cnblogs.com/liang-wei/p/6030755.html
Ansible 中小企业高可用负载均衡部署方案:https://mp.weixin.qq.com/s/pC2wocr76STpHLsMWBjJnw
Ansible的部署实践:https://mp.weixin.qq.com/s/b2fyDGMMfbr-TNeik6YPhg
用Ansible部署ELK STACK :https://mp.weixin.qq.com/s/hnAv5lrAHR-IZesPeOvLGA
运维自动化之ansible playbook安装mysql tpcc测试OLTP能力 :https://mp.weixin.qq.com/s/nthTPyJ0JC5LYCqZBnEiOA
Ansible 实战与配置Nginx:https://mp.weixin.qq.com/s/pNMvjn6klKhz1g6lckBr4A
Ansible系列:https://www.iyunv.com/thread-542911-1-1.html
(易百教程) Ansible自动化运维教程 : https://www.w3cschool.cn/automate_with_ansible/
SaltStack实战之manage、salt-ssh和salt jobs : http://blog.51cto.com/ygqygq2/1940981
SaltStack实战之配置管理-Jinja2模板 : http://blog.51cto.com/ygqygq2/1937361
SaltStack实战之配置管理-状态间关系 : http://blog.51cto.com/ygqygq2/1937340
SaltStack实战之配置管理-LAMP自动化部署 : http://blog.51cto.com/ygqygq2/1936947
SaltStack实战之配置管理-YAML编写技巧 : http://blog.51cto.com/ygqygq2/1934755
SaltStack实战之远程执行-Returners : http://blog.51cto.com/ygqygq2/1933921
SaltStack实战之远程执行-Modules : http://blog.51cto.com/ygqygq2/1933917
SaltStack实战之远程执行-Targeting : http://blog.51cto.com/ygqygq2/1933470
SaltStack实战之数据系统 Grains VS Pillar : http://blog.51cto.com/ygqygq2/1933008
SaltStack实战之数据系统-Pillar : http://blog.51cto.com/ygqygq2/1933003
SaltStack实战之数据系统-Grains : http://blog.51cto.com/ygqygq2/1932998
SaltStack实战之SaltStack快速入门 : http://blog.51cto.com/ygqygq2/1932769
SaltStack之修改salt-minion id : http://blog.51cto.com/ygqygq2/1932694
Ansible 系列之 Playbooks 剧本 (1) : https://www.cnblogs.com/hanyifeng/p/6435875.html
Ansible 系列之 Ad-Hoc介绍及使用 : https://www.cnblogs.com/hanyifeng/p/6431450.html
自动化运维工具之 Ansible 介绍及安装使用 : https://www.cnblogs.com/hanyifeng/p/6110926.html
Ansible 安装配置及使用 : http://www.azureyun.com/ansible-%e5%ae%89%e8%a3%85%e9%85%8d%e7%bd%ae%e5%8f%8a%e4%bd%bf%e7%94%a8/
ansible 简单入门与使用 : http://blog.51cto.com/xiaoluoge/1753903
自动化运维工具——ansible详解(一) :https://www.cnblogs.com/keerya/p/7987886.html
自动化运维工具——ansible详解(二) : http://www.javashuo.com/article/p-nimxmsod-cc.html
Ansible详解(一) : http://blog.51cto.com/hmtk520/2058104
Ansible详解(二) : http://blog.51cto.com/hmtk520/2058175
Ansible详解(三) : http://blog.51cto.com/hmtk520/2058293
Ansible详解(一)基础安装和配置 : https://www.jianshu.com/p/686908012d99
Ansible 详解(二)Ad-Hoc : https://www.jianshu.com/p/7f9a4fad4faa
Ansible 详解(三):Playbooks : https://www.jianshu.com/p/df18142e0b90
Ansible 详解(四):Ansible-vault 和 Python api :https://www.jianshu.com/p/e9b8608245a2
自动化运 维之playbook : https://www.jianshu.com/p/07bd3a336a26
自动化运维之ansible : https://www.jianshu.com/p/d95414df5644
ansible自动化工具部署实例 荐 : http://blog.51cto.com/liangey/1625163
Ansible 中小企业高可用负载均衡部署方案 : https://mp.weixin.qq.com/s/pC2wocr76STpHLsMWBjJnw
Ansible 专题:http://www.jianshu.com/p/c56a88b103f8,
ansible总结 : https://www.jianshu.com/p/c82737b5485c
自动化运维工具Ansible之动态inventory文件 : http://blog.51cto.com/diannaowa/1683588
自动化运维工具Ansible之Python API : http://blog.51cto.com/diannaowa/1683455
自动化运维工具Ansible之Playbooks循环语句 : http://blog.51cto.com/diannaowa/1682061
自动化运维工具Ansible之Playbooks的when语句 : http://blog.51cto.com/diannaowa/1681885
自动化运维工具Ansible之Playbooks变量的使用 : http://blog.51cto.com/diannaowa/1680732
自动化运维工具Ansible之Playbooks的roles和include : http://blog.51cto.com/diannaowa/1679992
自动化运维工具Ansible之Playbooks基础应用 : http://blog.51cto.com/diannaowa/1679837
ansible组件 : http://blog.51cto.com/liangey/1883603
ansible安装 : http://blog.51cto.com/liangey/1883602
Ansible模块知多少 荐 : http://blog.51cto.com/nolinux/1607459
【Absible学习】Ansible经常使用模块---包管理模块 : http://blog.51cto.com/ityunwei2017/2133933
【Absible学习】Ansible经常使用模块---系统类模块 : http://blog.51cto.com/ityunwei2017/2133927
【Absible学习】Ansible经常使用模块---命令类模块 : http://blog.51cto.com/ityunwei2017/2133446
【Absible学习】Ansible经常使用模块---文件操做 : http://blog.51cto.com/ityunwei2017/2132627
【Absible学习】Ansible普通用户sudo执行指令 : http://blog.51cto.com/ityunwei2017/2131111
【Absible学习】Absible简介、安装 : http://blog.51cto.com/ityunwei2017/2130742
Ansible详解(一)基础安装和配置 : https://www.jianshu.com/p/686908012d99
Ansible 详解(二)Ad-Hoc : https://www.jianshu.com/p/7f9a4fad4faa
Ansible 详解(三):Playbooks : https://www.jianshu.com/p/df18142e0b90
Ansible 详解(四):Ansible-vault 和 Python api : https://www.jianshu.com/p/e9b8608245a2
Ansible 部署 Zabbix 客户端 : https://www.jianshu.com/p/a7352521e8a5
运维自动化之ansible playbook一键化安装redis主从 : http://blog.51cto.com/dl528888/1625280
运维自动化之ansible playbook安装mysql tpcc测试OLTP能力 荐 : http://blog.51cto.com/dl528888/1545032
运维自动化之ansible playbook结合docker安装redis主从 荐 : http://blog.51cto.com/dl528888/1539251
运维自动化之ansible playbook结合docker安装smokeping 荐 : http://blog.51cto.com/dl528888/1538444
运维自动化之ansible playbook安装ruby环境 荐 : http://blog.51cto.com/dl528888/1535724
运维自动化之ansible playbook安装mysql 荐 : http://blog.51cto.com/dl528888/1437882
运维自动化之ansible的安装与使用(包括模块与playbook使用) 荐 :http://blog.51cto.com/dl528888/1435415
运维自动化之ansible playbook安装node环境 : http://blog.51cto.com/dl528888/1535152
运维自动化之ansible playbook安装lamp环境 : http://blog.51cto.com/dl528888/1533086
运维自动化之ansible playbook安装apache : http://blog.51cto.com/dl528888/1531104
运维自动化之ansible playbook安装lnmp环境 荐 : http://blog.51cto.com/dl528888/1440775
运维自动化之ansible playbook安装nginx 荐 : http://blog.51cto.com/dl528888/1438847
运维自动化之ansible playbook安装zabbix客户端 荐 : http://blog.51cto.com/dl528888/1436745
ansible filter_plugins插件实现jinja2自定义filter过滤器 : http://blog.51cto.com/rfyiamcool/1440686
ansible自定义lookup_plugins插件实现playbook扩展 : http://blog.51cto.com/rfyiamcool/1441451
ansible调用callbacks插件实现结果nosql输出回调 荐 : http://blog.51cto.com/rfyiamcool/1440624
平台化之利用ansible api接口的async使任务异步 荐 : http://blog.51cto.com/rfyiamcool/1422263
探索ansible runner的源码及执行api原理 : http://blog.51cto.com/rfyiamcool/1420147
ansible经过cmdb资产接口动态建立hosts列表 荐 : http://blog.51cto.com/rfyiamcool/1416808
利用ansible modules模块来自定义集群管理 荐 : http://blog.51cto.com/rfyiamcool/1414417
关于ansible的playbook模板和facts的后续文档 荐 : http://blog.51cto.com/rfyiamcool/1413387
ansible的playbook配置及template模板的使用 : http://blog.51cto.com/rfyiamcool/1413031
以Chef和Ansible为例快速入门服务器配置 : https://mp.weixin.qq.com/s/PO9zCKGlUjrKEqFYFZaBAw
企业实战
运维自动化之ansible playbook一键化安装redis主从 :http://blog.51cto.com/dl528888/1625280
运维自动化之ansible playbook一键化解决大量主机bash更新问题 荐 :http://blog.51cto.com/dl528888/1558227
运维自动化之ansible playbook安装mysql tpcc测试OLTP能力 荐 : http://blog.51cto.com/dl528888/1545032
运维自动化之ansible playbook结合docker安装redis主从 荐 : http://blog.51cto.com/dl528888/1539251
运维自动化之ansible playbook结合docker安装smokeping 荐 : http://blog.51cto.com/dl528888/1538444
运维自动化之ansible playbook安装ruby环境 荐 : http://blog.51cto.com/dl528888/1535724
运维自动化之ansible playbook安装mysql 荐 : http://blog.51cto.com/dl528888/1437882
运维自动化之ansible的安装与使用(包括模块与playbook使用) 荐 : http://blog.51cto.com/dl528888/1435415
运维自动化之ansible playbook安装node环境 : http://blog.51cto.com/dl528888/1535152
运维自动化之ansible playbook安装lamp环境 : http://blog.51cto.com/dl528888/1533086
运维自动化之ansible playbook安装apache : http://blog.51cto.com/dl528888/1531104
运维自动化之ansible playbook安装lnmp环境 荐 : http://blog.51cto.com/dl528888/1440775
运维自动化之ansible playbook安装nginx 荐 : http://blog.51cto.com/dl528888/1438847
运维自动化之ansible playbook安装zabbix客户端 荐 : http://blog.51cto.com/dl528888/1436745
某银行数据中心自动化运维设计实施及Ansible应用探索 | 最佳实践:https://mp.weixin.qq.com/s/5EGVHImWwvjAa6jobXpBig
运维自动化之ansible playbook安装mysql tpcc测试OLTP能力 : https://mp.weixin.qq.com/s/nthTPyJ0JC5LYCqZBnEiOA
Ansible 实战与配置Nginx : https://mp.weixin.qq.com/s/pNMvjn6klKhz1g6lckBr4A
ansible :https://mp.weixin.qq.com/mp/homepage?__biz=MzI0ODAzNTMzMw==&hid=2&sn=f09228748403b97ca2133ffa7043c0ae&scene=1&devicetype=android-27&version=27000336&lang=zh_CN&nettype=WIFI&ascene=7&session_us=gh_383791c86de8&wx_header=1
Saltstack 集中化管理平台安装 :https://mp.weixin.qq.com/s/L2Lqv4xqPCOO0QGxTnSkSg
利用 Saltstack 远程执行命令 :https://mp.weixin.qq.com/s/63gV5O1bHnUeW_WoMObXfg
修改 salt-minion 的 ID 后报错解决方法 : https://mp.weixin.qq.com/s/87ENK6t6_6UtckY66DBGyg
Ansible 自动化运维体系在生产环境下实践(11步极快速搭建) : https://mp.weixin.qq.com/s/1Kz2qY50X3RjSxGnwtJFzQ
自动化运维利器 Ansible 和企业级 Ansible 应用解读 :https://mp.weixin.qq.com/s/rG-jkwKblYw9UVaAk7PLpQ
20分钟速通 ansible 自动化工具 : https://mp.weixin.qq.com/s/bl1NvxA-ls4C95prUume9g
Ansible企业级自动化运维探索之旅
http://www.talkwithtrend.com/Document/detail/tid/424177
Ansible自动化运维体系在生产环境下实践(11步极快速搭建)
http://www.talkwithtrend.com/Article/216569
Ansible 自动化运维实践 | 周末送资料 : https://mp.weixin.qq.com/s/tOYm4MNwCDRL4x5kUVce_w
极简教程|20 分钟玩转Ansible系列手册! :https://mp.weixin.qq.com/s/SyVm9QmioZfGuYP0Ryc9CQ
ansible 初体验2 : https://www.jianshu.com/p/2d817811fca9
看完这243张图片,轻松掌握 Ansible ! :https://mp.weixin.qq.com/s/LxpVtVC7dHigC_5g6hTMdg
使用Ansible实现自动化运维的一些技巧 : https://mp.weixin.qq.com/s/ASdNF5VurUm9zWncSJ78_Q
Ansible项目实战LNMP : https://www.linuxidc.com/Linux/2019-06/159055.htm |
ansible (22篇) : https://www.cnblogs.com/paul8339/tag/ansible/
ansible 系列 : https://www.cnblogs.com/paul8339/category/1025054.html
Ansible 初体验 : https://mp.weixin.qq.com/s/A5AkEHdq3YbT-b6eu-XPNQ
Ansible 系列之 Ad-Hoc : https://mp.weixin.qq.com/s/ucvffymOgRF5uBRZp20Hrw
Ansible 系列之命令模块 : https://mp.weixin.qq.com/s/DWTF-zS4k9-UPr1eVQkIIA
Ansible 系列之 file模块: https://mp.weixin.qq.com/s/VGbFh_tCl1qFvZvx7WfZWw
Ansible 系列之 copy 模块 : https://mp.weixin.qq.com/s/bjZbVRc4KykObXHPN7Gt8g
Ansible 进阶 | facts 缓存 : https://mp.weixin.qq.com/s/eryaLlCFGzBjZs_ynqcmqw