ansible的简单应用

一、初识ansible

  • 1、ansible是新出现的自动化运维工具

ansible是一个配置管理和应用部署工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric、SaltStack )的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。

  • 2、ansible在生产环境当中的应用
    • 自动化部署应用
    • 自动化管理配置
    • 自动化持续交付
    • 自动化(aws)云服务器管理
  • 3、ansible的优点
    • (1).ansible糅合了众多老牌运维工具的优点,基本上pubbet和saltstack能实现的功能全部能实现;
    • (2).轻量级,无需在客户端安装agent,更新时,只需在操作机上进行一次更新即可;
    • (3).ansible是一个工具,ansible不需要启动服务,仅仅只是一个工具,可以轻松的实现分布式扩展;
    • (4).批量任务执行可以写成脚本,而且不用分发到远程就可以执行;
    • (5).ansible是一致性,高可靠性,安全性设计的轻量级自动化工具;
    • (6).使用python编写,维护更简单,ruby语法过于复杂;
  • 4、ansible特性
    • (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:可实现多级指挥
  • 5、ansible的基本架构 (ansible是模块化的 它所有的操作都依赖于模块)
    • 1.connectior plugins (连接插件):用于连接主机,用来连接被管理端
    • 2.core modules (核心模块):连接主机实现操作,它依赖于具体的模块来做具体的事情
    • 3.custom modules (自定义模块):根据自己的需求编写具体的模块
    • 4.plugins (插件):完成模块功能的补充
    • 5.playbooks(剧本):ansible的配置文件,将多个任务定义在剧本中,由ansible自动执行
    • 6.host inventory (主机清单):定义ansible需要操作主机的范围
    • 7.架构图
      ansible架构图.png
    • 8.执行流程
      ansible执行流程.png

二、安装ansible

  • 1、安装须知
    • ansible只是一个进程:不需要添加数据库也不需要启动和运行守护进程它只是一个进程你可以轻松使用它安装在任何一点主机上面(除了windows)ansible管理机不能安装到windows上面,windows只能被管理。这和saltstack是一样的。
    • 版本的选择:因为2.0有非常大的改进 一般都会使用2.0以上的版本
    • 控制机的要求:因为ansible是python写的 所以需要在安装了python2.6或者2.7以上的python版本才可以安装
    • 管理节点的要求:需要安装ssh python版本在2.5以上
  • 2、三种安装方式 [官网安装方式]
      1. yum -y install ansible wget -O /etc/yum.repos.d/epel.repo 点我下载yum源
      1. pip install ansible
      1. 从github下载
    $ git clone git://github.com/ansible/ansible.git --recursive
    $ cd ./ansible
    $ make rpm
    $ sudo rpm -Uvh ./rpm-build/ansible-*.noarch.rpm
    
  • 3、查看版本,证明已经安装成功
    [root@master ~ 19:14:06]# ansible --version
    ansible 2.7.5
      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, Jul 13 2018, 13:06:57) [GCC 4.8.5 20150623 (Red Hat 4.8.5-28)]
    

    还可查看出配置文件所在位置:config file = /etc/ansible/ansible.cfg

