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
    
  • 相关阅读:
    java反射机制2
    Java反射机制
    EKT Java企业级关键技术强化 Enterprise Edition
    idea导入tomcat后解决控制台中文乱码问题(day12)
    大对象数据LOB的应用 (day10)
    Java关键技术强化:JDK5.0新特性 (day08)
    Java关键技术强化:JDK5.0新特性1 (day07)
    Java高效特性:反射(二)之获取Class对象的四种方式及其区别 (day06)
    Java关键技术强化:类加载器 (day05)
    Java高级特效:反射 (day04)
  • 原文地址:https://www.cnblogs.com/syushin/p/13809570.html
Copyright © 2011-2022 走看看