暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

ansible系列第一篇(安装与配置)

运维开发圈 2018-12-01
139

ansible的安装和使用

  • 介绍:

    ansible是一个自动化运维工具.
    ansible通过SSH协议管理服务器.
    ansible基于模块来完成自动化任务.
    ansible完成批量性任务,自动部署各种服务和环境.

  • 安装

    使用python3的pip工具安装:pip3 install ansible

  1. 开始使用:

  • 管理的前提条件:

  • 管控机可通过ssh连接受控机. 建议设置密钥认证.明文密码不安全.

    管控端用户和受控端用户都是普通用户.
    生成ssh密钥的命令: ssh-keygen -t rsa

    私钥和公钥生成后默认在~/.ssh目录下.
    ansible管控端的公钥需要放在受控端的.ssh/authorized_keys文件中.

    执行命令: 
        ssh-copy-id -i ~/.ssh/id_rsa.pub  yuan@192.168.1.1 -p200  
        这条命令会将公钥存放到authorized_keys文件中。
        -i 选项指定要传输的公钥文件
        指定用户和IP,端口等信息。

  • ssh代理: ssh-agent

    ssh-agent 可管理私钥。
    使用不同密钥连接不同主机,ssh-agent可自动选择对应的密钥进行认证。
    密钥设置密码时,也需要使用ssh-agent来管理。

    启动ssh代理并添加密钥:
        ssh-agent bash  执行后会在当前shell中启动一个默认shell. ssh-agent在子shell中执行。
        eval ssh-agent 进入新创建的子shell,会启动一个ssh-agent进程。
        ssh-agent -k   关闭ssh-agent代理。

    ssh-agent管理密钥:
        将私钥添加到ssh代理:
            ssh-add ~/.ssh/id_rsa_custom
    查看ssh代理中已经添加了那些私钥:
        ssh-add -l
    列出代理中所有私钥对应的公钥内容:
        ssh-add -L
    从代理中移除某个已经添加的私钥:
        ssh-add -d 要移除的私钥名称
    清空代理中的所有私钥:
        ssh-add -D
    临时锁定ssh代理:
        ssh-add -x
    解锁ssh代理:
        ssh-add -X   


  • 配置主机清单(Inventory):

    ansible的配置清单为: /etc/ansible/hosts
    sudo mkdir /etc/ansible/
    sudo vim /etc/ansible/hosts
    [test]   组名称
    192.168.1.1 ansible_port=200

  • 测试
    ansible test -m ping

    生成密钥指定输出文件名称的方式: 
    在管控端执行:
    $ssh-keygen -t rsa -f id_rsa-test
    ssh-copy-id -i ~/.ssh/id_rsa-test.pub  yuan@192.168.1.1 -p200
    ssh -p200 yuan@192.168.1.1
    yuan@192.168.1.1's password: 
    仍提示输入密码,说明没有找到对应的私钥。

    ssh-agent bash
    eval ssh-agent
    ssh-add ~/.ssh/id_rsa-test
    再次ssh -p2020 yuan@192.168.1.1 登录,已经免密钥登录成功。

  1. 配置清单详解

  • 分组功能

    将同一类型的应用主机分为一组,通过组名管理组内的所有主机。

    例如:
        [web]
        192.168.1.3
        [db]
        192.168.1.5

  • 支持在组内嵌套组:

    例如:
        [webA]
        192.168.1.3
        [webB]
        192.168.1.4
        [web:children]   //表示当前组中存在子组。
        webA
        webB

    建议采用在组内嵌套组的方法,这样看起来逻辑更清晰。

  • 支持INI配置

    例如: 
      [web]
      192.168.1.3
      [db]
      192.168.1.5      

  • 支持YAML语法

    YAML语法:
      第一行组名
      第二行使用一个空格作为缩进。使用hosts关键字。
      第三行开头使用两个空格作为缩进。
      第四行开头使用两个空格作为缩进。
    例如:
    test:
      hosts:
        192.168.1.1
        test1:
          ansible_host: 192.168.1.5
          ansible_port: 150
        192.168.1.6

    在组中嵌套组的YAML写法:
    all:
      children:
        web:
          children:
            webA:
              hosts:
                192.168.1.3:
            webB:
              hosts:
                192.168.1.4:

    上述配置说明: web组有两个子组,分别为webA组和webB组,而这两个组分别有自己组内的主机。
    建议采用YAML语法。

    ansible自动化部署工具彻底提高了运维工程师的工作效率,减少了运维工程师繁琐而重复的工作量。是中小型互联网公司的首选自动化运维工具。提高工作效率,才能有更多的时间去掌握主流的新技术。你还在等什么呢? 一起进入技术的海洋里,遨游吧。

不为失败找理由,只为成功找方法。一起学习,一起加油吧!奋斗吧!燃烧你的小宇宙吧!

文章转载自运维开发圈,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论