一、Ansible基本概述:

Ansible是一个配置管理系统(configuration management sysytem )你只需要可以使用ssh访问你的服务器或设备就行

Ansible 是近年来越来越火的一款开源运维自动化工具,通过Ansible可以实现运维自动化,提高运维工程师的工作效率,减少人为失误。

Ansible 通过本身集成的非常丰富的模块可以实现各种管理任务,其自带模块超过上千个。更为重要的是,它操作非常简单,即使小白也可以轻松上手,但它提供的功能又非常丰富,在运维领域,几乎可以做任何事。

1、Ansible特点

  • ansible不需要单独安装客户端,ssh相当于ansible客户端
  • ansible不需要启动任何服务,仅需要安装对应工具即可
  • ansible依赖大量的python模块来实现批量管理
  • ansible配置文件 /etc/ansible/ansible.cfg

2. ansible批量管理服务介绍

ansible批量管理服务意义
  •  提高工作的效率 
  • 提高工作准确度
  • 减少维护的成本
  • 减少重复性工作
ansible批量管理服务功能
  •  可以实现批量系统操作配置

  • 可以实现批量软件服务部署
  •  可以实现批量文件数据分发
  • 可以实现批量系统信息收集

3.Ansible基本架构

  • 连接插件(connector plugins)用于连接主机 用来连接被管理端
  • 核心模块(core modules)连接主机实现操作,它依赖具体的模块来做具体的事情
  • 自定义模块(custom modules)根据自己的需求编写具体的模块
  • 插件(plugins)完成模块功能的补充
  • 剧本(playbooks ansible)的配置文件,将多个任务定义在剧本中,由ansible自动执行
  • 主机清单(host inventory)定义ansible需要操作主机范围

最重要的一点是ansible是模块化的 它所有的操作都依赖于模块

 

 二、Ansible安装配置

ansible的环境:

环境部署

m01       192.168.1.66  ansible管理端

backup  192.168.1.69  ansible受控端

nfs    192.168.1.70  ansible受控端

web01    192.168.1.67  ansible受控端

1、安装ansible,需先安装epel扩展源

[root@localhost yum.repos.d]# rpm -Uvh https://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm
[root@localhost yum.repos.d]# yum install eprl-release

检查epel源中有无ansible

[root@localhost ~]# yum list ansible
Loaded plugins: fastestmirror
Repository base is listed more than once in the configuration
Repository updates is listed more than once in the configuration
Repository extras is listed more than once in the configuration
Repository centosplus is listed more than once in the configuration
Repository mysql57-community is listed more than once in the configuration
Loading mirror speeds from cached hostfile
 * base: mirrors.aliyun.com
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
Available Packages
ansible.noarch                                2.9.14-1.el7                                 epel

  安装ansible

[root@localhost ~]# yum install -y ansible

查看版本号

[root@m01 ~]# ansible --version

  

 

 hosts:被管理机的IP或主机名列表

ansible.cfg:主配置文件

roles: 角色或插件路径

2、ssh部署公钥认证

#利用非交换工具实现批量分发公钥与批量管理服务器

