zoukankan      html  css  js  c++  java
  • CentOS7安装Ansible

    环境说明

    测试环境说明,有3台机器,一台作为ansible控制节点,两台作为被管节点。

    角色 IP 组名
    ansible控制节点 192.168.18.130 -
    被管节点 192.168.18.131 webserver
    被管节点 192.168.18.132 webserver

    控制节点系统环境说明:

    [root@syushin ~]# cat /etc/redhat-release 
    CentOS Linux release 7.7.1908 (Core)
    [root@syushin ~]# uname -a
    Linux syushin 3.10.0-1062.el7.x86_64 #1 SMP Wed Aug 7 18:08:02 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
    [root@syushin ~]# getenforce 
    Disabled
    [root@syushin ~]# hostname -I
    192.168.18.130
    

    安装Ansible

    控制节点操作

    # 配置epel源
    [root@syushin ~]# wget -O /etc/yum.repos.d/epel-7.repo http://mirrors.aliyun.com/repo/epel-7.repo  
    
    # 清空本地yum缓存
    [root@syushin ~]# yum clean all
    
    # 更新缓存
    [root@syushin ~]# yum makecache
    
    # 安装ansible
    [root@syushin ~]# yum install -y ansible
    
    # 查看ansible版本
    [root@syushin ~]# ansible --version
    ansible 2.9.13
      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, Aug  7 2019, 00:51:29) [GCC 4.8.5 20150623 (Red Hat 4.8.5-39)]
    

    Ansible介绍

    ansible.cfg

    Ansible的主要配置文件

    [root@syushin ~]# tree /etc/ansible/
    /etc/ansible/
    ├── ansible.cfg	# Ansible主配置文件
    ├── hosts		# 主机清单文件
    └── roles		# 存放角色的目录
    

    ansible主配置文件的内容大部分不需要修改,只列出一些主要的配置:

    [defaults]
    #inventory      = /etc/ansible/hosts #定义主机清单配置文件
    #library        = /usr/share/my_modules/ # 库文件存放目录
    #remote_tmp     = ~/.ansible/tmp # 临时py命令文件存放在远程主机目录
    #local_tmp      = ~/.ansible/tmp # 本地的临时命令执行目录
    #forks          = 5 # 默认并发数
    #sudo_user      = root # 默认sudo用户
    #ask_sudo_pass = True # 每次执行ansible命令是否询问ssh密码
    #ask_pass      = True
    #remote_port    = 22 
    #module_name    = command # 默认模块,可以修改为shell模块
    #host_key_checking = False # 检查对应服务器的host_key,建议取消注释(第一次使用ssh密钥连接时需要手动输入yes,将其设置为false,就不需要手动输入了)
    #log_path = /var/log/ansible.log # 日志文件,建议启用
    

    ansible常用命令工具

    • /usr/bin/ansible:主程序,临时命令执行工具
    • /usr/bin/ansible-playbook:定制自动化任务,编排剧本工具
    • /usr/bin/ansible-doc:查看配置文档,模块功能查看工具
    • /usr/bin/ansible-galaxy:上传和下载优秀代码或者Roles模块的官网平台
    • /usr/bin/ansible-pull:远程执行命令工具
    • /usr/bin/ansible-console:基于console界面与用户交互的执行工具

    日常主要用ansible的管理方式:

    • Ad-Hoc : 即用ansible命令,主要用于临时命令,一次性任务的使用场景。
    • ansible-playbook : 主要用于长期规划好的,大型项目的场景,需要有前期的规划过程。

    ansible-doc示例:

    $ ansible-doc -l # 列出所有模块
    $ ansible-doc ping # 查看指定模块帮助用法
    $ ansible-doc -s ping # 显示指定模块的playbook片段
    

    ansible 命令格式:

    $ ansible <host-pattern> [-m module_name] [-a args]
    
    • <host-pattern>:指定目标主机,可以与/etc/ansible/hosts的格式一样
    • -m:指定模块名
    • -a:指定模块参数
    • -k:输入此选项使用密码认证(不建议使用)
    • -b:指定sudo到哪个用户,如-b root
    • -C:检查,不执行
    • --list-hosts:查看主机列表,可简写--list
    • -v:显示详细的执行过程,要想更详细的信息-vv-vvv

    Inventory

    ansible的主要功用在于批量主机操作,为了便携地使用其中部分主机,可以在inventory file中将其分组命名,默认的inventory file是/etc/ansible/hosts。inventory file可以有多个,且可以通过Dynamic Inventory来动态生成。

    主机清单文件格式

    • Inventory文件遵循INI文件风格、中括号中的字符表示组名,可以将同一个主机同时归并到多个不同的组中。
    • 如果目标主机使用了非默认的SSH端口,可以在主机名称之后使用冒号加端口号标明
    • 如果主机遵循相似的命名模式,还可以使用列表的方式标识主机

    示例:

    $ cat /etc/ansible/hosts
    192.168.18.131
    
    [dbserver]
    db1.example.com
    db2.example.com
    
    [web1]
    www.web[1:100].example.com
    
    [web2]
    web[a:f].example.com
    
    [appserver]
    10.0.0.[1:100]
    

    Inventory内置了一些参数,这些参数在日常工作中经常用到,可以直接在inventory中使用它们。常见参数如下:

    参数 说明 示例
    ansible_ssh_host 定义hosts ssh地址 ansible_ssh_host=192.169.18.131
    ansible_ssh_port 定义hosts ssh端口 ansible_ssh_port=30022
    ansible_ssh_user 定义hosts ssh用户 ansible_ssh_user=admin
    ansible_ssh_pass 定义hosts 认证密码 ansible_ssh_pass='123456'

    3.4 host-pattern

    一个pattern通常关联到一系列组(主机的集合) 。host-pattern支持的写法有很多种形式,如下:

    通配符写法

    ansible "*" -m ping
    ansible all -m ping
    

    可以写IP地址或者主机名或者组

    ansible 192.168.18.131 -m ping
    ansible 192.168.18.* -m ping
    ansible "webserver" -m ping
    

    或关系,主机可以存在多个组中,多组之间用冒号隔开表示或的关系

    ansible "web1:web2" -m ping
    

    逻辑与,可以求两个组的交集,即同时在两个组中的主机

    ansible "web1:&web2" -m ping
    

    逻辑非,在web1组中,但是不在web2组中的主机

    ansible "web1:!web2" -m ping
    

    也支持正则表达式写法,比如下面命令会匹配主机web1.test.com 或者web2.test.com

     ansible "~(web1|web2).*.test.com" -m ping
    

    ansible小试牛刀

    前面环境说明中,有控制节点130和两个被管节点131与132,现在配置环境进行测试

    分发秘钥

    ansible是自动化运维工具,是基于SSH的。为了避免Ansible下发指令输入目标主机密码,可以用过证书签名达到SSH无密登录。在主节点进行配置,配置步骤如下:

    [root@syushin ~]# ssh-keygen -t rsa		# 生成秘钥
    
    [root@syushin ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.18.131	# 将秘钥分发给被管主机
    
    [root@syushin ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.18.132	# 将秘钥分发给被管主机
    
    # 验证是否可以无密登录
    [root@syushin ~]# ssh root@192.168.18.131
    Last login: Tue Oct 13 16:08:59 2020 from 192.168.18.130
    [root@localhost ~]# exit
    登出
    Connection to 192.168.18.131 closed.
    [root@syushin ~]# ssh root@192.168.18.132
    Last login: Tue Oct 13 16:08:59 2020 from 192.168.18.130
    [root@localhost ~]# 
    

    定义主机清单

    [root@syushin ~]# cat /etc/ansible/hosts # 编辑inventory文件,内容如下:
    [web1]
    192.168.18.131
    
    [web2]
    192.168.18.132
    

    测试

    [root@syushin ~]# ansible web1 -m ping
    192.168.18.131 | SUCCESS => {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/bin/python"
        }, 
        "changed": false, 
        "ping": "pong"
    }
    [root@syushin ~]# ansible web2 -m ping
    192.168.18.132 | SUCCESS => {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/bin/python"
        }, 
        "changed": false, 
        "ping": "pong"
    }
    [root@syushin ~]# ansible web2 -m shell -a "pwd"
    192.168.18.132 | CHANGED | rc=0 >>
    /root
    
  • 相关阅读:
    hdu 2019 数列有序!
    hdu 2023 求平均成绩
    HDU 5805 NanoApe Loves Sequence (思维题) BestCoder Round #86 1002
    51nod 1264 线段相交
    Gym 100801A Alex Origami Squares (求正方形边长)
    HDU 5512 Pagodas (gcd)
    HDU 5510 Bazinga (字符串匹配)
    UVALive 7269 Snake Carpet (构造)
    UVALive 7270 Osu! Master (阅读理解题)
    UVALive 7267 Mysterious Antiques in Sackler Museum (判断长方形)
  • 原文地址:https://www.cnblogs.com/syushin/p/13809570.html
Copyright © 2011-2022 走看看