文章目录

  • 一、ansible的简介
  • 二、ansible的使用
  • 1.ansible的安装
  • 2.ansible的配置
  • 3.开始使用ansibile的一些简单命令
  • 4.在指定主机上安装一个http服务
  • 5.service模块
  • 6.user模块
  • 7.mysql_user模块


一、ansible的简介

ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。
ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。主要包括:
(1)、连接插件connection plugins:负责和被监控端实现通信;
(2)、host inventory:指定操作的主机,是一个配置文件里面定义监控的主机;
(3)、各种模块核心模块、command模块、自定义模块;
(4)、借助于插件完成记录日志邮件等功能;
(5)、playbook:剧本执行多个任务时,非必需可以让节点一次性运行多个任务。

ansible没有客户端,因此底层通信依赖于系统软件,Linux系统下基于OpenSSH通信,Windows系统下基于PowerShell,管理端必须是Linux

根据ansible使用过程中的不同角色,将其分为:使用者、ansible工具集和作用对象

Asible主推的卖点就是其无需任何Daemon维护进程即可实现相互间的通信,且通信方式是基于业内统一标准的安全可靠的SSH安全连接

ansible的通信机制:

(1)无客户端,只需安装SSH、Python即可
(2)基于OpenSSH通信,底层基于SSH协议(Windows基于PowerShell)
(3)支持密码和SSH认证,建议使用公私钥方式认证,因为密码认证方式的密码需要明文写配置文件,虽然配置文件可加密,但会增加Ansible的复杂度
(4)支持Windows,但仅支持客户端,服务端必须是Linux系统

二、ansible的使用

1.ansible的安装

红帽的企业8中是自带的,现在我们可以通过添加清华大学或阿里云的yum源来安装,本处添加的是清华大学的epel的yum源

ansible 判断端口不存在 ansible connection_ansible


ansible 判断端口不存在 ansible connection_普通用户_02


在安装时可以指定ansible的版本,不指定默认就是最新版,本机使用的版本是

ansible 判断端口不存在 ansible connection_配置文件_03

2.ansible的配置

因为ansible是通过ssh直接连接的,所以客户端不用安装什么软件,但是ansible连接时用的是普通身份,只在一些必要的时候才使用超户身份,所以先建立一个普通用户来执行ansible

ansible 判断端口不存在 ansible connection_客户端_04

自己编写一个配置文件和用户组的文件,也可以直接将/etc/ansible的模版复制过来
注意,ansible读取配置文件时,当前目录的会覆盖全局的配置文件

ansible.cfg		##是配置文件,表示默认读的主机组是当前目录下的inventory文件
inventory		##表示主机组里的用户有哪些,可以使用主机名,但是要做好本地解析

ansible 判断端口不存在 ansible connection_配置文件_05

给另外两个节点server2和server3也创建一个普通用户,并赋予一个密码,不然一会ssh免密的时候会有问题
在server1进行ssh免密操作
su - devops			##注意是以普通用户连接,所以是在普通用户下免密
ssh-keygen
ssh-copy-id

ansible 判断端口不存在 ansible connection_普通用户_06


ansible 判断端口不存在 ansible connection_ansible_07

3.开始使用ansibile的一些简单命令
ansible all -m ping		##检测主机组文件中的所有主机的通信是否ok

ansible 判断端口不存在 ansible connection_ansible 判断端口不存在_08

以超户身份远程连接用户组,会显示失败,-u表示以什么用户身份执行此命令

ansible 判断端口不存在 ansible connection_普通用户_09

接下来是以普通用户身份执行的,那么为什么也不行呢,因为-b表示连接后切换身份,只-b的话默认是切换超户身份

ansible 判断端口不存在 ansible connection_客户端_10

将本地的passwd复制到test组用户的/tmp/下,注意发送的这个目录普通用户应该有权限,因为我们使用的是普通用户身份,不然就会报错
-m 表示调用的模块,-a表示执行的命令
src表示的是本地文件的路径
dest表示的远程主机保存的路径

ansible 判断端口不存在 ansible connection_普通用户_11

在远程主机上执行命令,不指定模块时默认就是comman模块

ansible 判断端口不存在 ansible connection_配置文件_12


ansible 判断端口不存在 ansible connection_ansible 判断端口不存在_13


ansible 判断端口不存在 ansible connection_ansible_14

上面的操作都是在普通用户的身份下执行的,但是我们有些时候需要变成超户,比如下图,我们要把文件复制到一个普通用户没有权限的目录
这个时候就需要让普通用户在节点上有超户的权限
server2和server3做同样的修改即可
修改后再次尝试发现可行

ansible 判断端口不存在 ansible connection_ansible_15


ansible 判断端口不存在 ansible connection_ansible 判断端口不存在_16


ansible 判断端口不存在 ansible connection_普通用户_17


ansible 判断端口不存在 ansible connection_ansible_18


ansible 判断端口不存在 ansible connection_客户端_19

虽然我们在修改之后已经可以切换成超户身份了,但是每次还要加上-b,我们现在来让它默认自动切成超户
可以在/etc/ansible/ansible.cfg里找到这个模块然后复制过来
不加-b再次进行测试
sudo表示给他超户权限

ansible 判断端口不存在 ansible connection_ansible 判断端口不存在_20


ansible 判断端口不存在 ansible connection_配置文件_21

组之间的交集和并集
!表示只在其中一个组才能进行操作,&表示两个组中都有的那个主机才能进行操作
可以再通过一个父级组来包括主机组

ansible 判断端口不存在 ansible connection_配置文件_22


ansible 判断端口不存在 ansible connection_ansible 判断端口不存在_23

4.在指定主机上安装一个http服务

安装完之后可以直接查看是否安转成功

state表示安装

command模块与shell模块是相似的

ansible 判断端口不存在 ansible connection_ansible 判断端口不存在_24


ansible 判断端口不存在 ansible connection_客户端_25


ansible 判断端口不存在 ansible connection_配置文件_26

ansible-doc yum			##可以查看yum的帮助文档,里面有很多例子以及对state的解释
absent表示写在

ansible 判断端口不存在 ansible connection_ansible_27

5.service模块
常用的服务状态控制命令:
ansible test -m service -a "name=httpd state=started"		##启动服务
ansible test -m service -a "name=httpd state=restarted"		##重启服务
ansible test -m service -a "name=httpd state=stopped"		##停止服务

ansible 判断端口不存在 ansible connection_ansible 判断端口不存在_28

6.user模块
ansible all -m user -a "name=yy password=<加密密码>"		
##设定一个用户和密码,虽然不会报错,但是这个密码是明文的,需要加密
absible all -m user -a "name=yy state=absent remove=yes"

ansible 判断端口不存在 ansible connection_客户端_29


ansible 判断端口不存在 ansible connection_客户端_30


手动加密:

ansible 判断端口不存在 ansible connection_配置文件_31


ansible 判断端口不存在 ansible connection_客户端_32

7.mysql_user模块

首先需要安装关于数据库的python服务,因为ansible是通过ansible来控制服务的,然后再安装mariadb来测试

ansible 判断端口不存在 ansible connection_客户端_33


ansible 判断端口不存在 ansible connection_ansible 判断端口不存在_34


启动服务,创建一个用户

ansible 判断端口不存在 ansible connection_配置文件_35


ansible 判断端口不存在 ansible connection_ansible 判断端口不存在_36


在主机端登陆进行测试,可以查询到建立的用户直接是已经加密的:

ansible 判断端口不存在 ansible connection_客户端_37


ansible 判断端口不存在 ansible connection_客户端_38


ansible 判断端口不存在 ansible connection_配置文件_39