zoukankan      html  css  js  c++  java
  • 自动化运维工具——ansible安装入门(一)

    一、简介

    现如今有很多运维自动化的工具,如:Ansible、Puppet、saltStack、Fabric、chef、Cfengine
    

    1. Ansible介绍

    Ansible 是由 Cobbler与Func的作者 Micheael DeHaan 编写。2012-03-09发布0.0.1版本,2015-10-17被红帽收购
    Ansible 是一个配置管理系统(configuration management system)。你只需要可以使用ssh访问你的服务器或设备就可以;它不同于其他工具,因为它使用的是推送的方式,而不像其他工具一样使用拉去安装agent。
    

    2. Ansible功能

    Ansible 可以帮助我们完成一些批量任务,或者完成一些需要经常重复的工作;例如:
    
    • 当公司扩大,测试环境与生产环境的服务器都要增加至百台。服务器的环境部署这样重复性的工作就可以使用到ansible;
    • 在百台服务器中同时部署一个nginx服务,并且启动。
    • 将一个配置文件同时拷贝到数十台服务器时。

    3. Ansible 的特性

    • 模块化:调用特定的模块完成特定的任务
    • 有Paramiko,PyYAML,Jinja2(模板语言)三个关键模板
    • 支持自定义模块
    • 基于Python语言实现
    • 部署简单,基于python和SSH(系统已默认安装),agentless不需要客户端
    • 安全,基于OpenSSH,需要SSH密钥验证
    • 支持playbook编排任务
    • 幂等性:一个任务执行1遍和执行多遍的效果一样,不会因为重复执行带来意外情况
    • 无需代理不依赖PKI(无需ssl)
    • 可以使用任何编程语言写模块
    • YAML格式,编排任务,支持丰富的数据结构
    • 较强大的多层解决方案

    4. Ansible 架构

    5. Ansible 工作原理

    6. Ansible 主要组成部分

    • ansible playbooks:任务剧本(任务集),编排第一Ansible任务集的配置文件,由Ansible顺序依次执行,通常是json格式的yml文件
    • inventory:Ansible管理主机的清单/etc/ansible/hosts
    • modules:Ansible 执行命令的功能模块,多数为内置的核心模块,也可自定义
    • plugins:模块功能的补充,如连接类型插件,循环插件,变量插件,过滤插件等,该功能不常用
    • API:供第三方程序调用的应用程序编程接口
    • Ansible:组合inventory、API、modules、plugins的绿框,可以理解为是ansible命令工具,其为核心执行工具

    7. Ansible 命令执行来源

    • USER,普通用户,即system administrator
    • CMDB 资产管理系统 API调用
    • public/private cloud API调用
    • USER-->ansible playbook --> Ansible

    8. 利用ansible实现管理的方式:

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

    9. Ansible-playbook(剧本)执行过程:

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

    10. Ansible 主要操作对象:

    • HOSTS主机
    • NETWORKING网络设备

    注意事项

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

    二、安装Ansible

    Yum安装方式

    Ansible安装包在EPEL源中,自行配置yum源
    
        //Ansible 安装
        yum install -y ansible
    

    编译安装

        > yum -y install python-jinja2 PyYAML python-paramiko
        > python-babel python-crypto
        > tar xf ansible-x.x.x.tar.gz
        > cd ansible-x.x.x
        > python setup.py build
        > python setup.py install
        > mkdir /etc/ansible
        > cp -r examples/* /etc/ansible
    
    

    git 安装

        > git clone git://github.com/ansible/ansible.git --recursive
        > cd ./ansible
        > source ./hacking/env-setup
    

    pip安装:pip是安装Python包的管理器,类似yum

        > yum install python-pip python-devel
        > yum install gcc glibc-devel zibl-devel rpm-bulid openssl-devel
        > pip install --upgrade pip
        > pip install ansible --upgrade
    

    确认安装

    ansible --version
       ·ansible 2.7.7
          ·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, Apr 11 2018, 07:36:10) [GCC 4.8.5 20150623 (Red Hat 4.8.5-28)]
    

    1. Ansible 配置文件

    • /etc/ansible/ansible.cfg 主配置文件,配置ansible工作特性
    • /etc/ansible/hosts 主机清单
    • /etc/ansible/roles/存放角色的目录

    ① 配置文件 /etc/ansible/ansible.cfg(一般保持默认)

            [defaults]
    	#inventory = /etc/ansible/hosts		 #主机列表配置文件
    	#library = /usr/share/my_modules/	 #库文件存放目录
    	#remote_tmp = $HOME/.ansible/tmp	 #临时py命令文件存放在远程主机目录
    	#local_tmp = $HOME/.ansible/tmp 	 #本机的临时命令执行目录
    	#forks = 5 							 #默认并发数
    	#sudo_user = root 					 # 默认sudo 用户
    	#ask_sudo_pass = True 				 #每次执行ansible命令是否询问ssh密码
    	#ask_pass = True
    	#remote_port = 22					 #默认的节点ssh端口
    	#host_key_checking = False			 # 检查对应服务器的host_key,建议取消注释
    

    ② 主机清单inventory

    Ansible必须通过Inventory 来管理主机。Ansible 可同时操作属于一个组的多台主机,组和主机之间的关系通过 inventory 文件配置。

    //语法格式:
    //单台主机
        www.test.com     //FQDN方式
        172.16.1.100      //IP地址
        172.16.1.100:12222  //SSH服务端口不是22时使用
    
    //多台主机
        [mysqlServer]       //定义一个组名
        mysql.test.com     //FQDN方式 【定义组内单台主机的地址】
        172.16.1.101        //IP地址
        
        [webServer]
        172.16.1.100        //一台主机可以在不同的组内,它同时属于[mysqlServer]组
    
    //组嵌套组
        [group01:Server]   //group01为自定义的组名,Server是关键字,固定语法必须填写;
        mysqlServer          //group01 组内包含的其他组名
        webServer             //group01 组内包含的其他组名
    
    //有规律的主机地址
        www.wj[01:06].test.com
        //相当于:
        www.wj01.test.com
        www.wj02.test.com
        ........
        www.wj06.test.com
    可以定义有规律的ip地址,也可以定义 有规律的字母地址,例如 [a:f]
    
    还有一个隐藏的组是 [all] 组,不指定机器或组,就默认主机列表中所有机器
    

    主机列表中的参数说明

        ansible_ssh_host
        //将要连接的远程主机名.与你想要设定的主机的别名不同的话,可通过此变量设置.
    
        ansible_ssh_port
        //ssh端口号.如果不是默认的端口号,通过此变量设置.这种可以使用 ip:端口 192.168.1.100:2222
    
        ansible_ssh_user
        //默认的 ssh 用户名
    
        ansible_ssh_pass
        //ssh 密码(这种方式并不安全,我们强烈建议使用 --ask-pass 或 SSH 密钥)
    
        ansible_sudo_pass
        //sudo 密码(这种方式并不安全,我们强烈建议使用 --ask-sudo-pass)
    
        ansible_sudo_exe (new in version 1.8)
        //sudo 命令路径(适用于1.8及以上版本)
    
        ansible_connection
        //与主机的连接类型.比如:local, ssh 或者 paramiko. Ansible 1.2 以前默认使用 paramiko.1.2 以后默认使用 'smart','smart' 方式会根据是否支持 ControlPersist, 来判断'ssh' 方式是否可行.
    
        ansible_ssh_private_key_file
        //ssh 使用的私钥文件.适用于有多个密钥,而你不想使用 SSH 代理的情况.
    
        ansible_shell_type
        //目标系统的shell类型.默认情况下,命令的执行使用 'sh' 语法,可设置为 'csh' 或 'fish'.
    
        ansible_python_interpreter
        //目标主机的 python 路径.适用于的情况: 系统中有多个 Python, 或者命令路径不是"/usr/bin/python",比如  *BSD, 或者 /usr/bin/python 不是 2.X 版本的 Python.
        //我们不使用 "/usr/bin/env" 机制,因为这要求远程用户的路径设置正确,且要求 "python" 可执行程序名不可为 python以外的名字(实际有可能名为python26).
    
        //与 ansible_python_interpreter 的工作方式相同,可设定如 ruby 或 perl 的路径....
    

    2. Ansible 主要程序

    • /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界面与用户交互的执行工具

    3. 被管理的主机做密钥验证

    ansible通过ssh实现配置管理、应用部署、任务执行等功能,建议配置ansible端能基于密钥认证的方希联系各被管理节点   
    

    密钥验证不具体写了

    4. Ansible系列命令

        ansible
        ansible-doc:显示模块磅数
        // ansible-doc [option] [module...]
               //-a 显示所有模块的文档;-l == --list  列出可用模块;-s == --snippet 显示指定模块的playbook片段
        ansible-playbook
        ansible-vault
        ansible-console
        ansible-galaxy
        ansible-pull
    

    注意:ansible使用,主机清单必须要先配置

    只有今天
  • 相关阅读:
    [Leetcode] Copy List with Random Pointer
    [Java] StringBuffer类
    [Leetcode] Wildcard Matching
    [Leetcode] Substring with Concatenation of All Words
    [Leetcode] Longest Palindromic Substring
    [Leetcode] Maximum Product Subarray
    [leetcode] Permutation Sequence
    [Leetcode] Simplify Path
    [Leetcode] Minimum Window Substring
    Owin asp.net 脱离 IIS
  • 原文地址:https://www.cnblogs.com/arnoLixi/p/10375245.html
Copyright © 2011-2022 走看看