zoukankan      html  css  js  c++  java
  • Ansible 清单与命令解析

    在大规模的配置管理工作中我们需要管理不同业务的不同机器,这些机器的信息都存放在 Ansible 的 Inventory 组件里面,在我们工作中配置部署针对的主机必须先存放在 Invento 组里面,这样才能使用 Ansible 对它进行操作,默认 Ansible 的 Inventory 是一个静态的 INI 格式的文件/etc/ansible/hosts 当然,还可以通过 ANSIBLE_HOSTS 环境变量指定或者运行 ansible 和 ansible-playbook 的时候用 -i 参数临时设置.

    主机和组

    我们可以通过配置/etc/ansible/hosts这个文件来定义主机和主机组,例如下面的代码.

    [root@localhost ~]# cat -n /etc/ansible/hosts
    
    1 192.168.1.10 ansible_ssh_pass='123123'
    2 192.168.1.20 ansible_ssh_pass='123123'
    3 
    4 [docker]
    5 172.168.1.10[1:9]
    
    6 [docker:vars]
    7 ansible_ssh_pass='123123'
    
    
    8 [web_server]
    9  192.168.10.10
    10 192.168.10.20
    11 192.168.10.30
    
    

    上图的参数解析:
    ● 第1-2行:定义了两台主机,并且使用内置变量给予了SSH登陆密码.
    ● 第4-5行:定义了一个docker组,且组内有101-109这9台机器的定义.
    ● 第6-7行:定义为上面的docker组统一赋值一个密码.
    ● 第8-11行:定义了一个web_server组,其中有三台主机.

    这就是,常用的组的定义与声明部分啦.

    端口与别名

    ssh默认的端口是22 (此时的Ansible主机配置文件可以省略),但是如果某些主机的ssh运行在自定义的端口上,Ansible使用Paramiko进行ssh连接时不会使用你ssh配置文件中列出的端口,但是如果修改ansible使用openssh进行ssh连接时将会使用:

    1.在Client客户端上ssh开启2个端口连接,下面一段话随意加入到指定配置文件里即可.

    [root@Client ~]# vim /etc/ssh/sshd_config
    Port 10086
    Port 22
    
    [root@Client ~]# systemctl restart sshd
    

    2.在Ansible服务端的配置,配置主机清单列表同时指定一个主机端口即可.

    [root@Ansible ~]# vim /etc/ansible/hosts
    
    [web_server]
    192.168.10.10:10086
    192.168.10.20:10086
    
    [web_server:vars]
    ansible_ssh_pass='123123'
    

    ## 使用主机变量

    这里介绍 Ansible Invento 的内置的一些参数,这些参数我们在实际工作中也会经常使用到.

    内置参数 参数说明
    ansible_ssh_host 指定被管理的主机的真实IP
    ansible_ssh_port 指定连接到被管理主机的ssh端口号,默认是22
    ansible_ssh_user ssh连接时默认使用的用户名
    ansible_ssh_pass ssh连接时的密码
    ansible_sudo_pass 使用sudo连接用户时的密码
    ansible_sudo_exec 如果sudo命令不在默认路径,需要指定sudo命令路径
    ansible_ssh_private_key_file 秘钥文件路径,秘钥文件如果不想使用ssh-agent管理时可以使用此选项
    ansible_shell_type 目标系统的shell的类型,默认sh
    ansible_connection SSH 连接的类型:local,ssh,paramiko
    ansible_python_interpreter 用来指定python解释器的路径

    上面的实例也可以配置直接使用用户名和密码进行连接

    [root@localhost ~]# vim /etc/ansible/hosts
    
    [web_server]
    192.168.10.10 ansible_ssh_port=10086 ansible_ssh_user=root ansible_ssh_pass='123123'
    
    [docker_server]
    192.168.10.10
    192.168.10.20
    
    [docker_server:vars]
    ansible_ssh_port=10086
    ansible_ssh_user=root
    ansible_ssh_pass='123123'
    

    ## Ansible配置文件解析

    Ansible 配置文件是以 ini 格式存储配置数据的,在 Ansible 中,几乎所有的配置项都可以通过 Ansible 的 playbook 或环境变量来重新赋值,在运行 Ansible 命令时,命令将会按照预先设定的顺序查找配置文件,具体的ansible配置文件包括以下两个部分:

    /etc/ansible/ansible.cfg 和 /etc/ansible/hosts

    ● /etc/ansible/ansible.cfg 主要配置Ansible的一些参数信息
    ● /etc/ansible/hosts 主机清单(被控主机文件),或分组管理
    ● /usr/bin/ansible* 记录了Ansible的命令

    如果你通过操作系统软件包管理工具或 pip 安装,那么你在/etc/ansiblc目录下应该已经有了 ansible.cfg 配置文件.如果你是通过 GitHub 仓库安装的,在你复制的仓库中 examples 目录下可以找到 ansible.cfg 你可以把它拷贝到/etc/ansible目录下.

    接下来看一下Ansible的主配置文件 /etc/ansible/ansible.cfg 里面的参数解析,并说明每个参数代表的含义.

    配 置 参 数 参 数 的 说 明
    inventory = /etc/ansible/hosts Ansible存放可通信主机的列表
    library = /usr/share/my_modules/ Ansible默认搜寻模块的位置
    remote_tmp = $HOME/.ansible/tmp Ansible通过远程传输模块到远程主机,默认传输路径
    log_path = /var/log/ansible.log Ansible默认日志文件保存位置
    pattern = * 如没有提供主机列表,则默认值是对所有主机通信
    forks = 5 默认执行线程数量
    poll_interval = 15 多久回查一下这些任务的状态,默认值是15秒
    sudo_user = root sudo使用的默认用户,默认是root
    ask_sudo_pass = True 控制playbook在执行sudo之前是否询问sudo密码.默认no
    transport = smart 通信机制.默认值为smart
    remote_port = 22 远程SSH端口,默认是22
    module_lang = C 模块和系统之间通信的计算机语言,默认是C语言
    host_key_checking=false 设置是否检查SSH主机密钥

    就介绍这些,这是最常用的,其他的文本请参考

    http://www.ansible.com.cn/docs/intro_configuration.html#environmental-configuration

    Ansible命令参数解析

    看完了上面的配置文件的解析,我们再来看一下,Ansible命令的常用语法格式依旧常用命令参数吧.

    [root@localhost ~]# ansible --help
    
    命令语法:[ ansible [选项] [模块] [参数] [主机列表] ]
    
            -m              #要执行的模块,默认为command
            -a              #指定模块的参数
            -u              #ssh连接的用户名,默认是root
            -k              #提示输入ssh登录密码,当使用密码验证的时候用
            -s              #sudo权限运行
            -U              #sudo到哪个用户,默认为root
            -K              #提示输入sudo密码,当不是NOPASSWD模式时使用
            -C              #只是测试一下会改变什么内容,不会真正去执行
            -c              #指定连接类型(default=smart)
            -f              #fork指定进程并发数,默认为5个
            -i              #指定hosts文件路径,默认default=/etc/ansible/hosts
            -I              #指定pattern对已匹配的主机中再过滤一次
            --list-host     #打印主机列表
            -M              #要执行的模块路径,默认为/usr/share/ansible
            -o              #压缩输出摘要输出
            --private-key   #指定一个私钥路径
            -T              #ssh连接超时时间,默认是10秒
            -t              #日志输出到该目录,日志文件名以主机命名
            -v              #显示详细日志
    

    ## PlayBook命令参数解析

    该指令对于需反复执行的、较为复杂的任务,我们可以通过定义 Playbook 来搞定,它允许使用变量、条件、循环、以及模板,也能通过角色及包含指令来重用既有内容,其通过读取playbook 文件后执行相应的动作.

    [root@localhost ~]# ansible-playbook -h
    
    命令语法:[ ansible-playbook [选项] [参数] .yml ]
    
            -m                             #要执行的模块,默认为command
            -C                             #测试运行效果
            --flush-cache                  #清除fact缓存
            --syntax-check                 #语法检查
            --force-handlers               #如果任务失败,也要运行handlers
            --list-tags                    #列出所有可用的标签
            --list-tasks                   #列出将要执行的所有任务
            --skip-tags=SKIP_TAGS          #跳过运行标记此标签的任务
            --start-at-task=START_AT_TASK  #在此任务处开始运行
            --step                         #一步一步在运行之前确认每个任务
            -t TAGS,--tags=TAGS            #只运行标记此标签的任务
    

    参考文献:《Ansible自动化运维:技术与最佳实践》

  • 相关阅读:
    反击黑客之对网站攻击者的IP追踪
    如何使用Nginx对抗DDoS攻击?
    nginx网站攻击防护
    Ora-01536:超出了表空间users的空间限量
    ASP.Net请求处理机制初步探索之旅
    ASP.Net请求处理机制初步探索之旅
    ASP.Net请求处理机制初步探索之旅
    自己动手写工具:百度图片批量下载器
    自己动手写游戏:坦克撕逼大战
    【大型网站技术实践】初级篇:海量图片的分布式存储设计与实现
  • 原文地址:https://www.cnblogs.com/LyShark/p/10886452.html
Copyright © 2011-2022 走看看