• ansible自动化管理


    目录

    一、ansible自动化运维

    人工运维时代

    自动化运维时代

    自动化运维趋势

    自动化运维的好处

    二、ansible介绍

    ansible特点

    三、安装ansible

    ​编辑四 、修改主机清单

    1、首先做主控端到被控端ssh免密操作

    2、添加被控制端主机IP

    ​编辑

     五、ansible模块

    1、command ---- 远程主机执行命

    1.1切换到/data目录下执行ls

     1.2如果不存在/data目录 执行ls

     1.3如果存在/data目录 执行ls

     1.4只能执行简单命令,shell不执行

    2、shell----支持shell特性的command

    2.1查看所有主机boot分区的磁盘使用率

    ​编辑

    3、script ---- 运行shell脚本

    3.1输入hello world到远程主机的/opt/test.txt文件中

     4、copy ---- 复制文件到远程主机

    4.1复制本地的test.sh到远程主机,强制覆盖并备份

    5、fetch ---- 从主机提取文件到主控端

    5.1不指定 flat 会在dest指定目录下创建一个目录,以主机名命名

    6、file ---- 设置文件属性

    6.1在/data/目录下新建data目录并新建文件 1.txt 属主为mysql 属组为root,没有/data/data则新建

    ​编辑

    7、archive ---- 压缩

    7.1压缩/data/data目录,并删除/data/data目录下文件

    ​编辑

    8、unarchive ---- 解压缩

    8.1打包本机/data目录,上传到远程主机并解压

    六、playbook

    1、核心元素


    一、ansible自动化运维

    人工运维时代

    运维人员早期需要维护数量众多的机器,一次需要执行反复,重复的劳动力,很多机器需要同时部署相同的服务器或是执行相同的命令,还得反复登录不同的机器,执行重复的动作

    自动化运维时代

    早期运维人员会结合ssh免密登录以及shell脚本来完成自动化的部署操作。

    系统管理员面临的问题主要是配置管理系统,远程执行命令,批量安装服务,启停服务等

    后来也就诞生了众多的开源软件,自动化运维软件

    - fabric
    - puppet
    - saltstack
    - chef
    - Ansible

    其中有两款软件是基于python语言开发的,saltstack、ansible都是基于python编写

    自动化运维趋势

    人力运维>自动化运维>数据化运维,可视化运维>人工智能运维,devops

    自动化运维的好处


    - 将提高工作效率,减少重复性的劳动力操作
    - 大大的减少了人为出错的可能性
    - ansible支持数据化管理,数据化追源,找到问题的来源点

    二、ansible介绍

    ansible是一个同时管理多个远程主机的软件,必须是任意可以通过ssh登录的机器,因此可以管理的机器如

    - 远程虚拟机
    - 物理机
    - 也可以直接管理本机机器

    ansible通过ssh协议实现了,管理节点(安装了ansible服务的机器),被管理节点(被管理机器的节点)的通信。

    只能是通过ssh协议登录的主机,就可以完成ansible自动化部署操作

    - 批量文件分发
    - 批量数据复制
    - 批量数据修改、删除
    - 批量自动化安装软件服务
    - 批量服务启停
    - 脚本化,自动批量服务部署

    ansible特点

    ansible的编排引擎可以出色的完成各种任务配置管理,ansible在流程控制,资源部署等方面很强大,并且ansible无需安装客户端软件,管理简介,使用yaml配置文件语法,功能强大,便于维护

    ansible是基于python语言开发的,主要由python的两个ssh处理模块,paramiko以及PyYAML模块

    - 安装部署简单
    - 管理主机便捷、支持多台主机并行管理
    - 无需安装被管理节点的客户端(no agent),且无需占用客户端的其他端口,仅仅使用ssh服务即可
    - 不仅仅支持python,还支持其他语言的二次开发
    - 不用root用户也可执行,降低系统权限

     

    三、安装ansible

    yum -y install epel-release && yum -y install ansible

    四 、修改主机清单

    1、首先做主控端到被控端ssh免密操作

    ssh-keygen

    2、添加被控制端主机IP

    vi /etc/ansible/hosts
    

    ssh 192.168.127.129 ##首次通信需要留下指纹,可以手动ssh一次,也可以修改配置文件
    1. ansible all -m authorized_key -a "user=root key='{{ lookup('file','/root/.ssh/id_rsa.pub') }}'" -k 批量推公钥
    2. all:主机列表 -m:指定模块 -a:执行模块使用的参数(指定参数)
    3. ansible client2 -m ping #验证ansible是否可用

     五、ansible模块

    1、command ---- 远程主机执行命

    使用 command 模块在远程主机中执行命令时,不会经过远程主机的 shell 处理,在使用 command 模块时,如果需要执行的命令中含有重定向、管道符等操作时,这些符号也会失效。

    相关选项如下:
    creates:创建一个文件名,当该文件存在,则该命令不执行
    free_form:要执行的linux指令,这里的free_form不需要写成赋值的形式,直接写要执行的命令即可,ansible -a代替
    chdir:在执行指令之前,先切换到该目录
    removes:移动一个文件名,当该文件不存在,则该选项不执行
    executable:切换shell来执行指令,该执行路径必须是一个绝对路径

    1.1切换到/data目录下执行ls

    all:主机列表 -m:指定模块 -a:执行模块使用的参数(指定参数)

    ansible all -m command -a 'chdir=/data ls'

     1.2如果不存在/data目录 执行ls

    ansible all -m command -a 'creates=/data ls'

     1.3如果存在/data目录 执行ls

    ansible all -m command -a 'removes=/data ls'

     

     1.4只能执行简单命令,shell不执行

    ansible all -m command -a ' ls | grep rc'

    2、shell----支持shell特性的command

    在远程主机执行命令,相当于调用远程主机的shell进程,然后在该shell下打开一个子shell运行命令(支持管道符号等功能)

    2.1查看所有主机boot分区的磁盘使用率

    ansible all -m shell -a ' df -h | grep boot'

    3、script ---- 运行shell脚本

    实现远程批量运行本地的 shell 脚本

    3.1输入hello world到远程主机的/opt/test.txt文件中

    1. echo 'echo "hello world" > /opt/test.txt ' > test.sh
    2. ansible all -m script -a "test.sh"

     4、copy ---- 复制文件到远程主机

    相关选项如下:
    backup:在覆盖之前,将源文件备份,备份文件包含时间信息。有两个选项:yes|no
    content:用于替代“src”,可以直接设定指定文件的值
    dest:必选项。要将源文件复制到的远程主机的绝对路径,如果源文件是一个目录,那么该路径也必须是个目录
    directory_mode:递归设定目录的权限,默认为系统默认权限
    force:如果目标主机包含该文件,但内容不同,如果设置为yes,则强制覆盖,如果为no,则只有当目标主机的目标位置不存在该文件时,才复制。默认为yes
    others:所有的file模块里的选项都可以在这里使用
    src:被复制到远程主机的本地文件,可以是绝对路径,也可以是相对路径。如果路径是一个目录,它将递归复制。在这种情况下,如果路径使用“/”来结尾,则只复制目录里的内容,如果没有使用“/”来结尾,则包含目录在内的整个内容全部复制,类似于rsync
    owner    文件复制到远程并设定属主,默认为root
    group    文件复制到远程并设定属组,默认为root
    mode    文件复制到远程并设定权限,默认file=644,directory=755

    4.1复制本地的test.sh到远程主机,强制覆盖并备份

    ansible client1 -m copy -a "src=/root/test.sh dest=/root/ backup=yes force=yes"

     ansible client1 -m copy -a "content=/root/test.sh dest=/root/test.sh backup=yes force=yes"

    5、fetch ---- 从主机提取文件到主控端

    该模块用于从远程某主机获取(复制)文件到本地。有两个选项:
    dest:用来存放文件的目录
    src:在远程拉取的文件,并且必须是一个file,不能是目录

    5.1不指定 flat 会在dest指定目录下创建一个目录,以主机名命名

    1. ansible client1 -m fetch -a "src=/root/test.sh dest=/root/ flat=yes"
    2. ansible client1 -m fetch -a "src=/root/test.sh dest=/data/"
    3. ls /data/

    6、file ---- 设置文件属性

    file模块用来设置文件属性,并且创建或者删除目录,创建连接。
    相关选项如下:
    force:需要在两种情况下强制创建软链接,一种是源文件不存在,但之后会建立的情况下;另一种是目标软链接已存在,需要先取消之前的软链,然后创建新的软链,有两个选项:yes|no
    group:定义文件/目录的属组
    mode:定义文件/目录的权限
    owner:定义文件/目录的属主
    path:必选项,定义文件/目录的路径
    recurse:递归设置文件的属性,只对目录有效
    src:被链接的源文件路径,只应用于state=link的情况
    dest:被链接到的路径,只应用于state=link的情况
    state:
     directory:如果目录不存在,就创建目录       
     file:即使文件不存在,也不会被创建
     link:创建软链接
     hard:创建硬链接       
     touch:如果文件不存在,则会创建一个新的文件,如果文件或目录已存在,则更新其最后修改时间
     absent:删除目录、文件或者取消链接文件

    6.1在/data/目录下新建data目录并新建文件 1.txt 属主为mysql 属组为root,没有/data/data则新建

    1. ansible client1 -m file -a 'path=/data/data/1.txt owner=mysql group=root state=directory'
    2. ansible client1 -m command -a "ls -l /data/data"


    7、archive ---- 压缩

    path    远程主机上需要被打包/压缩的源文件(可以是文件列表,支持glob模式)
    dest    打包/压缩后的包文件路径(包文件的父目录必须存在);如果包文件已存在,则会被覆盖。
    format    指定压缩类型,包括:bz2、gz(默认)、tar、xz、zip
    owner    指定属主
    group    指定属组
    mode    指定权限
    remove    yes|no,默认为no,在打包/压缩后,不删除源文件。

    7.1压缩/data/data目录,并删除/data/data目录下文件

    1. ansible client1 -m archive -a 'path=/data/data dest=/data/data.gz format=gz remove=yes'
    2. ansible client1 -m command -a "ls -l /data/data"

    8、unarchive ---- 解压缩

    用于解压文件,模块包含如下选项:
    copy:在解压文件之前,是否先将文件复制到远程主机,默认为yes。若为no,则要求目标主机上压缩包必须存在。
    creates:指定一个文件名,当该文件存在时,则解压指令不执行
    src:如果copy为yes,则需要指定压缩文件的源路径
    dest:远程主机上的一个路径,即文件解压的路径
    owner:解压后文件或目录的属主
    group:解压后的目录或文件的属组
    mode:解压后文件的权限
    list_files:如果为yes,则会列出压缩包里的文件,默认为no,2.0版本新增的选项

    8.1打包本机/data目录,上传到远程主机并解压

    1. tar cfP data.tar.gz /data
    2. ansible client1 -m unarchive -a 'src=/root/data.tar.gz dest=/data copy=yes'

    六、playbook

    1、核心元素

    name唯一id,用来标识这个play主要用来干什么
    hosts列出这个play会在远程的哪些host上执行
    remote_user指定远程host执行用户
    become_method用于指定切换账号时使用的特权账号,如su和sudo
    become用于设置是否切换账号运行,如果没有设置become_method,则使用sudo进行账号切换
    become_user用于指定使用sudo进行账号切换时具体切换到哪个账号,使用这个参数时需要become为true,对于become_method可设置也可不设置,如果不设置,使用默认的sudo账号进行账号切换
    ignore_errors用于控制当play中的某一个task执行失败时,是否继续执行后面的task
    pre_tasks用于指定在roles定义的tasks之前执行的tasks,具体可参考ansible playbook play执行顺序
    roles列出这个play会引入哪些roles,可与pre_tasks,post_tasks和tasks一起控制play执行顺序
    post_tasks用于指定所有task执行之后的任务,跟pre_tasks一样也可以用来控制执行顺序
    tasks    用于指定一系列要执行的task列表,跟pre_tasks, post_tasks和roles一起控制play执行顺序
    run_once  用于控制对于相同的host是否对相同任务执行多次,默认是false
    timeout设置每个task最多执行时间,超时则task执行失败,返回错误
    vars 使用Dictionary格式定义play级别变量,可参考ansible变量详解
    vars_files引入包含当前play变量的文件列表
    gather_facts设置是否需要收集远程host的fact变量结果
    handlers被tasks调用的任务列表

  • 相关阅读:
    红细胞膜包覆葫芦素B纳米结构脂质载体RBC-CuB-NLC/脂三尖杉酯碱脂质体的制备
    我该如何入门Python机器学习?
    企业架构LNMP学习笔记57
    一、Kubernetes入门
    测试开发如何快速上手Vue前端开发(下)
    Java通过自定义类加载器模拟冰蝎免杀功能
    如何恢复回收站删除的文件?
    Typora图床上传配置:PicGo+Gitee 不完全指南
    websocket实现一个局域网在线摸鱼聊天室
    xLua背包实践
  • 原文地址:https://blog.csdn.net/weixin_71429844/article/details/127041100