文章目录
- 一、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的版本,不指定默认就是最新版,本机使用的版本是
2.ansible的配置
因为ansible是通过ssh直接连接的,所以客户端不用安装什么软件,但是ansible连接时用的是普通身份,只在一些必要的时候才使用超户身份,所以先建立一个普通用户来执行ansible
自己编写一个配置文件和用户组的文件,也可以直接将/etc/ansible的模版复制过来
注意,ansible读取配置文件时,当前目录的会覆盖全局的配置文件
ansible.cfg ##是配置文件,表示默认读的主机组是当前目录下的inventory文件
inventory ##表示主机组里的用户有哪些,可以使用主机名,但是要做好本地解析
给另外两个节点server2和server3也创建一个普通用户,并赋予一个密码,不然一会ssh免密的时候会有问题
在server1进行ssh免密操作
su - devops ##注意是以普通用户连接,所以是在普通用户下免密
ssh-keygen
ssh-copy-id
3.开始使用ansibile的一些简单命令
ansible all -m ping ##检测主机组文件中的所有主机的通信是否ok
以超户身份远程连接用户组,会显示失败,-u表示以什么用户身份执行此命令
接下来是以普通用户身份执行的,那么为什么也不行呢,因为-b表示连接后切换身份,只-b的话默认是切换超户身份
将本地的passwd复制到test组用户的/tmp/下,注意发送的这个目录普通用户应该有权限,因为我们使用的是普通用户身份,不然就会报错
-m 表示调用的模块,-a表示执行的命令
src表示的是本地文件的路径
dest表示的远程主机保存的路径
在远程主机上执行命令,不指定模块时默认就是comman模块
上面的操作都是在普通用户的身份下执行的,但是我们有些时候需要变成超户,比如下图,我们要把文件复制到一个普通用户没有权限的目录
这个时候就需要让普通用户在节点上有超户的权限
server2和server3做同样的修改即可
修改后再次尝试发现可行
虽然我们在修改之后已经可以切换成超户身份了,但是每次还要加上-b,我们现在来让它默认自动切成超户
可以在/etc/ansible/ansible.cfg里找到这个模块然后复制过来
不加-b再次进行测试
sudo表示给他超户权限
组之间的交集和并集
!表示只在其中一个组才能进行操作,&表示两个组中都有的那个主机才能进行操作
可以再通过一个父级组来包括主机组
4.在指定主机上安装一个http服务
安装完之后可以直接查看是否安转成功
state表示安装
command模块与shell模块是相似的
ansible-doc yum ##可以查看yum的帮助文档,里面有很多例子以及对state的解释
absent表示写在
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" ##停止服务
6.user模块
ansible all -m user -a "name=yy password=<加密密码>"
##设定一个用户和密码,虽然不会报错,但是这个密码是明文的,需要加密
absible all -m user -a "name=yy state=absent remove=yes"
手动加密:
7.mysql_user模块
首先需要安装关于数据库的python服务,因为ansible是通过ansible来控制服务的,然后再安装mariadb来测试
启动服务,创建一个用户
在主机端登陆进行测试,可以查询到建立的用户直接是已经加密的: