zoukankan      html  css  js  c++  java
  • ansible入门

    前言

    学习和使用任何语言、工具都是服务于具体的目标的。目标驱动和即时反馈往往能让你效率提升,积极性被调动,掌握知识点也会更加牢靠。笔者学习和使用ansible的初衷是:使用ansible通过一台中控的linux机器,管理N台其他Linux主机,能够做到批量文件分发、批量修改配置文件、批量启动软件服务,从而合理”偷懒“

    ps:手动一台一台撸过去会让人崩溃的,也是不聪明的做法,笔者在公司用java写了一套dup(deploy update platform)工具,用于批量部署软件,跟ansible的作用类似

    基础概念

    ansible究竟是什么?能做什么呢?它是一个自动化运维工具,能批量配置、管理,避免做一些重复的体力劳动。
    比如:给N台主机安装jdk、拷贝文件到N台主机或者其他重复性工作。
    当然,对于简单的任务,我们写点脚本也可以满足需求,但是ansible具有"幂等性",保证重复执行某个任务,得到相同的结果,即它会判断是否已经是正确完成的状态,不过已经完成,不执行操作。

    当然,对于运维工具熟悉的同学可能还用过puppet、saltstack、chef等,它们要么是需要安装agent到目标主机,要么用Ruby语言等,ansible用python语言开发,采用ssh协议实现主机间通讯,不用安装agent,配置文件用YAML,任意一台主机都能当中控机(去中心化)。总体来说,简单易用,ansible还有一些特性:点对点(ad-hoc)、清单(inventory)、剧本(playbook)、模式(patterns)、模块(modules)、插件(plugins),这些后面会逐步介绍。

    基础配置

    首先是安装ansible环境,官方文档介绍的非常详细,ansible官方地址 包含了安装前置条件、python版本、ansible版本选择,apt安装/yum安装/pip安装等,由于大家安装环境的差异不展开讲,如果这一步环境都不能自己搞定,后面也不用看了,毕竟聪明的人才适合玩转ansible。

    笔者的演示环境均为centos7.6的主机:

    • 172.16.101.25 (中控机)
    • 172.16.101.250 (受控主机1)
    • 172.16.101.251 (受控主机2)
    • 172.16.101.34 (受控主机3)
    • 172.16.101.4 (受控主机4)

    采用yum安装,先配置好阿里的镜像源

     # cd /etc/yum.repos.d/
     # cat aliBase.repo
     [aliBase]
     name=aliBase
     baseurl=https://mirrors.aliyun.com/centos/$releasever/os/$basearch/
     enabled=1
     gpgcheck=1
     gpgkey=https://mirrors.aliyun.com/centos/$releasever/os/$basearch/RPM-GPG-KEY-CentOS-$releasever
     # cat aliEpel.repo
     name=aliEpel
     baseurl=https://mirrors.aliyun.com/epel/$releaseverServer/$basearch/
     enabled=1
     gpgcheck=0
    

    配置完毕repo后,直接yum安装ansible

    yum install ansible
    

    此时安装好的ansible是version 2.4.2.0
    此时输入ansible,能正常提示表示安装好了。

    此时安装的目录为/etc/ansible,这个目录下有ansible.cfg(配置文件)、hosts(受控主机清单)、roles(角色定义)

    基本用法

    下面根据ansible命令提示尝试一个内置的ping命令,m表示module模块:

    ansible 172.16.101.4 -m ping
    

    发现结果是:

    想想看,对于中控机172.16.101.25而言,172.16.101.4并不认识,你想控制它,并不被允许,所以需要把172.16.101.4加入受控主机清单(inventory),即/etc/ansible/hosts文件中,hosts文件末尾添加了这个ip后,执行同样的命令,发现连接被拒绝:

    这也很容易理解,你并没有172.16.101.4的用户名/密码,或者验证身份的秘钥,它不可能让你控制它,所以在hosts中加入用户名、密码、端口

    172.16.101.4 ansible_port=22 ansible_user=root ansible_ssh_pass=123@abc.com
    
    • ansible_port 端口
    • ansible_user 用户名
    • ansible_ssh_pass 密码

    再次执行ping命令返回结果:

    这样就表示能连接172.16.101.4这台主机了

    能够通讯后,我们开始执行一些特定的命令做测试,例如在这台主机上新建一个文件夹,命令:

    ansible 172.16.101.4 -m command -a 'mkdir /root/test'
    

    返回结果:

    当然,上述只是管理了一台主机,对于多台,我们需要在hosts文件中加入更多的主机即可,而且还有其他的一些配置方法:

    上述第二行给172.16.101.251取了一个别名251,这样就能用别名来管理主机:

     ansible host251 -m ping
    

    上图第三行的172.16.101.34因为配置了ssh秘钥认证,所以不用配置用户名密码,端口为默认的22,所以也不用配置了。如果想了解ssh秘钥认证,可以参考我之前的文章ssh的秘钥认证做配置即可(ansible官方推荐用ssh秘钥认证)

    最后看看ping多台主机的情况:

     ansible all -m ping
    

    返回结果:

    表示我们可以连接到所有的受控主机了。
    了解了ansible的安装、配置和最基础用法,后面我们会继续研究它的其他用法。

  • 相关阅读:
    VCSA 6.5 升级 VCSA 6.7
    使用再生龙Clonezilla备份还原Linux系统
    gulp前端自动化构建工具学习笔记(mac)
    Echarts基本图表的学习笔记
    jQuery中$.ajax()用法
    jQuery实现淡入淡出轮播图带左右按钮及下方小圆点
    js解析XMl文件,兼容IE、Firefox、谷歌
    HTML<marquee>标签实现滚动公告通知、广告的效果
    画太极
    让IE6 IE7 IE8 IE9 IE10 IE11支持Bootstrap的解决方法
  • 原文地址:https://www.cnblogs.com/huangmengke/p/11503156.html
Copyright © 2011-2022 走看看