美文网首页
Ansible -- 自动化运维

Ansible -- 自动化运维

作者: saoraozhe3hao | 来源:发表于2018-09-26 10:00 被阅读0次

    官网:https://www.ansible.com/
    Github:https://github.com/ansible/ansible
    历史:美国人Michael DeHaan 于 2012年创始Ansible,2015年被Red Hat收购
    特征:无客户端程序,通过ssh通信,易用性高,效率较低
    同类产品:Puppet、Chef、SaltStack

    概念:
    EPEL:(Extra Packages for Enterprise Linux,是基于Fedora的一个项目,为“红帽系”的操作系统提供额外的软件包
    YAML:YAML Ain’t Markup Language,Clark Evans在2001年发表了这种语言

    管理机安装

    0、前提是控制机和客户机都已安装Python,检查 python -V
    1、添加yum 源,选好对应的版本
    vim /etc/yum.repos.d/ansible

    [epel]     # 先检查/etc/yum.repos.d是否已经配置了epel源,没有才需要者段
    name = all source for ansible
    baseurl = https://mirrors.aliyun.com/epel/7/x86_64/
    enabled = 1
    gpgcheck = 0
    
    [ansible]
    name = all source for ansible
    baseurl = http://mirrors.aliyun.com/centos/7.5.1804/os/x86_64/
    enabled = 1
    gpgcheck = 0
    

    2、yum clean all;yum install ansible -y

    配置

    /etc/ansible/ansible.cfg

    forks = 4  # 最大进程数,一般设为cpu核数 * 2
    

    /etc/ansible/hosts
    添加客户机,可以分组

    172.31.171.139
    [group1]
    172.31.171.140
    

    步骤

    1、建立互信
    生产密钥对:ssh-keygen -t rsa -P '' // 存放在~/.ssh/,-t 加密类型,-P私钥口令
    发送公钥:ssh-copy-id -i ~/.ssh/id_rsa.pub root@xx.xx.xx.xx // 追加到远程主机的 ~/.ssh/authorized_key上
    2、连接测试:ansible all -m ping # 使用ping模块
    3、执行ad-hoc命令,即单次命令,相对于playbook而言
    命令的一般格式为:ansible 目标机表达式 -m 模块 -a '参数'
    不指定模块时,默认模块为command,不能带参数;可以改用shell模块,可以带参数
    目标机表达式:*(通配),:(和)

    常用模块

    模块列表:https://docs.ansible.com/ansible/latest/modules/modules_by_category.html
    除了Command和Shell,其他模块的参数都是 key=value格式

    Shell 模块:ansible all -m shell -a 'cat temp.txt'
    Copy模块:ansible all -m copy -a 'src=./temp.txt dest=temp.txt' # 把管理机的文件拷贝到客户机
    File模块:ansible all -m file -a 'path=/etc/foo.conf owner=foo group=foo mode=0644' # 设置文件权限

    playbook

    ---
    - hosts: all
      remote_user: root
      sudo: yes  
      vars:           # 定义变量,可在模板和参数中通过{{}}引用
        port: 80
        max: 200
        tomcat:    # 通过{{tomcat[0]}} 引用
             - 127.0.0.0
             - 127.0.0.1
      tasks:
        - name: push temp   # 用于控制台显示
          template: src=temp.txt dest=temp1.txt  # 模块名:参数
          ignore_errors: True
          when: port > 80  # 满足条件时,才执行这个task
          notify:           # 给客户机推送的文件和上次不一样时,才通知执行name为restart apache的handler
            - restart apache
      handlers:       # 由notify触发,只会触发一次
        - name: restart apache
          service: name=apache state=restarted  # service模块用于启停服务
    

    执行playbook:
    ansible-playbook playbook.yml
    ansible-playbook install.yml -k -K //没有互信,要-k输入密码。没有sudo NOPASSWD,要-K 输入 root密码

    整合Jenkins

    让ansible控制机,作为Jenkins的从节点;在任务的Post Steps中调用ansible命令

    相关文章

      网友评论

          本文标题:Ansible -- 自动化运维

          本文链接:https://www.haomeiwen.com/subject/ywcdoftx.html