zoukankan      html  css  js  c++  java
  • 自动化工具ansible学习

    配置自动化工具

    配置自动化的相关产品

    序号 工具 描述
    1 ansible 开箱即用,ssh协议
    2 saltack 需要agent端配合,配置部署速度块
    3 puppet 老牌配置自动化工具,需要agent端配合

    配置自动化应用带来的好处:提高工作效率,提高配置文件按的准确性,降低人力成本。

    ansiable介绍

    ansible:无主无从架构,开箱即用,用完即走

    ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能

    ansiable安装

    安装epel-release YUM源

    yum -y install epel-release 
    

    安装ansible

    yum -y install ansible
    

    ansible版本查看

    [root@node2 ~]# ansible --version
    ansible 2.9.24
      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, Oct 30 2018, 23:45:53) [GCC 4.8.5 20150623 (Red Hat 4.8.5-36)]
    

    主机清单

    主机清单作用

    ansible controller对主机操作时,仅认主机清单中定义的主机列表,即从主机清单中读取主机列表时,才可以进行配置。

    • 用于ansible 配置时读取主机列表

    • 实现主机分组

    主机清单定义方法

    主机清单存储位置;

    /etc/ansible/hosts
    

    方法一

    直接在主机清单中写入主机IP地址或者主机名(需要能够进行解析)

    192.168.160.20
    或者
    node1
    

    方法二

    在主机清单文件中添加主机分组,然后把主机IP或者主机名写入分组内即可

    [master]
    192.168.160.128 
    [node]
    192.168.160.129 
    192.168.160.130 
    或者
    [master]
    master
    [node]
    node1
    node2
    

    ansible应用

    ansible ping模块实现测试主机的互通性

    第一步:实现多主机之间免密登录

    #生成密钥对(交互)
    [root@master ~]#ssh-keygen -t rsa
    #生成密钥对(非交互)
    [root@master ~]#ssh-keygen -t rsa -f /root/.ssh/id_rsa -N ' '
    
    #密钥对同步
    [root@master ~]# ssh-copy-id node1
    

    第二步:定义主机清单

    #主机清单存储位置
    /etc/ansible/hosts
    
    #主机清单中添加主机
    
    [root@master ~]#cat /etc/ansible/hosts
    [master]
    192.168.160.128 #master
    [node]
    192.168.160.129 #node1
    192.168.160.130 #node2
    

    第三步:ping模块使用

    #ansible命令格式
    ansible 主机清单中ip或分组名称 -m 模块
    
    #ping模块使用
    IP地址
    [root@master ~]# ansible 192.168.160.130 -m ping
    192.168.160.130 | SUCCESS => {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/bin/python"
        },
        "changed": false,
        "ping": "pong"
    }
    分组名称
    [root@master ~]# ansible master  -m ping
    192.168.160.128 | SUCCESS => {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/bin/python"
        },
        "changed": false,
        "ping": "pong"
    }
    [root@master ~]# ansible node  -m ping
    192.168.160.130 | SUCCESS => {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/bin/python"
        },
        "changed": false,
        "ping": "pong"
    }
    192.168.160.129 | SUCCESS => {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/bin/python"
        },
        "changed": false,
        "ping": "pong"
    

    ansible cron模块实现配置多主机时间同步

    第一步:选择时钟源服务器

    • 国内建议使用阿里2时钟源 time1.aliyun.com
    • 国际建议使用微软时钟源time.windows.com

    第二步:cron模块使用

    #ansible命令格式
    ansible 主机清单中IP或分组名称 -m 模块 -a "参数"
    
    #cron模块使用
    [root@master ~]# ansible master -m cron -a 'name="test cron1" job="ntpdate time1.aliyun.com" minute=0 hour=*/1'
    192.168.160.128 | CHANGED => {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/bin/python"
        },
        "changed": true,
        "envs": [],
        "jobs": [
            "test cron1"
        ]
    }
    
    [root@master ~]# ansible node -m cron -a 'name="test cron1" job="ntpdate time1.aliyun.com" minute=0 hour=*/1'
    192.168.160.130 | CHANGED => {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/bin/python"
        },
        "changed": true,
        "envs": [],
        "jobs": [
            "test cron1"
        ]
    }
    192.168.160.129 | CHANGED => {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/bin/python"
        },
        "changed": true,
        "envs": [],
        "jobs": [
            "test cron1"
        ]
    }
    
    #每小时与时钟源同步一次
    #远程主机结果
    [root@master ~]# crontab -l
    #Ansible: test cron1
    0 */1 * * * ntpdate time1.aliyun.com
    
    [root@node1 ~]# crontab -l
    #Ansible: test cron1
    0 */1 * * * ntpdate time1.aliyun.com
    
    [root@node2 ~]# crontab -l
    #Ansible: test cron1
    0 */1 * * * ntpdate time1.aliyun.com
    
    
    

    ansible copy模块实现多主机配置文件同步

    步骤:

    第一步:准备本地解析文件

    [root@master ~]# cat /etc/hosts
    127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
    ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
    192.168.160.128 master
    192.168.160.129 node1
    192.168.160.130 node2
    
    [root@node1 ~]# cat /etc/hosts
    127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
    ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
    192.168.160.128 master
    192.168.160.129 node1
    192.168.160.130 node2
    
    [root@node2 ~]# cat /etc/hosts
    127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
    ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
    192.168.160.128 master
    192.168.160.129 node1
    192.168.160.130 node2
    
    

    第二步:copy模块应用

    #同步文件到node节点
    [root@master ~]# ansible node -m copy -a "src=/root/pod.env.yaml dest=/root/"
    192.168.160.130 | CHANGED => {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/bin/python"
        },
        "changed": true,
        "checksum": "d41c517caaa7ccb9942f68f6845629d615e66798",
        "dest": "/root/pod.env.yaml",
        "gid": 0,
        "group": "root",
        "md5sum": "484c54f0664aa18d7117b6bda8e49693",
        "mode": "0644",
        "owner": "root",
        "size": 339,
        "src": "/root/.ansible/tmp/ansible-tmp-1629449369.61-36208-68851603774490/source",
        "state": "file",
        "uid": 0
    }
    192.168.160.129 | CHANGED => {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/bin/python"
        },
        "changed": true,
        "checksum": "d41c517caaa7ccb9942f68f6845629d615e66798",
        "dest": "/root/pod.env.yaml",
        "gid": 0,
        "group": "root",
        "md5sum": "484c54f0664aa18d7117b6bda8e49693",
        "mode": "0644",
        "owner": "root",
        "size": 339,
        "src": "/root/.ansible/tmp/ansible-tmp-1629449369.6-36206-26956460843436/source",
        "state": "file",
        "uid": 0
    }
    
    #查看同步文件
    [root@node1 ~]# ls -l
    total 12
    -rw-------. 1 root root 2024 Jul  8 09:43 anaconda-ks.cfg
    -rw-r--r--. 1 root root 2072 Jul  8 09:46 initial-setup-ks.cfg
    -rw-r--r--  1 root root  339 Aug 20 16:49 pod.env.yaml
    
    [root@node2 ~]# ls -l
    total 16
    -rw-------. 1 root root 2024 Jul  9 15:05 anaconda-ks.cfg
    -rw-r--r--. 1 root root 2072 Jul  9 15:07 initial-setup-ks.cfg
    -rw-r--r--  1 root root  339 Aug 20 16:49 pod.env.yaml
    

    ansible shell模块远程执行命令

    [root@master ~]# ansible node -m shell -a 'cat /etc/hosts '
    192.168.160.130 | CHANGED | rc=0 >>
    127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
    ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
    192.168.160.128 master
    192.168.160.129 node1
    192.168.160.130 node2
    192.168.160.129 | CHANGED | rc=0 >>
    127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
    ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
    192.168.160.128 master
    192.168.160.129 node1
    192.168.160.130 node2
    
  • 相关阅读:
    Java实现 蓝桥杯VIP 算法训练 连接字符串
    大多云盘都挤兑在了企业级市场
    115能做到100个亿(2016年05月31日),2013营收两亿元
    Dropbox 有哪些鲜为人知的使用技巧?
    Qt 添加外部库文件(四种方法)
    百度全新的ARM架构服务器,一个2U机箱装6台,每台4个3T硬盘,每个机箱共72TB
    EntityFramework中支持BulkInsert扩展
    基于A2DFramework的事件机制实现
    事件机制与消息机制的架构设计区别
    .net平台下socket异步通讯(代码实例)
  • 原文地址:https://www.cnblogs.com/xiaozhang1995/p/15167288.html
Copyright © 2011-2022 走看看