三、ansible应用

  • 1、需要注意几个文件:
    ①、一个是配置文件(所在位置:/etc/ansible/ansible.cfg)配置文件详解

    Ansible中的某些设置可通过配置文件(ansible.cfg)进行调整。对于大多数用户来说,库存配置应该足够了,但可能有其他原因要更改它们。

    ②、另一个是主机清单inventory(所在位置:/etc/ansible/hosts)。

    既然是批量管理主机,那么就需要有管理对象,主机清单里写的都是被管理的主机,而且可以分组,每组都可以传递指定参数。

    ③、再一个就是自己写的的.yml文件(playbook剧本文件,之后详解)。
  • 2、主机清单 inventory
    • 1,以文件形式配置主机清单,并执行
      [root@master / 22:48:58]#cat /etc/ansible/hosts
      
      [ceshi]   -->【分组,组名】
      10.0.0.11
      10.0.0.13
      10.0.0.14
      
      [ceshi2]   -->【分组,组名】
      10.0.0.15
      10.0.0.16
      10.0.0.17
      
      [ceshi2:vars]   -->【可传一些变量,有一些系统变量,也可以自定义变量】
      ansible_ssh_pass='密码' -->【加上这个就不用输入密码,也不用密钥】
      ansible_ssh_port=22
      ansible_ssh_user='liyonghui'可设置登录用户
      
      [ceshi3]   -->【分组,组名】
      10.0.0.18 ansible_ssh_pass='密码' ansible_ssh_port=22
      10.0.0.19 ansible_ssh_pass='密码' ansible_ssh_port=22
      10.0.0.20 ansible_ssh_pass='密码' ansible_ssh_port=22
      

      列举inventory内置参数:

      ansible_ssh_host # 要连接的主机名
      ansible_ssh_port # 端口号默认是22
      ansible_ssh_user # ssh连接时默认使用的用户名
      ansible_ssh_pass # ssh连接时的密码
      ansible_sudo_pass # 使用sudo连接用户是的密码
      ansible_ssh_private_key_file # 秘钥文件如果不想使用ssh-agent管理时可以使用此选项
      ansible_shell_type # shell的类型默认sh
      ansible_python _ interpreter #用来指定 python 解释器的路径,同样可以指定ruby 、perl 的路径
      
      单命令执行失败和成功样例.png
    • 2,以目录形式配置主机清单,并执行
      [root@master ~/inventory 20:27:29]#ls
      ceshi1  ceshi2
      [root@master ~/inventory 20:31:23]#cat /root/inventory/ceshi1
      10.0.0.11 ansible_ssh_pass='root1234'
      [root@master ~/inventory 20:31:29]#cat /root/inventory/ceshi2
      10.0.0.129 ansible_ssh_pass='1234'
      [root@master ~/inventory 20:31:45]#cd -
      /root
      [root@master ~ 20:32:06]#ansible -i inventory all -a 'uptime' 
      10.0.0.129 | CHANGED | rc=0 >>
      20:32:37 up  2:47,  2 users,  load average: 0.00, 0.00, 0.00
      
      10.0.0.11 | CHANGED | rc=0 >>
      23:32:37 up  2:47,  2 users,  load average: 0.00, 0.01, 0.05
      
    • 3,以文件形式配置主机清单,可用children的形式继承变量
      [ceshi]
      10.0.0.11
      
      [ceshi:vars]  
      ansible_ssh_user='liyonghui'
      
      [ceshi2] 
      10.0.0.17
      10.0.0.18
      
      [ceshi:children]  --> 那么通过继承,ceshi2 组的ansible_ssh_user和 ceshi 组相同
      ceshi2
      
    • 4,动态 inventory(以python脚本的形式执行)

      动态inventory的意思是所有的变量可以从外部获取,也就是说我们可以从CMDB以及zabbix系统拉取所有的主机信息然后使用ansible进行管理。引用inventory只需要把ansible.cfg文件中的inventory定义值改成一个执行脚本即可。

      pass
      
  • 3、连接主机的不同方式

    我们要操作主机,首先得连接主机。如果是批量管理的话,我们肯定不希望每台主机都输入密码。所以,有三种连接方式,可以连接上主机并执行操作:

    • 1,-k指定输入密码。

      执行时:ansible -i /etc/ansible/hosts ceshi -a 'uptime' -k【-k参数指定输入密码】

    • 2,使用密钥。

      密钥认证方式连接:
      生成密钥:ssh-keygen -t rsa(管理机)
      发送密钥:ssh-copy-id -i /root/.ssh/id_rsa.pub root@10.0.0.129 (发送至被管理机)
      执行命令:ansible ceshi2 -a 'date' (不需要密码)

    • 3,在主机清单里配置ansible_ssh_pass='密码'
  • 4、任务执行模式

    ansible系统由控制主机对被管节点的操作方式有两种:Ad-Hocplaybook

    • (1)、Ad-Hoc:单命令模式,可以对多台主机执行单个命令。
      ansible all -a "/bin/echo hello"
    • (2)、playbook:通过多个tasks的集合完成一类功能,如web的安装部署,数据库服务器的批量备份等。
  • 5、ansible命令 (ansible常用模块简介

    安装完ansible后,ansible为我们提供了多个指令。
    可通过ls /usr/bin/ | grep ansible | grep -v [0-9]查看。
    指令:ansibleansible-docansible-galaxyansible-inventoryansible-playbookansible-pullansible-vaultansible-configansible-connectionansible-console
    通过 “指令 -h” 的方式可获取用法(Usage)。

    • (1)、ansible(单命令,常用)
      [root@localhost ~]# ansible -h 
      Usage: ansible <host-pattern> [options]
      用法: ansible       主机      选项(参数)
      

      ansible是指令核心部分,其主要用于执行Ad-Hoc命令,即单条命令。默认后面需要跟主机和选项部分,默认不指定模块时,使用的是command模块。如:

      [root@master ~ 18:57:10]# ansible 10.0.0.11 -a 'date'
      10.0.0.11 | CHANGED | rc=0 >>
      Mon Jan 21 21:59:50 EST 2019
      

      默认使用的模块是可以在ansible.cfg中进行修改的。ansible命令下的参数部分解释如下链接🔗,通过 ansible -h 也可查看:

      ansible参数说明

    • (2)、ansible-doc (查看帮助文档,常用)
      [root@master /log.txt 19:11:24]#ansible-doc -h
      Usage: ansible-doc [-l|-F|-s] [options] [-t <plugin type> ] [plugin]
      

      ansible-doc -l (查看可用模块) 特别多,可用grep过滤一下
      ansible-doc -l|grep copy (查看可用的有关 copy 的模块)
      ansible-doc -s 模块名 (查看某个模块的具体用法)

    • (3)、ansible-playbook (多任务,常用,之后详解)
      [root@master /usr/bin 19:21:28]#ansible-playbook -h
      Usage: ansible-playbook [options] playbook.yml [playbook2 ...]
      
    • (4)、ansible-pull(从网上拉下playbook,以供ansible-playbook运行)
      [root@master /usr/bin 19:22:23]#ansible-pull -h
      Usage: ansible-pull -U <repository> [options] [<playbook.yml>]
      
    • (5)、ansible-galaxy (执行各种与roles相关的操作,是一个免费网站,用于查找,下载,评级和审查各种社区开发的Ansible roles)
      [root@master /log.txt 19:15:18]#ansible-galaxy -h
      Usage: ansible-galaxy [delete|import|info|init|install|list|login|remove|search|setup] [--help] [options] ...
      
      [root@master ~ 20:01:07]#ansible-galaxy install --help
      Usage: ansible-galaxy install [options] [-r FILE | role_name(s)[,version] | scm+role_repo_url[,version] | tar_file(s)]
      
    • (6)、ansible-inventory
      [root@master /usr/bin 19:18:53]#ansible-inventory -h
      Usage: ansible-inventory [options] [host|group]
      
    • (7)、ansible-vault
      [root@master /usr/bin 19:23:14]#ansible-vault -h
      Usage: ansible-vault [create|decrypt|edit|encrypt|encrypt_string|rekey|view] [options] [vaultfile.yml]
      

四、playbook详解

五、报错解决

  • 在执行过程中,如果报以下错误:

    10.0.0.129 | UNREACHABLE! => {
        "changed": false, 
        "msg": "Failed to connect to the host via ssh: 
            @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
            @    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
            @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
            IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
            Someone could be eavesdropping on you right now (man-in-the-middle attack)!
            It is also possible that a host key has just been changed.
            The fingerprint for the ECDSA key sent by the remote host is
            SHA256:GvppMUVZGPWsH+J4AC9bbHbOyCbCV0ZQMr0QbmHLtmc.
            Please contact your system administrator.
            Add correct host key in /root/.ssh/known_hosts to get rid of this message.
            Offending ECDSA key in /root/.ssh/known_hosts:2
            Challenge/response authentication is disabled to avoid man-in-the-middle attacks.
            Permission denied (publickey,password).
            ", 
        "unreachable": true
    }
    
  • 原因:连接主机的公私钥发生变化,与本机记录的不一致,会报错。

  • 解决:ssh-keygen -R 10.0.0.129 #替换为你的ip或域名

    [root@master /etc/ssh 01:00:30]#ssh-keygen -R 10.0.0.129
    # Host 10.0.0.129 found: line 2
    /root/.ssh/known_hosts updated.
    Original contents retained as /root/.ssh/known_hosts.old
    

六、官网

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,847评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,208评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,587评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,942评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,332评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,587评论 1 218
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,853评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,568评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,273评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,542评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,033评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,373评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,031评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,073评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,830评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,628评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,537评论 2 269