[root@m01 ~]# ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
[root@m01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.1.69
[root@m01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.1.70
[root@m01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.1.67

3、配置ansible主机清单

主机清单配置文件 /etc/ansible/hosts 

[root@m01 ~]# vim /etc/ansible/hosts

 

 

 4、验证ansible

[root@m01 ansible]# ansible cm -m ping

  

     如果报一下错误

192.168.1.11 | FAILED! => {
    "msg": "Using a SSH password instead of a key is not possible because Host Key checking is enabled and sshpass does not support this.  Please add this host's fingerprint to your known_hosts file to manage this host."
}

产生原因:控制端与被控制端第一次通讯,需要先添加指纹信息

解决方法:ssh 192.168.1.11 (被控制端ip)

  如果被控制端机器比较的情况下:

修改 /etc/ansible/ansible.cfg 中的host_key_checking = False

三、ansible服务架构信息

  • 主机清单配置 

  •  软件模块信息 OK
  •  基于秘钥连接主机 OK
  • 主机需要关闭selinux OK
  • 软件剧本功能

四、Ansible常见模块

调用模块来部署架构

  安装软件包

  修改配置文件

  创建程序用户组

  创建目录,并修改所属和权限

  启动服务

  挂载

  测试

在ansible中时指需要快速执行一条命令,并且不需要保存的命令,对于复杂的命令则为playbook

模块的应用语法格式:
ansible 主机名称/主机组名称/主机地址信息/all -m(指定应用的模块信息) 模块名称 -a(指定动作信息) "执行什么动作"

Ansible注意事项--->提示颜色信息说明

    黄色:对远程节点进行相应的修改

    绿色:对远程节点不进行相应修改,或者只对远程节点信息进行查看

    红色:操作执行命令有异常

    紫色:表示对命令执行发出警告信息(可能存在问题)

1.command模块

主要执行Linux的基础命令,可以执行远程服务器命令执行、任务执行

[root@localhost ansible]# ansible -k -i /etc/ansible/hosts all -m command -a 'date'
SSH password: 
192.168.1.11 | CHANGED | rc=0 >>
Thu Dec 29 15:30:11 CST 2022
192.168.1.6 | CHANGED | rc=0 >>
Thu Dec 29 15:30:12 CST 2022

all:代表/etc/ansible/hosts内所有机器

[root@localhost ansible]# ansible -k -i /etc/ansible/hosts all -m command -a 'ping www.baidu.com -c 1'
SSH password: 
192.168.1.6 | CHANGED | rc=0 >>
PING www.a.shifen.com (180.101.49.13) 56(84) bytes of data.
64 bytes from 180.101.49.13 (180.101.49.13): icmp_seq=1 ttl=54 time=6.22 ms

--- www.a.shifen.com ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 6.229/6.229/6.229/0.000 ms
192.168.1.11 | CHANGED | rc=0 >>
PING www.a.shifen.com (180.101.49.13) 56(84) bytes of data.
64 bytes from 180.101.49.13 (180.101.49.13): icmp_seq=1 ttl=54 time=5.89 ms

--- www.a.shifen.com ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 5.890/5.890/5.890/0.000 ms

2.shell模块

  用于远程客户端上执行各种shell命令或运行脚本

#默认模块,执行命令

[root@m01 ansible]# ansible cm -m command -a "hostname" 

#如果需要一些管道操作,则使用shell

[root@m01 ansible]# ansible cm -m shell -a "df -h | grep /$" -f 3

# -f=forks   /etc/ansible/ansible.cfg      #结果返回的数量

注意:command和shell模块的区别:

    command只能调用一条指令

    shell可以使用管道

3.yum模块

  用于软件的安装、升级、卸载

[root@m01 ansible]# ansible web -m yum -a "name=httpd state=installed"

name   ---指定要安装的软件包名称,如果有多个,用","隔开

state    ---指定使用yum的方法

  installed,present  ---安装软件包

  removed,absent  ---移除软件包

  latest         ---安装最新软件包

4.copy模块

  src    ---推送ansible的源文件或目录,空文件不能复制

  dest    ---推送客户端的目录或文件,需要绝对路径

  backup    ---对推送传输过去的文件,先备份原始文件

  content    ---将指定文件的内容复制到远程文件内

  group    ---将本地文件推送到远端,指定文件属组信息

  owner   ---讲本地文件推送到远端,指定文件属主信息

  mode   ---将本地文件推送到远端,指定文件权限信息

  force     --覆盖远程主机不一致的内容

#推送文件模块

[root@m01 ansible]# ansible cm -m copy -a "src=/etc/hosts dest=/tmp/test.txt"

#在推送覆盖远程端文件前,对远端已有文件进行备份,按照时间信息备份

[root@m01 ansible]# ansible cm -m copy -a "src=/etc/hosts dest=/tmp/test.txt backup =yes"

#直接向远端文件内写入数据信息,并且会覆盖远端文件内原有数据信息

[root@m01 ansible]# ansible cm -m copy -a "content='cm' dest=/tmp/cm"

 

案例:批量推送hosts文件,并备份

[root@m01 ~]# ansible cm -m copy -a "src=/etc/hosts dest=/etc/hosts backup=yes"

案例2:添加rsync认证文件和rsync客户端密码文件

添加rsync服务端认证文件:

[root@m01 ~]# ansible backup -m copy -a "content='rsync_backup:1' dest=/etc/rsync.password owner=root group=root mode=600"
[root@m01 ~]# ansible backup -m shell -a "ls -l /etc/rsync.password"
192.168.1.69 | CHANGED | rc=0 >>
-rw------- 1 root root 14 Nov 13 10:50 /etc/rsync.password
[root@m01 ~]# ansible backup -m shell -a "cat /etc/rsync.password"
192.168.1.69 | CHANGED | rc=0 >>
rsync_backup:1

  添加rsync客户端密码文件

[root@m01 ~]# ansible cm -m copy -a "content='1' dest=/etc/rsync.pass owner=root group=root mode=600"

  

5.service模块  

  用于远程客户端的各种服务管理,包括启动、停止、重启、重新加载

[root@m01 ~]# ansible cm -m service -a "name=crond state=stopped enabled=yes"

name    #定义要启动服务的名称

state    #指定服务状态时停止或是运行,停止和运行指令要写成过去式

    started  #启动

    stopped  #停止

    restarted  #重启

    reloaded  #重载

    enabled  #是否让服务开启启动

 

 6.user模块

  主要用于操作系统用户、组、权限、密码

7.cron模块

  用于添加、删除、更新crontab任务计划

8.synchronize 模块

  用于目录、文件同步,主要基于命令rsync命令工具同步目录和文件

 

posted on 2022-12-30 10:39  草根920  阅读(228)  评论(0编辑  收藏  举报