⑴ Ansible安装配置和基本使用
http://www.tuicool.com/wx/vUfYVfA 一、ansible 安装 ansible 依赖于python2.6或更高的版本、paramiko、PyYAML及Jinja2。 https://www.python.org/ftp/python/2.7.8/Python-2.7.8.tgz 将python头文件拷贝到标准目录,以避免编译ansible时,找不到所需的头文件 备份旧版本的python,并符号链接新版本的python 修改yum脚本,使其指向旧版本的python,已避免其无法运行 1.1 编译安装 解决依赖关系 解压安装包 https://github.com/ansible/ansible/archive/v1.7.2.tar.gz 编译安装 拷贝配置文件 1.2 rpm包安装 使用阿里云镜像源即可,这里为了方便使用,就直接使用yum安装了。 Fedora 用户可直接安装Ansible, 但RHEL或CentOS用户,需要 配置 EPEL # yum install -y epel-release # yum install -y ansible 注意:不同版本的ansible的功能差异可能较大。 二、配置 配置文件:/etc/ansible/ansible.cfg hostfile=/etc/ansible/hosts #指定默认hosts配置的位置 host_key_checking = False #不进行host_key检查,省去目标key发生变化时输入(yes/no)的步骤 ask_pass=True # 每次执行ansible命令是否询问ssh密码 ask_sudo_pass=True # 每次执行ansible命令时是否询问sudo密码 主机清单:/etc/ansible/hosts 主程序:ansible、ansible paly-book、ansible-doc 1、将要管理的主机纳入 /etc/ansible/hosts配置文件中,可以填写IP或是主机名 [WebServers] 10.10.10.3 10.10.10.4 2、.基于ssh的方式与被管理的主机进行通信,在管理的主机上(部署ansible的主机上)生成一对非对称密钥,将公钥发给被管理的主机。 a,生成密钥对:ssh-keygen -t rsa b,将密钥发放到要管理的主机:ssh–id -i 10.10.10.3 或 ssh–id -i /root/.ssh/id_rsa.pub [email protected] 3、使用ansible命令测试 [[email protected] yum.repos.d]# ansible all -m ping 10.10.10.4 | SUCCESS => { "changed": false, "ping": "pong" } 三、基本使用 1、常用命令 ansible-doc 命令:获取模块列表、模块使用格式。 ansible-doc -l :获取列表 ansible-doc -s mole_name:获取指定模块信息 2、ansible 命令格式 ansible <host-pattern> [-f forks] [-m mole_name] [-a args] <host-pattern> 指明管控主机,以模式表示或者直接指定ip,必须事先指定在文件中;all所有 [-f forks] 指明每批管控多少主机,默认是5个主机一批次 [-m mole_name] 使用何种模块操作,所有操作都需要通过模块指定 [-a args] 指明模块专用参数;args 一般是 key=value格式。注:command模块的参数不是kv模式,而是直接给出要执行的命令。 注意:<host-pattern> 默认读取/etc/ansible/hosts,也可以指明自定义文件路径 -iPATH,–inventory=PATH:指明使用的 host inventory文件路径; 3、常用模块介绍 1、command模块:远程主机上运行命令 例:ansible hosts -m command -a "ls /tmp" 注:command模块也可以省略。 给远程主机添加用户、设置密码: ansible hosts -a 'useradd user1' ansible hosts -a 'echo abc | passwd –stdin user1' 2、shell模块:远程主机在shell进程下运行命令,支持shell特性,也支持管道符。 10.10.10.4 | SUCCESS | rc=0 >> 3、模块:把当前主机文件复制到远程主机位置,可以指定mode、own、group 10.10.10.4 | SUCCESS => { "changed": true, "checksum": "", "dest": "/root/abc.txt", "gid": 0, "group": "root", "md5sum": "", "mode": "0644", "owner": "ansible", "size": 15, "src": "/root/.ansible/tmp/ansible-tmp-1484639082.19-114656107854348/source", "state": "file", "uid": 0 } 4、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查看 在管理的主机上可以删除制定的计划任务 10.10.10.4 | SUCCESS => { "changed": true, "envs": [], "jobs": [] } 5、fetch模块:和相反,从远程主机拷贝文件到本地主机 可以不要flat=yes参数,但作用: 当dest=/root/kel/ ,abc.txt会保存在/root/kel/目录下 当dest=/root/kel ,会拷贝abc.txt文件,并命名成kel 6、file模块:file模块包含了文件、文件夹、超级链接类的创建、拷贝、移动、删除 path=/etc/foo.conf owner=foo group=foo mode=0644 src=/file/to/link/to dest=/path/ro/symlink owner=foo group=foo state=link src=/tmp/{{item.path}} dest={{item.dest}} state=link with_items: path=/etc/foo.conf state=touch mode="u=rw,g=w,o=r" path=/etc/foo.conf state=touch mode="u+w,g-w,o-rw" 7、yum模块:用于yum安装安装和卸载 8、service模块:服务管理 9、user/group模块:user模块管理用户;group模块管理group 四、Playbook剧本 playbook 是ansible更强大的配置管理组件,实现基于文本文件编排执行的多个任务,且多次重复执行。playbook组织格式为使用YAML语言来编写的。 playbook 是由一个或多个“play”组成的列表。play的主要功能在于将事先归为一组的主机装扮成事先通过ansible中的task定义好的角色。从根本上讲,所谓的task无非是调用ansible的一个mole。将多个play组织在一个playbook中,即可以让他们联通起来按事先编排的机制生效。 1、例子: 在ansible主机上的root目录下创建httpd目录,将本机的httpd.conf文件拷贝到该目录下,修改配置文件里的监听端口是8081 remote_user:root #root前不能有空格 tasks: #任务列表 yum name=httpd state=present #yum后的: 删除掉 src=/root/httpd/httpd.conf dest=/etc/httpd/conf service name=httpd state=started 注意:yaml文件中支持#;下面的操作要跟上面的name对齐。 测试: ansible-playbook –check playbook :只检测可能会发生的改变,但不真正执行操作 ansible-playbook playbook :直接执行 ansible-playbook –list-hosts :列出运行任务的主机 2、playbook介绍 设置在特定条件下触发: a,某任务的状态在运行后为changed时,可通过“notify”通知给相应的handles; handles:任务在特定条件下触发;接收到其他任务的通知是被触发; b,任务可以通过“tags”打标签,而后可在ansible-playbook命令上使用-t指定进行调用;
⑵ OpenShift 升级指南
openshift-ansible 为 OpenShift Origin 集群提供了方便的升级手册,在 主版本 之间进行升级绝大部分没有问题。但请注意,从测试版(如 3.7.0-rc.0 -> 3.7.0) 或者小版本(3.6.0 -> 3.6.1) 升级时会有问题。
OpenShift Origin 版本和 openshift-ansible 分支的对照关系表如下:
官方的升级文档请访问 https://docs.openshift.org/latest/install_config/upgrading/index.html
主版本之间除 3.7 到 3.9 版本之间允许跨版本进行升级之外,其他主版本之间不允许跨版升级,具体见如下表格:
我们以 3.6 升级至 3.7 为例来说明。
编辑 ansible 配置文件 /etc/ansible/hosts 并将以下属性并修改为 3.7 版本的相应值。
OpenShift 唯一一次允许跨版本升级是从 3.7.x 升级至 3.9,据官方文档描述,这个升级过程分为两个阶段:
全程自动升级,无需手工干预。不过,从笔者的升级实践上看,社区版进行升级时会由于未自动启用 3.8 的 YUM 软件源而升级失败,提示 Package 'origin-3.8*' not found 的错误。因此在升级之前,我们需要手工设置一下 Origin 3.8 的 YUM 软件源。
将文件 CentOS-OpenShift-Origin38.repo 复制到目录 /etc/yum.repos.d/ 下。文件内容如下:
编辑 ansible 配置文件 /etc/ansible/hosts 并将以下属性并修改为 3.7 版本的相应值。
小版本升级一般不需要变更 Ansible 的 hosts 文件,除非读者在之前的安装时强制指定了 openshift_image_tag 或者 openshift_pkg_version 这两个变量,那么您可能需要手工指定两个版本值或者直接去掉它们。
升级时读者仅需要找到当前主版本对应的升级手册运行即可。我们以 3.7 为例,最开始安装的时候,ansible 自动找到了明细的版本为 3.7.0,后面社区推出了小版本升级包 3.7.1,这时读者仅需要运行 3.7 对应的升级手册即可:
⑶ Linux里面ansible -a命令作用是什么
Ansible是一款系统运维的批量管理服务器软件,下面是批量管理的命令例子:
ansible oldboy -m shell -a 'ps -ef |grep ssh' -k
ansible是命令。
oldboy是主机组(里面包含很多机器)。
-m shell,-m是指定模块,shell就是一个模块。
-a接模块对应参数。'ps -ef |grep ssh',就是模块对应的参数,传给shell解析处理。
⑷ ansible hosts配置ip重复命令会不会重复执行
尊敬的用户,您好!很高兴为您答疑。这个文件修改后不会及时生回效,需要您重启一答下您的网络,如果有必要,建议重启机器(或虚拟机)。而这个问题与浏览器本身无关,主要是因为您系统的设置未生效所致。希望我的回答对您有所帮助,如有疑问,欢迎继续咨询我们。
⑸ 使用ansible v2.0 api怎么指定hosts
使用ansible v2.0 api怎么指定hostsor语句在C语言中,for语句使用最为灵活,它完全可以取代 while 语句。它的一般形式为: for(表达式1;表达式2;表达式3) 语句它的执行过程如下:1) 先求解表达式1。2) 求解表达式2,若其值为真(非0),则执行for语句中指定的内嵌语句,然后执行下面第3)步;若其值为假(0),则结束循环,转到第5)步。3) 求解表达式3。4) 转回上面第2)步继续执行。5) 循环结束,执行for语句下面的一个语句。
⑹ 如何安装和配置Ansible在Ubuntu 16.04
配置管理系统旨在使管理员和操作团队能够轻松地控制大量服务器。 它们允许您从一个中心位置以自动方式控制许多不同的系统。虽然有可用于Linux系统,如Chef和Puppet许多流行的配置管理系统,这些往往是更复杂的比很多人都希望或需要。Ansible是一个伟大的选择这些选项,因为它有一个更小的开销开始。在本指南中,我们将讨论如何在Ubuntu 16.04服务器上安装Ansible,并讨论如何使用该软件的一些基础知识。Ansible如何工作?Ansible通过从安装了Ansible组件的计算机配置客户端计算机来工作。它通过普通SSH通道进行通信,以便从远程计算机检索信息,发出命令和复制文件。 因此,Ansible系统不需要在客户端计算机上安装任何其他软件。这是Ansible简化服务器管理的一种方法。 任何暴露了SSH端口的服务器都可以被带到Ansible的配置伞下,无论它的生命周期处于什么阶段。您可以通过SSH管理的任何计算机,也可以通过Ansible管理。Ansible采用模块化方法,使其易于扩展以使用主系统的功能来处理特定场景。 模块可以用任何语言编写,并以标准jsON进行通信。配置文件主要是以YAML数据序列化格式编写的,因为它具有表达性和与流行标记语言的相似性。 Ansible可以通过命令行工具或通过其名为Playbooks的配置脚本与客户端进行交互。先决条件要遵循本教程,您需要:一个Ubuntu的16.04服务器与Sudo非root用户和SSH密钥,您可以通过以下设置初始服务器设置教程 ,包括第4步第1步 – 安装Ansible要开始探索Ansible作为管理我们的各种服务器的方法,我们需要在至少一台机器上安装Ansible软件。 我们将使用一个Ubuntu 16.04服务器。为Ubuntu获取Ansible的最佳方法是将项目的PPA(个人包存档)添加到系统中。 我们可以通过键入以下命令添加Ansible PPA:sudo apt-add-repository ppa:ansible/ansible按ENTER接受PPA增加。接下来,我们需要刷新系统的包索引,以便它知道PPA中可用的包。 之后,我们可以安装软件:sudo apt-get updatesudo apt-get install ansible如上所述,Ansible主要通过SSH与客户端计算机通信。 虽然它当然有能力处理基于密码的SSH身份验证,SSH密钥帮助保持简单。 您可以按照先决条件中链接的教程来设置SSH密钥(如果您还没有)。我们现在拥有通过Ansible管理我们的服务器所需的所有软件。第2步 – 配置Ansible主机Ansible通过“hosts”文件跟踪它所知道的所有服务器。 我们需要先设置此文件,然后才能开始与我们的其他计算机通信。使用root权限打开文件,如下所示:sudo nano /etc/ansible/hosts你会看到一个文件有很多示例配置,没有一个将真正为我们工作,因为这些主机组成。 因此,首先,我们通过在每行之前添加一个“#”来注释掉这个文件中的所有行。我们将在文件中保留这些示例,以帮助我们进行配置,如果我们希望在将来实现更复杂的场景。一旦所有的行都注释掉,我们可以开始添加我们的实际主机。hosts文件相当灵活,可以通过几种不同的方式进行配置。 我们将使用的语法看起来像这样:主机文件示例[group_name]alias ansible_ssh_host=your_server_ipgroup_name是一个组织标记,可让您使用一个字来引用下面列出的任何服务器。 别名只是一个引用该服务器的名称。所以在我们的场景中,我们想象我们有三个服务器,我们将要控制与Ansible。 可以通过键入以下内容从Ansible服务器访问这些服务器:ssh [email protected]_server_ip如果您已正确设置此密码,则不应提示您输入密码。 我们假设我们的服务器的IP地址是192.0.2.1 , 192.0.2.2和192.0.2.3 。 我们将设置这使我们可以把这些单独的host1 , host2和host3 ,或作为一个群体的servers 。这是我们应该添加到我们的hosts文件来完成这个块:[servers]host1 ansible_ssh_host=192.0.2.1host2 ansible_ssh_host=192.0.2.2host3 ansible_ssh_host=192.0.2.3主机可以在多个组中,组可以为其所有成员配置参数。 让我们现在尝试一下。使用我们当前的设置,如果我们尝试使用Ansible连接到任何这些主机,命令将失败(假设您不是以root用户身份操作)。 这是因为您的SSH密钥是为远程系统上的root用户嵌入的,并且Ansible将默认尝试作为当前用户连接。 连接尝试将获得此错误:Ansible连接错误host1 | UNREACHABLE! => {"changed": false,"msg": "Failed to connect to the host via ssh.","unreachable": true}在Ansible服务器,我们使用一个名为演示用户。 Ansible会尝试连接到与每个主机ssh [email protected] 。 如果演示用户不在远程系统上,这将不工作。我们可以创建一个文件,告诉“服务器”组中的所有服务器使用root用户进行连接。要做到这一点,我们将创建在Ansible配置结构称为目录group_vars 。 在此文件夹中,我们可以为要配置的每个组创建YAML格式的文件:sudo mkdir /etc/ansible/group_varssudo nano /etc/ansible/group_vars/servers我们可以把我们的配置在这里。 YAML文件以“—”开头,因此请确保不要忘记该部分。/ etc / ansible / group_vars / servers—ansible_ssh_user: root保存并在完成后关闭此文件。如果你想为每个服务器指定配置细节,而不管组关联的,你可以在把这些信息在一个文件中/etc/ansible/group_vars/all 。 单个主机可以通过在目录下创建文件进行配置/etc/ansible/host_vars 。第3步 – 使用简单的Ansible命令现在我们已经设置了主机和足够的配置详细信息,以允许我们成功连接到我们的主机,我们可以尝试我们的第一个命令。通过键入以下命令来ping您配置的所有服务器:ansible -m ping all平滑输出host1 | SUCCESS => {"changed": false,"ping": "pong"}host3 | SUCCESS => {"changed": false,"ping": "pong"}host2 | SUCCESS => {"changed": false,"ping": "pong"}这是一个基本测试,以确保Ansible已连接到其所有主机。“all”表示所有主机。 我们可以很容易地指定一个组:ansible -m ping servers我们还可以指定单个主机:ansible -m ping host1我们可以通过用冒号分隔它们来指定多个主机:ansible -m ping host1:host2该-m ping命令的部分是Ansible指令使用“平”模块。 这些基本上是可以在远程主机上运行的命令。 ping模块以很多方式运行,就像Linux中的正常ping实用程序一样,而是检查Ansible连接。ping模块不会真正采取任何参数,但我们可以尝试另一个命令,看看它是如何工作。 我们通过输入参数传递到脚本-a 。“shell”模块允许我们向远程主机发送终端命令并检索结果。 例如,要找出我们的host1机器上的内存使用情况,我们可以使用:ansible -m shell -a 'free -m' host1Shell输出host1 | SUCCESS | rc=0 >>total used free shared buffers cachedMem: 3954 227 3726 0 14 93-/+ buffers/cache: 119 3834Swap: 0 0 0结论现在,您应该将您的Ansible服务器配置为与您要控制的服务器通信。 我们已验证Ansible可以与每个主机沟通,我们已经使用了ansible命令来远程执行简单的任务。虽然这是有用的,我们没有涵盖Ansible的最强大的功能在这篇文章:Playbooks。 我们已经通过Ansible为我们的服务器建立了一个很好的基础,但是当我们介绍如何使用Playbooks来自动化远程计算机的配置时,我们将在以后的文章中进行大量的工作。
⑺ ansible怎么配置ssh参数
1. 执行顺序配置文件执行顺序:* ANSIBLE_CONFIG (环境变量)* ansible.cfg (in the current directory)* .ansible.cfg (in the home directory)* /etc/ansible/ansible.cfg版本1.5以前的执行顺序:* ansible.cfg (in the current directory)* ANSIBLE_CONFIG (an environment variable)* .ansible.cfg (in the home directory)* /etc/ansible/ansible.cfg2.配置文件ansible.cfg中的【default】配置项Action_Plugins(扩展插件存放目录)action_plugins = /usr/share/ansible_plugins/action_pluginsAnsible_Managed(插入Ansible模板的字符串)ansible_managed = Ansible managed: {file} modified on %Y-%m-%d %H:%M:%S by {uid} on {host}ask_pass(PlayBook是否需要提供密码,默认为No)#ask_pass=Trueask_sudo_pass(PlayBook是否需要提供sudo 密码)#ask_sudo_pass=Truecallback_plugins(回调函数插件存放路径)action_plugins = /usr/share/ansible_plugins/action_pluginsconnection_plugins(连接插件存放路径)action_plugins = /usr/share/ansible_plugins/action_pluginsdeprecation_warnings(是否展示警告信息)deprecation_warnings = Truedisplay_skipped_hosts(是否展示跳过的主机的信息)#display_skipped_hosts=Trueerror_on_undefined_vars(执行错误时候赋予的变量)#error_on_undefined_vars=Trueexecutable(默认的Shell)#executable = /bin/bashfilter_plugins(拦截器插件)action_plugins = /usr/share/ansible_plugins/action_pluginsforks(最大进程数)forks=5hash_behavior(哈希特性,没事不用去动它)#hash_behavior=replacehostfile(资产文件存放位置)hostfile = /etc/ansible/hostshost_key_checking(是否检查SSH key)host_key_checking=Truejinja2_extensions(JinJa扩展)jinja2_extensions = jinja2.ext.do,jinja2.ext.i18nlegacy_playbook_variables(PlayBook变量)legacy_playbook_variables = nolibrary(Ansible默认库)library = /usr/share/ansiblelog_path(日志路径)log_path=/var/log/ansible.loglookup_plugins(插件路径)action_plugins = /usr/share/ansible_plugins/action_pluginsmole_name(默认模块名称)mole_name = commandnocolor(输出样式)nocolor=0nocows(是否使用cowsay打印)nocows=0pattern(主机)hosts=*poll_interval(pool间隔)poll_interval=15private_key_file(私钥的存放路径)private_key_file=/path/to/file.pemremote_port(远程连接端口号)remote_port = 22remote_tmp(远程目录临时文件夹)remote_temp = $HOME/.ansible/tmpremote_user(远程用户)remote_user = rootroles_path(角色路径)roles_path = /opt/mysite/rolessudo_exe(SUDO执行)sudo_exe=sudosudo_flags(SUDO标记)sudo_flags=-Hsudo_user(sudo用户)sudo_user=roottimeout(重连次数)timeout = 10transport(传输模式)默认用的smartvars_plugins(变量插件存放路径)action_plugins = /usr/share/ansible_plugins/action_pluginsSSH变量ssh_args(SSH连接参数)ssh_args = -o ControlMaster=auto -o ControlPersist=60sscp_if_ssh(采用SCP还是SFTP进行文件传输)scp_if_ssh=False
⑻ Linux里面ansible作用是什么
Ansible是一款简单的运维自动化工具,只需要使用ssh协议连接就可以来进行系统管理,自动化执行命令,部署等任务。
Ansible的优点
不需要安装客户端,不需要运行服务
使用python开发的一套自动执行任务的模块
playbook采用yaml配置,结构清晰
Ansible的组成结构
Ansible:核心命令工具,一次性或临时性执行的操作都由该工具执行
Ansible playbook:任务剧本(又称任务集),编排定义Ansible任务集的配置文件,由Ansible执行,格式是yaml
Inventory:Ansible管理的主机,在/etc/ansible/hosts中配置
Moles:Ansible执行命令的功能模块,Ansible2.3版本为止,共有1039个模块。还可以自定义模块。
Plugins:插件,模块功能的补充,常有连接类型插件,循环插件,变量插件,过滤插件,插件功能用的较少。
API:提供给第三方程序调用的应用程序编程接口。
⑼ 使用ansible v2.0 api怎么指定hosts
ansible2.0的api似乎不复能像以前一样传入制一个hosts列表,只能指定某个host文件里的某个组(或者全部组),但是我无法预先写好一个hosts文件和组,因为要操作哪些服务器是在web上输入的。我现在解决的方法是对于传入的hosts列表,遍历后写在一个临时文件里,Inventory指定这个临时文件即可。
⑽ ansible总结
ansible是一种自动化运维工具,基于paramiko开发的,并且基于模块化工作,Ansible是一种集成IT系统的配置管理、应用部署、执行特定任务的开源平台,它是基于python语言,由Paramiko和PyYAML两个关键模块构建。集合了众多运维工具的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能.ansible是基于模块工作的,本身没有批量部署的能力.真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架.ansible不需要在远程主机上安装client/agents,因为它们是基于ssh来和远程主机通讯的.
ansible被定义为配置管理工具,配置管理工具通常具有以下功能:
常用的自动化运维工具技术特性比较:
ansible系统由控制主机和被管理主机组成,控制主机不支持windows平台
部署简单, 只需要在控制主机上部署ansible环境,被控制端上只要求安装ssh和python 2.5以上版本,这个对于类unix系统来说相当与无需配置.
Ansible任务执行模式分为以下两种:
ansible配置文件查找顺序
ansible配置文件 ansible 有许多参数,下面我们列出一些常见的参数:
ansible的主要功用在于批量主机操作,为了便捷地使用其中的部分主机,可以在inventory file中将其分组命名。默认的inventory file为/etc/ansible/hosts。 inventory file可以有多个,且也可以通过Dynamic Inventory来动态生成。
Inventory文件格式:
inventory其他的参数
ansible通过ssh实现配置管理、应用部署、任务执行等功能,因此,需要事先配置ansible端能基于密钥认证的方式联系各被管理节点。
ansible命令使用语法:
例如:
可以通过 ansible-doc -l 列出所有可用的mole,常用的mole有:
ansible -s <mole-name> 可以查看指定mole的用法,或者参看 官方帮助文档 :
playbook是由一个或多个“play”组成的列表。play的主要功能在于将事先归并为一组的主机装扮成事先通过ansible中的task定义好的角色。从根本上来讲,所谓task无非是调用ansible的一个mole。将多个play组织在一个playbook中,即可以让它们联同起来按事先编排的机制同唱一台大戏。
下面是一个简单示例:
playbooks的组成部分
执行过程:
playbook安装配置apache实战
ansilbe自1.2版本引入的新特性,用于层次性、结构化地组织playbook。roles能够根据层次型结构自动装载变量文件、tasks以及handlers等。要使用roles只需要在playbook中使用include指令即可。简单来讲,roles就是通过分别将变量、文件、任务、模块及处理器放置于单独的目录中,并可以便捷地include它们的一种机制。角色一般用于基于主机构建服务的场景中,但也可以是用于构建守护进程等场景中。
一个roles的案例如下所示:
在playbook中,可以这样使用roles:
也可以向roles传递参数:
也可以用条件来使用roles:
ansible运行playbook时会启动很多ssh连接来执行复制文件,运行命令这样的操作.openssh支持这样一个优化,叫做ssh Multiplexing,当使用这个ssh Multiplexing的时候,多个连接到相同主机的ssh回话会共享相同的TCP连接,这样就只有第一次连接的时候需要进行TCP三次握手.
ansible会默认使用ssh Multiplexing特性,一般不需要更改配置,相关的配置项为:
ansible执行过程中,他会基于调用的模块生成一个python脚本,然后将python脚本复制到主机上,最后执行脚本.ansible支持一个优化,叫做pipelining,在这个模式下ansible执行脚本时并不会去复制它,而是通过管道传递给ssh会话,这会让ansible的ssh会话从2个减少到1个,从而节省时间.
pipelining默认是关闭的, 因为他需要确认被管理主机上的/etc/sudoers文件中的 requiretty 没有启用, 格式如下:
ansible开启pipelining方法, 修改ansible.cfg配置文件:
ansible playbook会默认先收集fact信息,如果不需要fact数据可以在playbook中禁用fact采集:
也可以全局禁用fact采集:
另一种解决方案就是使用fact缓存,目前ansible支持下面几种fact缓存:
JSON文件做fact缓存示例 ansible把采集到的fact写入控制主机的json文件中,如果文件已经存在,那么ansible不会再去主机上采集fact
启用JSON文件缓存,修改ansible.cfg文件:
ansible默认并发数是5,可以用下面两种方法修改并发数:
ansible内置多种云计算相关模块,如aws,openstack,docker等,下图是ansible与docker相关的模块:
通过playbook和dockerfile相结合的方式生成镜像, 示例如下:
ansible可以通过docker模块来操作容器,示例如下: