Ansible自动化运维工具

一.什么是Ansible

1.简介

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

Ansible是基于模块工作的,本身没有批量部署的能力,真正具有批量部署能力的是Ansible运行的模块,Ansible只是提供一个框架。Ansible不需要在远程主机上安装client/agents,因为它们是基于ssh来和远程主机通讯的。

2.架构

ansbile:核心程序

modules:包括ansible自带的核心模块以及自定义模块

plugins:完成模块功能的补充,包括连接插件,邮箱插件

palybooks:剧本,定义ansbile多任务配置文件,由ansible自动执行

inventory:定义ansbile管理的主机清单

connection plugins:负责和被监控端实现通信

3.工作流程

加载配置文件: Ansible 默认查找 /etc/ansible/ansible.cfg 配置文件,这个文件包含了Ansible运行时的行为设定,如连接方式、插件路径等。

解析Inventory: Ansible 使用 Inventory 文件(默认是 /etc/ansible/hosts)来确定需要操作的目标主机或主机组。

编译Playbook或命令: Ansible 准备执行的Playbook或直接执行的Ad-Hoc命令,并解析其中的任务和模块调用。

模块加载与执行策略准备: 对于每个任务,Ansible 加载相应的模块(如 command 模块),并准备执行上下文,包括变量、环境等。

生成并传输临时脚本: Ansible 会根据任务和模块生成一个或多个临时的Python脚本,并通过SSH连接传输到目标主机的临时目录,通常位于目标用户的 ~/.ansible/tmp/ansible-tmp-<UNIQUE_ID>/ 目录下。

赋予执行权限: 在目标主机上,Ansible 会给这个临时Python脚本加上执行权限,以便能够运行。

执行远程脚本: Ansible 通过SSH在目标主机上执行这个临时脚本,并收集执行结果。

结果收集与处理: 执行完毕后,各个主机的执行结果被收集并汇总,Ansible根据这些结果决定是否继续执行后续任务,或是根据Playbook中的错误处理逻辑(如 rescue 和 always 块)进行操作。

清理: 一旦任务执行完成,无论成功还是失败,Ansible 会清理目标主机上的临时文件,包括删除之前上传的Python脚本。

退出与报告: 清理完成后,Ansible 进程在目标主机上退出,并向控制机报告最终的执行状态和结果。

二.部署Ansible批量管理

1.节点规划

主机名

       角色

      IP地址

      server

     控制节点

   192.168.63.34

      host1

     受管节点

   192.168.63.35

      host2

     受管节点

   192.168.63.36

      host3

     受管节点

   192.168.63.37

2.安装Ansible

控制节点

[root@localhost ~]# hostnamectl set-hostname server

[root@localhost ~]# bash

[root@server ~]# yum install -y epel-release #Centos需要安装EPEL库

[root@server ~]# yum install -y ansible #yum包安装Ansible

[root@server ~]# ansible --version #查看版本

ansible 2.9.27

  config file = /etc/ansible/ansible.cfg

  configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']

  ansible python module location = /usr/lib/python2.7/site-packages/ansible

  executable location = /usr/bin/ansible

  python version = 2.7.5 (default, Oct 30 2018, 23:45:53) [GCC 4.8.5 20150623 (Red Hat 4.8.5-36)]

其余三个受管节点分别改名。

[root@localhost ~]# hostnamectl set-hostname host1

[root@localhost ~]#  hostnamectl set-hostname host2

[root@localhost ~]#  hostnamectl set-hostname host3

3.设置免密登录

3.1控制节点设置hosts解析

[root@server ~]# vi /etc/hosts

192.168.63.35 host1

192.168.63.36 host2

192.168.63.37 host3

3.2生成密钥

[root@server ~]# ssh-keygen -P "" -t rsa

Generating public/private rsa key pair.

Enter file in which to save the key (/root/.ssh/id_rsa):

Created directory '/root/.ssh'.

Your identification has been saved in /root/.ssh/id_rsa.

Your public key has been saved in /root/.ssh/id_rsa.pub.

The key fingerprint is:

SHA256:0A3X0XXBjNdSRO3NF9pnJA+70vScfobDSB9IIR+jqAM root@server

The key's randomart image is:

+---[RSA 2048]----+

|        . ...o+*X|

|       . +. =.===|

|      . ...+ ++Xo|

|    E  .. . o.o.O|

|     . .S  . + =+|

|      o     + +.o|

|       .   . =.o |

|            . =.o|

|               o.|

+----[SHA256]-----+

-P "":设置空密码

-t rsa: 指定生成密钥的类型为RSA 简化后续实验输密码操作

3.3将公钥发送给受管节点

ssh-copy-id -i /root/.ssh/id_rsa.pub root@host1

ssh-copy-id -i /root/.ssh/id_rsa.pub root@host2

ssh-copy-id -i /root/.ssh/id_rsa.pub root@host3

3.4测试免密登录

[root@server ~]# ssh root@host1

Last login: Tue Nov 26 10:34:55 2024 from 192.168.63.1

[root@host1 ~]# exit

登出

Connection to host1 closed.

[root@server ~]# ssh root@host2

Last login: Tue Nov 26 10:35:01 2024 from 192.168.63.1

[root@host2 ~]# exit

登出

Connection to host2 closed.

[root@server ~]# ssh root@host3

Last login: Tue Nov 26 10:35:04 2024 from 192.168.63.1

[root@host3 ~]# exit

登出

Connection to host3 closed.

4.定义主机清单

4.1ansible常见的配置文件

/etc/ansible/ansible.cfg:主配置文件

/etc/ansible/hosts:主机清单文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值