zoukankan      html  css  js  c++  java
  • ansible学习笔记一

    一、简介

    ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。

    ansible是基于 paramiko 开发的,并且基于模块化工作,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。

    ansible不需要在远程主机上安装client/agents,因为它们是基于ssh来和远程主机通讯的。

    ansible目前已经已经被红帽官方收购,是自动化运维工具中大家认可度最高的,并且上手容易,学习简单。是每位运维工程师必须掌握的技能之一

    特点:

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

    二、安装

    系统 Centos 7.9

    #查看yum源中ansible版本
    yum list all *ansible*
    #安装
    yum install ansible

    没有就更新yum源

    [ansible]
    name=ansible
    baseurl=https://mirror.tuna.tsinghua.edu.cn/epel/7/x86_64/
    gpgcheck=0

    主要配置文件路径

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

    三、简单应用

    ansible通过ssh实现配置管理、应用部署、任务执行等功能,因此,需要事先配置ansible端能基于密钥认证的方式联系各被管理节点。

    认证:

    #ssh-keygen
    #ssh-copy-id -i /root/.ssh/id_rsa.pub  root@xx.xx.xx.xx

    如何查看模块帮助
    ansible-doc: Show Ansible module documentation
    -l,--list List available modules
    -s, --snippet Show playbook snippet for specified module(s)

    例:ansible-doc -s yum(模块名)


    基本命令基本用法
    ansible <host-pattern> [-f forks] [-m module_name] [-a args]

    -f forks: 启动的并发线程数
    -m module_name: 要使用的模块,不指定时默认为command
    -a args: 模块特有的参数

    修改配置文件

    vim /etc/ansible/hosts
    
    [webservers]
    alpha.example.org
    beta.example.org
    192.168.1.100
    192.168.1.110

    例:

    ansible 192.168.1.1 -m command -a 'date' #单机运行
    ansible webservers -m command -a 'date' #服务器组都运行
    ansible webservers -m command -a 'tail -2 /etc/passwd' 
    ansible webservers -a 'tail -2 /etc/passwd' #使用默认模块,意义同上

    常用模块

    cron模块

    ansible-doc -s cron
    
    cron: state: present: 安装 absent: 移除

    例:
    在linux的crontab任务中,格式如下:
    */10 * * * * /bin/echo "hello world"

    ansible中格式如下:

    ansible webservers -m cron -a 'minute="*/10" job="/bin/echo hello world" name="test cron job"'

    #每10分钟执行一次,同上面的crontab,只指定了minute,其他不写默认为* ,并赋给任务名name为"test cron job"
    #未指定state参数,默认为present

    同理,删除操作为:

    ansible webservers -m cron -a 'minute="*/10" job="/bin/echo hello world" name="test cron job" state="absent" ' 

    查看上述命令安装结果

    ansible webservers -a 'crontab -l'

    例:

    ansible myweb -m cron -a ' minute="*/10" hour="2" day="25" job="/usr/bin/echo hello world!" name="test job"'

    user模块

    ansible-doc -s user

    默认创建

    ansible myweb -m user -a 'name="danny1"'

    删除用户

    ansible myweb -m user -a 'name="danny1" state=absent'

    group模块

    ansible myweb -m group -a 'name=mysql gid=306 system=yes'

    创建mysql用户

    ansible myweb -m user -a 'name=mysql uid=306 system=yes group=mysql'

    copy模块

    ansible myweb -m copy -a 'src=/etc/my.cnf  dest=/tmp/my.cnf.ansible  owner=root  mode=644'

    使用content直接生成文件内容,取代src,两者不共存

    ansible myweb -m copy -a 'content="hello danny" dest=/tmp/danny.ansible'

    file模块

    设定文件属性

    ansible myweb -m file -a 'owner=mysql group=mysql mode=644 path=/tmp/my.cnf.ansible'

    生成符号链接

    myweb -m file -a 'path=/tmp/my.cnf.link src=/tmp/my.cnf.ansible  state=link'

    ping模块

    测试远程主机的连通性

    ansible webservers -m ping

    service模块

    查看远程服务状态

    ansible webservers  -a 'service mysqld status'

    启动mysql服务并设置开机自启

    ansible myweb -m service -a 'enabled=true name=mysqld state=started'

    enabled:是否开机自启,取值为true或者false

    shell模块

    远程执行命令

    通过下面命令操作,设置用户密码不会成功,会被直接当初字符串处理

    ansible myweb -m command -a 'echo danny123 | passwd --stdin user1'

    此时就应使用shell模块了,可以解析命令

    ansible myweb -m shell -a 'echo danny123 | passwd --stdin user1'

    所以在使用管道、变量等复杂命令时,建议使用shell模块,默认的command模块不解析

    script模块

    将本地脚本复制到远程主机,并运行

    ansible webservers -m script -a '/tmp/test.sh'

    yum模块

    程序包的安装/卸载

    name:指明要安装的程序包名,可以指定版本号,不指定安装最新版

    安装

    ansible myweb -m yum -a 'name=lrzsz'

    卸载

    ansible myweb -m yum -a 'name=lrzsz state=absent'

    setup模块

    收集远程主机的facts(操作系统版本、IP地址、主机名等)

    每个被管理节点,在接收并运行管理命令之前,会将自己主机的相关信息,如:操作系统版本、IP地址等报告给远程的ansible主机

    ansible myweb -m setup
    好记性不如烂笔头,最难不过坚持
  • 相关阅读:
    使用wps跨ubuntu和windows编辑“.doc”文档。报错“编辑受限”,乱码,软件卡死,强制关闭
    【Python】断言功能Assertion
    【Python】hasattr() getattr() setattr() 使用方法详解
    【python】self & cls
    【Python】2.x与3​​.x版本的选用&版本间的区别
    【python】 del 的用法
    【python】参数中的*args和**kwargs
    解方程AX=b与矩阵分解:奇异值分解 特征值分解 QR分解 三角分解 Cholesky分解
    【python】dist-packages和site-packages的区别
    【python】脚本连续发送QQ邮件
  • 原文地址:https://www.cnblogs.com/dannylinux/p/15594190.html
Copyright © 2011-2022 走看看