美文网首页
ansible使用笔记(一)ansible安装及常用配置说明

ansible使用笔记(一)ansible安装及常用配置说明

作者: Bigyong | 来源:发表于2020-11-06 21:20 被阅读0次

    目录
    一、ansible介绍
    二、ansible安装及常用配置说明

    一、ansible介绍
    ansible是2013年推出的一款IT自动化和DevOps软件,2015年被RedHat收购。是基于Python研发,糅合很多老运维工具的优点,实现了批量操作系统配置,批量程序部署,批量运行命令等功能

    ansible可以实现

    • 自动化部署APP
    • 自动化管理配置项
    • 自动化持续交付
    • 自动化(AWS)云服务管理

    ansible优点

    • 主从工作模式 只需要SSH和Python即可使用,无客户端
    • ansible功能强大,支持自定义模块 模块丰富 支持playbook
    • 上手容易,门槛低
    • 基于Python开发,做二次开发更容易
    • 使用公司比较多,社区活跃

    ansible特性

    • 模块化设计,调用特定的模块完成特定任务
    • 基于Python语言实现
    • paramiko
    • PyYAML(半结构化语言)
    • Jinja2
    • 其模块支持JSON等标准输出格式,可以采用任何编程语言重写

    管理主机

    • Ansible可以在安装了Python 2(2.7版)或Python 3(3.5版及更高版本)的任何计算机上运行。这包括Red Hat,Debian,CentOS,macOS,任何BSD等。控制节点不支持Windows
    • ansible 使用以下模块,都需要安装
      paramiko
      PyYAML(半结构化语言)
      Jinja2
      httplib2
      six

    对于被托管的主机

    • ansible默认通过SSH协议管理机器
    • 被管理主机要开启SSH服务,允许ansible主机登录
      在托管节点上也需要安装Python 2(2.7版)或Python 3(3.5版及更高版本)
      如果托管节点上开启中了SElinux,需要安装libselinux-Python

    部署证书文件
    ansible 是通过SSH在远程执行命令的,SSH远程执行命令必须通过认证才行,密码写入配置文件安生性很差,一般会使用key方式认证,给所有主机公钥
    没有秘钥命令执行会出错

    二、ansible安装及常用配置说明
    环境准备
    6台主机,1台管理主机,5台托管主机,以实现批量程序部署,批量运行命令等功能,具体要求如下表

    ansible常用配置参数说明

    • ansible配置文件查找顺序

    • 首先检测 ANSIBLE_CONFIG变量定义的配置文件

    • 其次检查当前目录下 ./ansible.cfg文件

    • 再次检查当前用记家目录下 ~/ansible.cfg 文件

    • 最后检查/etc/ansible/ansible.cfg文件

    • /etc/ansible/ansible.cfg是ansible默认配置文件路径

    • /etc/ansible/hosts 是ansible默认host文件路径

    ansible.cfg配置文件
    inventory 定义托管主机地址配置host文件路径名 指定的配置文件,写入远程主机的地址
    host_key_checking = False ssh主机key验证配置参数
    -如果为False,不需要输入yes
    -如果为Ture,等待输入yes
    ansible_ssh_prot
    ssh端口号:如果不是默认的端口号,通过此变量设置
    ansible_ssh_user
    默认的ssh用户名
    ansible_ssh_pass
    ssh密码(这种方式并不安全,强烈建议使用SSH密钥)
    ansible_ssh_private_key_file
    ssh使用的私钥文件,适用于有多个密钥,而你不想使用SSH代理的情况

    ansible 托管主机地址配置host文件
    格式
    # 表示注释
    [组名称]
    主机名称或IP地址, 其它参数

    • vars变量定义,用于组名后面
      例如
      [all:vars] //指定所有组key的存放位置
      ansible_ssh_private_key_file="/root/keyfile/id_dsa"
    • children子组定义,用于引用其它组名称
      例如
      [app:children] //其中web、db分别为不同分组
      web
      db
    [root@ansible myansible]# cat myhost 
    [app1]
    web1
    db1
    [app2]
    web2
    db2
    [app:children]
    app1
    app2
    [other]
    cache
    [all:vars]
    ansible_ssh_private_key_file="/root/keyfile/id_dsa"
    
    • ansiblew命令基础
      列出要执行主机
      ansible all --list-hosts
    • 批量检测主机
      ansible all -m ping -k
    • ansible主机集合 -m 模块名称 -a 模块参数
      主机集合 主机名或分组名,多个使用"逗号"分隔
      -m 模块名称,默认command模块
      -a or --args模块参数
      其它参数
      -i inventory文件路径,或可执行脚本
      -k 使用交互式登陆密码
      -e 定义变量
      -v 显示详细信息

    1 )管理主机 安装EPEL源 EPEL源包含上面ansible所需要的所有模块

    [root@ansible ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
    [root@ansible ~]# yum clean all
    [root@ansible ~]# yum repolist
    

    2)安装ansible

    [root@ansible ~]# yum -y install ansible              
    [root@ansible ~]# ansible --version  //查看ansible版本
    ansible 2.9.13
    

    3)生成秘钥 配置免秘登陆托管主机

    [root@ansible ~]# vim /etc/ansible/hosts
    [web]
    web1
    web2
    [db]
    db[1:2]
    [other]
    cache
    
    [root@ansible ~]# ssh-keygen  //一路回车生成秘钥
    [root@ansible .ssh]# ansible all -m ping  //测试 失败
    web1 | UNREACHABLE! => {
        "changed": false, 
        "msg": "Failed to connect to the host via ssh: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).", 
        "unreachable": true
    }
    db1 | UNREACHABLE! => {
        "changed": false, 
        "msg": "Failed to connect to the host via ssh: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).", 
        "unreachable": true
    }
    ......
    
    [root@ansible .ssh]# for i in {40..45};do ssh-copy-id root@192.168.4.1$i; done   //使用for循环给托管主机传送秘钥 免秘登陆
    [root@ansible .ssh]# ansible all -m ping  //成功
    db2 | SUCCESS => {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/bin/python"
        }, 
        "changed": false, 
        "ping": "pong"
    }
    db1 | SUCCESS => {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/bin/python"
        }, 
        "changed": false, 
        "ping": "pong"
    }
    ......
    

    4 )指定秘钥存放位置

    [root@ansible ~]# mkdir keyfile/
    [root@ansible ~]# mv .ssh/id_dsa keyfile/  //改变key的存放位置
    [root@ansible ~]# ansible all -m ping    //失败
    web1 | UNREACHABLE! => {
        "changed": false, 
        "msg": "Failed to connect to the host via ssh: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).", 
        "unreachable": true
    }
    ......
    
    [root@ansible ~]# cat /etc/ansible/hosts
    [web]
    web1
    web2
    [db]
    db[1:2]
    [other]
    cache
    [all:vars]
    ansible_ssh_private_key_file="/root/keyfile/id_dsa"   //指定key的存放位置
    [root@ansible ~]# ansible all -m ping   //成功
    db2 | SUCCESS => {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/bin/python"
        }, 
        "changed": false, 
        "ping": "pong"
    }
    ......
    
    [root@ansible ~]# mkdir myansible
    [root@ansible ~]# cd myansible/
    [root@ansible myansible]# vim myhost
    [app1]
    web1
    db1
    [app2]
    web2
    db2
    [app:children]
    app1
    app2
    [other]
    cache
    [all:vars]
    ansible_ssh_private_key_file="/root/keyfile/id_dsa"
    
    [root@ansible myansible]# vim ansible.cfg
    [defaults]
    inventory = myhost
    host_key_checking = False
    
    [root@ansible myansible]# ls
    ansible.cfg  myhost
    
    [root@ansible myansible]# ansible app1 -m ping
    web1 | SUCCESS => {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/bin/python"
        }, 
        "changed": false, 
        "ping": "pong"
    }
    db1 | SUCCESS => {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/bin/python"
        }, 
        "changed": false, 
        "ping": "pong"
    }
    
    [root@ansible myansible]# ansible app -m ping
    db1 | SUCCESS => {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/bin/python"
        }, 
        "changed": false, 
        "ping": "pong"
    }
    ......
    

    5 ) 测试ansible.cfg文件

    [root@ansible myansible]# ansible app --list-hosts   //首先检查本目录 下ansible.cfg文件 成功
      hosts (4):
        web1
        db1
        web2
        db2
    [root@ansible myansible]# cd ..
    [root@ansible ~]# ansible app --list-hosts    //本目录下无ansible.cfg文件  默认的/etc/ansible/hosts 也没有定义app 组 报错
    [WARNING]: Could not match supplied host pattern, ignoring: app
    [WARNING]: No hosts matched, nothing to do
      hosts (0):
    

    相关文章

      网友评论

          本文标题:ansible使用笔记(一)ansible安装及常用配置说明

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