zoukankan      html  css  js  c++  java
  • ansible的安装及常用模块详解

    一、ansible简介

    1.1 什么是ansible

    ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。
    ansible基于模块化工作,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。ansible不需要在远程主机上安装client/agents,因为它们是基于ssh来和远程主机通讯的。
    Ansible可以同时管理Redhat系的Linux,Debian系的Linux,以及Windows主机。管理节点只在执行脚本时与远程主机连接,没有特别的同步机制,所以断电等异常一般不会影响ansbile。

    1.2 ansible的特点

    • 部署简单,只需在主控端部署Ansible环境,被控端无需做任何操作;
    • 默认使用SSH协议对设备进行管理;
    • 有大量常规运维操作模块,可实现日常绝大部分操作;
    • 配置简单、功能强大、扩展性强;
    • 支持API及自定义模块,可通过Python轻松扩展;
    • 通过Playbooks来定制强大的配置、状态管理;
    • 轻量级,无需在客户端安装agent,更新时,只需在操作机上进行一次更新即可;
    • 提供一个功能强大、操作性强的Web管理界面和REST API接口——AWX平台。

    1.3 ansible模块

    • Ansible:Ansible核心程序。
    • HostInventory:记录由Ansible管理的主机信息,包括端口、密码、ip等。
    • Playbooks:“剧本”YAML格式文件,多个任务定义在一个文件中,定义主机需要调用哪些模块来完成的功能。
    • CoreModules:核心模块,主要操作是通过调用核心模块来完成管理任务。
    • CustomModules:自定义模块,完成核心模块无法完成的功能,支持多种语言。
    • ConnectionPlugins:连接插件,Ansible和Host通信使用

    二、安装ansible

    ansible安装在管理端,管理后端节点,而在节点上无需进行操作

    2.1、安装epel源

    1 yum -y install epel-release
    2 yum -y install ansible
    3 #查看ansible版本
    4 ansible --version

    2.2、树状结构展示工作目录

    1 tree /etc/ansible/
    2 /etc/ansible/
    3 ├── ansible.cfg   #ansible的配置文件
    4 ├── hosts  #ansible的主仓库,用于存储需要管理的远程主机的相关信息
    5 └── roles  #角色

    2.3、配置主机清单

     1 vi /etc/ansible/hosts
     2 添加主机模块
     3 可对节点进行分组,便于针对性的统一管理
     4 [webserver]   #设置组名
     5 20.0.0.20   #节点ip
     6 20.0.0.30
     7 [mysql]
     8 20.0.0.40
     9 
    10 [webserver2]    #一般用FQDN,完全合格域名,像www.baidu.com
    11 www1.example.org    #定义被监控主机,需要修改/etc/hosts文件
    12 www2.example.org:2222     #冒号后定义远程连接端口,默认是ssh的22端口
    13 www[01:50].example.org ansible_ssh_user=root ansible_ssh_pass=123456 
    14 #列表方式标识主机,代表50台节点,www01到www50的主机。以root和123456密钥ssh登录,此方式不安全
    15 db-[a:f].example.org    #也支持匹配a b c ... f,代表六台主机

    2.4、主机清单变量

    ①主机变量
    [webserver]
    www1.magedu.com http_port=80 maxRequestsChild=808
    www2.magedu.com http_port=8080 maxRequestsChild=909
    ②组变量
    [servers:vars]
    ntp_server=ntp.example.org
    nfs_server=nfs.example.org
    ③组嵌套
    [apache]
    http1.example.org
    http2.example.org

    [nginx]
    ngx1.example.org
    ngx2.example.org

    [webservers:children] #可包含多个主机组
    apache
    nginx

    ④inventory变量参数

     1 ansible_ssh_host    将要连接的远程主机名.与你想要设定的主机的别名不同的话,可通过此变量设置.
     2 ansible_ssh_port    ssh端口号.如果不是默认的端口号,通过此变量设置.
     3 ansible_ssh_user    默认的 ssh 用户名
     4 ansible_ssh_pass    ssh 密码(这种方式并不安全,我们强烈建议使用 --ask-pass 或 SSH 密钥)
     5 ansible_ssh_private_key_file       ssh 使用的私钥文件.适用于有多个密钥,而你不想使用 SSH 代理的情况.
     6 ansible_ssh_common_args    此设置附加到sftp,scp和ssh的缺省命令行
     7 ansible_sftp_extra_args      此设置附加到默认sftp命令行。
     8 ansible_scp_extra_args      此设置附加到默认scp命令行。
     9 ansible_ssh_extra_args      此设置附加到默认ssh命令行。
    10 ansible_ssh_pipelining      确定是否使用SSH管道。 这可以覆盖ansible.cfg中得设置。
    11 ansible_shell_type          目标系统的shell类型.默认情况下,命令的执行使用 'sh' 语法,可设置为 'csh''fish'.
    12 ansible_python_interpreter       目标主机的 python 路径.适用于的情况: 系统中有多个 Python, 或者命令路径不是"/usr/bin/python",比如 *BSD, 或者 /usr/bin/python
    13 ansible_*_interpreter         这里的"*"可以是ruby 或perl 或其他语言的解释器,作用和ansible_python_interpreter 类似
    14 ansible_shell_executable     这将设置ansible控制器将在目标机器上使用的shell,覆盖ansible.cfg中的配置,默认为/bin/sh

    2.5、配置密钥对验证

    与所要管理的节点,进行密钥对验证,可ssh登录节点

    1 ssh-keygen -t rsa   #回车,输入密钥密码
    2 ssh-copy-id root@20.0.0.20   #输入20节点密码

    2.6、配置免交互代理(临时的不需要输入密码就可执行ansible)

    1 ssh-agent  bash
    2 ssh-add   #输入密钥密码

    三、ansible的命令行模块

    ansible命令格式

    1 ansible  主机标识(IP)  -m 模块  -a ‘参数’  默认模块是command

    常用模块

     1 ----cron---周期性计划任务
     2 ansible-doc -s 模块名 #模块用法      
     3 ansible -m cron -a 'minute=*/1 job=/usr/bin/echo ... name=test1'
     4 ansible -m cron -a 'name=test1 state=absent'   #删除任务
     5 
     6 ----user---用户设置
     7 ansible -m user -a  'name=aa uid=1111'   #创建用户
     8 ansible mysqI -m user -a 'name="test01" state=absent'    #删除用户
     9 
    10 ----group---组设置
    11 ansible mysqI -m group -a 'name =mysq| gid=306 system=yes'
    12 ansible mysqI -m user -a 'name=test01 uid= 306 system=yes group=mysql'
    13 ansible mysq| -a 'id test01'
    14 
    15 ----copy---拷贝工具,也可创建由内容的文件,无法使用path
    16 ansible mysql -m copy -a 'src=/etc/fstab dest=/opt/fstab.back owner=root mode=640' #将本地文件拷贝至节点, fetch与之相反,将节点文件拷贝至管理端(本地)
    17 ansible mysqI -m copy -a 'content="hello heihei!" dest =/opt/fstab.back'  #创建有内容的文件
    18 
    19 ----file---文件操作,建立空文件,目录
    20 ansible mysq| -m file -a 'owner=mysq| group=mysqI mode= 644 path=/opt/fstab.back'
    21 ansible mysqI -m file -a 'path=/opt/fstab.link src=/opt/fstab.back state=link'   #软链接
    22 ansible mysql -m file -a 'path=/opt/fstab.back state=absent'  #删除
    23 ansible mysqI -m file -a 'path=/opt/test state=touch'  #建空文件
    24 ansible webserver -m file -a ' path=/opt/temp state=directory mode=755' 
    25 
    26 ----ping---用在检测管理端与节点的连通性
    27 ansible all -m ping
    28 
    29 -----yum----安装卸载工具
    30 ansible mysql -m yum -a 'name=httpd' 
    31 ansible mysql -m yum -a 'name=httpd state=absent'  #卸载
    32 ansible mysql -a 'rpm -q httpd'
    33 
    34 ----service---服务模块
    35 ansible webserver -a 'systemctl status httpd'    //查看web服务器httpd运行状态
    36 ansible webserver -m service -a 'enabled=true name=httpd state= started'   #开机自启,并开启
    37 ansible all -m service -a 'name=firewalld state=stopped' //关闭防火墙
    38 
    39 ----shell---与command有区别
    40 shell  #可执行多条语句,支持重定向,而command只支持追加,一条语句
    41 chdir:指定工作目录,在执行对应的命令之前,会先进入到chdir参数指定的目录中。
    42 creates: 指定一个文件,当指定的文件存在时,就不执行对应命令,还是会进行创建文件
    43 removes:使用此参数指定-个文件,当指定的文件不存在时,就不执行对应命令。
    44 ansible mysqI -m shell -a 'chdir=/opt/share echo heihei > heihei.txt'
    45 ansible mysqI -m shell -a 'chdir=/opt/share Is'
    46 
    47 ----script----用于执行脚本
    48 vi test.sh //在ansible管理端创建脚本
    49 #!/bin/bash
    50 echo "hello ansible from script" > /opt/script.txt
    51 chmod +x test.sh
    52 ansible all -m script -a 'test.sh'  #可在多主机批量执行
    53 
    54 ----setup----
    55 ansible mysq| -m setup    #获取mysq|组主机的facts信息
  • 相关阅读:
    【git】git命令集合
    【maven】【IDEA】idea中使用maven编译项目,报错java: 错误: 找不到符号 【2】
    【mybatis】mybatis传参的几种方式
    【EasyExcel】使用easyExcel过程中,项目报错的解决集合
    【Maven】【IDEA】在idea中开发web项目,解决maven的jar包冲突的方法
    【Easyexcel】java导入导出超大数据量的xlsx文件 解决方法
    【maven】idea的pom文件修改,引入新的jar包,无效,本地仓库始终没有下载新jar包的问题解决【idea pom Dependency not found】
    【java】javac编译多个有依赖关系的java文件为class文件
    【java】javac命令在win10不可用,提示javac不是内部或外部命令,也不是可运行的程序【解决方法】
    【POI】java服务生成List数据集合,后台服务生成xlsx临时文件,并将临时文件上传到腾讯云上,并实现xlsx浏览器预览
  • 原文地址:https://www.cnblogs.com/xuhao0705/p/14295074.html
Copyright © 2011-2022 走看看