• Ansible入门笔记(1)之工作架构和使用原理


    1、Ansible特性

    模块化:

    • 调用特定的模块,完成特定的任务
    • 有paramiko、PyYAML、jinja2三个关键模块
    • 支持自定义模块
    • 基于python语言开发
    • 部署简单就要python和ssh,agentless
    • 安全,基于Openssh
    • 支持playbook编排任务
    • 幂等性:一个任务执行一遍和执行n遍效果一样,不会因为重复执行带来意外情况
    • 无序代理不依赖PKI(无需ssl)
    • 可使用认可编程语言编写模块
    • YAML格式编排任务,支持丰富的数据结构
    • 叫强大的多层解决方案

    2、ansible架构解析

    用户通过ansible去管理各个主机,那么ansible就是我们所说的主控端,后面的Host为被控端。

    在控制主机时,ansible是如何知道哪些主机是被自己控制的呢?

    这就需要一个Host Inventory(主机清单),用于记录ansible可以控制网络中的哪些主机。另外,要配置和管理这些主机,可以采用两种方式,一种是单一的命令实现,另外一种也可以使用palybook实现。单一的命令模式是采用不同的模块进行管理,一个模块类似于一些管理的命令,如top,ls,ping等等,适用于临时性的操作任务。如果需要执行一些例行性或经常性的操作,则需要采用playbook的方式,playbook类似于一个脚本,将多个模块按一定的逻辑关系进行组合,然后执行。ansible还支持一些插件,如邮件、日志等,在和远程主机通信时,也会采用类似的连接插件,这里使用则是SSH协议的插件进行通信。

    3、ansible主要组成部分

    1)命令执行来源:

    • ANSIBLE PLAYBOOKS :任务剧本,编排定义ansible任务急的配置文件,有Ansible顺序执行,通常为json格式的YAML文件
    • INBENTORY:Ansible管理主机的清单/etc/anaible/hosts
    • MODULES:Ansible的执行命令的功能模块,多数为内置核心模块,也可以自定义
    • PLUGINS:模块功能补充,比如链接类型插件、循环插件、变量插件、过滤插件等,不常用
    • API:供第三方程序调用的应用程序编程接口
    • ANSIBLE:组合INVENTORY API MODUES PLUGINS的绿框,可以理解为Ansible的命令工具,其为核心执行工具

    2)利用ansible实现管理的方式

    • Ad-Hoc即ansible命令,主要用于临时命令场景
    • ansible-playbook主要用户长期规划好的,大型项目的场景,需要提前规划

    3)Ansile-playbook执行过程

    • 将已有编排好的任务急写入Ansible-playbook
    • 通过ansible-playbook命令分拆任务急至逐条ansible命令,按照预定规则执行

    4)Ansible主要操作对象

    • Hosts主机
    • Networking网络设备

    5)注意事项

    • 执行ansile的主机一般称为主控端,中控,master或堡垒机
    • 主控端python版本需要2.6以上
    • 被控端python版本需要2.4以上,小于2。4需要安装python-simplejson
    • 被控端如开启selinux需要安装libselinux-python
    • windows端不能作为主控端

    4、anisble部署

    ansible官网

    • (1)环境说明
    主机名称 IP地址 角色 系统版本
    ansible 192.168.56.11 主控端 Centos 7.x
    node01 192.168.56.12 被控端 Centos 7.x
    node02 192.168.56.13 被控端 Centos 7.x
    • (2)ansible部署
    [root@ansible ~]# yum install -y ansible
    [root@ansible ~]# ansible --version
    ansible 2.7.10
      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)]
    
    • (3)ansible主要配置文件功能解析
    /etc/ansible/ansible.cfg 	#主配置文件,配置ansible工作特性
    /etc/ansible/hosts 		    #主机清单
    /etc/ansible/roles/ 		#存放角色的目录
    /usr/bin/ansible 			#主程序,临时命令执行工具
    /usr/bin/ansible-doc 		#查看配置文档,模块功能查看工具
    /usr/bin/ansible-galaxy 	#下载/上传优秀代码或Roles模块的官网平台
    /usr/bin/ansible-playbook 	#定制自动化任务,编排剧本工具
    /usr/bin/ansible-pull 		#远程执行命令的工具
    /usr/bin/ansible-vault 		#文件加密工具
    /usr/bin/ansible-console 	#基于Console界面与用户交互的执行工具
    
    • (4)小试牛刀
    [root@ansible ~]# ansible --help	#查看ansible使用帮助
    Usage: ansible <host-pattern> [options]		#使用方法,ansible+主机+选项
    
    [root@ansible ~]# ansible 192.168.56.12 -m ping 	#检测主机的存活,返回pong则是正常,这里使用了-m参数,采用ping模块进行检测目标主机的存活性
    192.168.56.12 | SUCCESS => {
        "changed": false, 
        "ping": "pong"
    }
    
    [root@ansible ~]# ansible -m ping 192.168.56.13		#连接另外1台被控端,提示无法匹配
     [WARNING]: Could not match supplied host pattern, ignoring: 192.168.56.13
    
     [WARNING]: No hosts matched, nothing to do
    
    #这里就需要在主机清单中增加被控端主机,需要注意的是,主机清单也支持分组模式,这里将三台主机分为web组
    [root@ansible ~]# vim /etc/ansible/hosts
    [web]
    192.168.56.11
    192.168.56.12
    192.168.56.13
    [root@ansible ~]# ansible web -m ping	#通过对一组服务器进行存活性检测
    192.168.56.13 | SUCCESS => {
        "changed": false, 
        "ping": "pong"
    }
    192.168.56.12 | SUCCESS => {
        "changed": false, 
        "ping": "pong"
    }
    192.168.56.11 | SUCCESS => {
        "changed": false, 
        "ping": "pong"
    }
    
    #PS:这里需要注意的是,远程连接采用的不是单纯的ping命令,如果没有做ssh密钥认证,是会出现无法ping通的错误,此时可以采用-k参数,默认执行使用root用户进行连接远程主机。
    [root@ansible ~]# ansible 192.168.56.13 -m ping -k
    SSH password: 
    192.168.56.13 | SUCCESS => {
        "changed": false, 
        "ping": "pong"
    

    在使用ansible时,我们会发现ssh链接较慢的现象,这里则需要修改sshd服务的两个参数来解决该问题:

    UseDNS no
    GSSAPIAuthentication no
    

    5、主配置文件ansible.cfg解析

    配置文件大部分都是注释,只需要保持默认配置即可。这里需要开启日志记录以及关闭远程首次连接的ssh认证检查。

    [root@ansible ~]# vim /etc/ansible/ansible.cfg 
    [defaults]    默认配置
    
    # some basic default values...
    
    #inventory      = /etc/ansible/hosts    #主机列表配置文件
    #library        = /usr/share/my_modules/  #库文件存放目录
    #module_utils   = /usr/share/my_module_utils/  #模块存放目录
    #remote_tmp     = ~/.ansible/tmp  #临时py命令文件存放在远程主机目录
    #local_tmp      = ~/.ansible/tmp  #本机的临时命令执行目录
    #forks          = 5   #默认并发数 
    #poll_interval  = 15  #时间间隔
    #sudo_user      = root  #默认sudo用户
    #ask_sudo_pass = True   #每次执行ansible命令是否询问sudo用户密码
    #ask_pass      = True   #每次执行ansible命令是否询问ssh密码
    #transport      = smart  #传输方式
    #remote_port    = 22    #远程端口号
    #module_lang    = C
    #module_set_locale = False
    ... ...
    host_key_checking = False  #检查对应服务器的host_key,建议取消注释.
    log_path=/var/log/ansible.log #记录日志及位置,默认不记录 建议取消注释
    
  • 相关阅读:
    浅出Java Socket 编程
    WPF指南之一(WPF的结构)
    使用URL访问网络资源
    WPF指南之三(XAML的名字空间)
    多线程并发思考文件加锁
    关于kindeditor上传图片出现"服务器发生故障"的解决办法
    isset function of PHP
    JSON字符串传到后台PHP处理的问题
    isset function of PHP
    (转)Linux利器 strace
  • 原文地址:https://www.cnblogs.com/linuxk/p/10756587.html
Copyright © 2020-2023  润新知