ITPub博客

首页 > 数据库 > 数据库开发技术 > Ansible自动化运维工具1.0:核心组件

Ansible自动化运维工具1.0:核心组件

原创 数据库开发技术 作者:运维book思议 时间:2023-09-29 19:58:48 0 删除 编辑

先放个链接,万一有人关注呢

优质文章推荐

↓ ↓ ↓ ↓ ↓

Linux系统服务巡检脚本

Python脚本实现Zabbix自动微信告警

很多人安装了Ubuntu第一步就做错了

Linux系统不优化的后果有多严重?

不会吧!Linux系统磁盘分区只会fdisk吗?



Ansible简介

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

Ansible是基于模块化工作,本身没有批量部署的能力。真正具有批量部署的是Ansible所运行的模块,Ansible只是提供一个框架。


Ansible核心组件

Ansible主要由以下几个核心组件构成:

Ansible主体:Ansible的核心程序,提供一个命令行接口给用户对Ansible进行管理操作。

主机清单(HostInventory):为Ansible定义了管理主机的策略。一般小型环境下只需要在host文件中写入主机的IP地址即可,但是到了中大型环境用户有可能需要使用静态inventory或者动态主机清单来生成需要执行的目标主机。

核心模块(CoreModules):Ansible执行命令的功能模块,多数为内置的核心模块。

拓展模块(CustomModules):如果Ansible自带的模块无法满足需求,用户可自定义相应的模块来满足自己的需求。

连接插件(ConnectionPlugins):模块功能的补充,如连接类型插件、循环插件、变量插件、过滤插件等,该功能不常用。

任务剧本(Playbook):编排定义Ansible任务集的配置文件,由Ansible按照顺序依次执行,通常是JSON格式的YAML文件。

API:供第三方程序调用的应用程序编程接口。

Ansible工作原理

1.管理端支持local、SSH、zeromq三种方式连接被管理端,默认使用基于SSH的连接;

2.按照应用类型等方式进行主机清单分类,管理节点通过各类模块实现相应的操作,单个模块或单条命令的批量执行被称为ad-hoc;

3.管理节点可以通过playbook实现多个任务的集合,如Web服务的安装部署、数据库服务器的批量备份等。playbooks可以简单地理解为,系统组合的多条ad-hoc操作的配置文件。

Ansible环境准备

准备4台机器,将其中一台作为控制节点,其余3台作为客户机。

修改主机名

hostnamectl set-hostname ansiblehostnamectl set-hostname host1hostnamectl set-hostname host2hostnamectl set-hostname host3

在所有主机中的 /etc/hosts 解析主机名

192.168.43.2    ansible192.168.43.25   host1192.168.43.29   host2192.168.43.181  host3

Ansible的安装依赖于EPEL仓库,因此在安装Ansible前需要安装EPEL源

yum install -y epel-release

EPEL源安装完成之后,即可开始安装Ansible

 yum -y install ansible

安装完成后,查看Ansible版本

ansible --version

配置免密登录

为了在用户使用SSH远程登录时减少繁琐的操作步骤,一般会在服务器添加SSH密钥(私钥与公钥)对来进行免密登录。SSH密钥对通过加密算法生成一对密钥,默认采用RSA 2048位的加密方式。在管理节点生成密钥,并将公钥发送到各被管理节点,即可实现远程免密登录。

在管理节点通过命令生成密钥

 ssh-keygen

输出结果

Generating public/private rsa key pair.Enter file in which to save the key (/root/.ssh/id_rsa): Created directory '/root/.ssh'.Enter passphrase (empty for no passphrase): Enter same passphrase again: 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:NqqUuu4JB9yjdb5S0fweBZBENygD3bANOe21aFrGMUs root@ansibleThe key's randomart image is:+---[RSA 2048]----+|   .ooB++o       ||     *+E.o.      ||     .X.* o      ||. .  . @ . .     ||.. + .* S .      || .o ++ o +       ||... +.. . .      || o = ..  .       || o*.o.           |+----[SHA256]-----+

在生成密钥对过程中,系统会询问保存密钥的文件路径,这里直接按回车密钥会默认保存到/root/.ssh/目录下。接着输入两次密码,也可以是空密码,但必须两次输入密码一样。然后密钥会保存到指定文件路径中,并且显示用户的密钥指纹与艺术图像。

将生成的密钥发送到另外的被管理节点,注意命令结尾添加被管理节点的IP地址

ssh-copy-id root@192.168.2.132

输出结果

/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"The authenticity of host '192.168.2.132 (192.168.2.132)' can't be established.ECDSA key fingerprint is SHA256:fZSjWyicjEqeP5a7AXW74GUorEbxqB+knZRwW81XCA4.ECDSA key fingerprint is MD5:48:bb:7d:a2:0f:fe:3e:b8:d4:1d:9d:d4:ab:f3:77:9f.Are you sure you want to continue connecting (yes/no)? yes/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keysroot@192.168.2.132's password: 
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'root@192.168.2.132'"and check to make sure that only the key(s) you wanted were added.

此处会显示命令的文件路径与密钥的文件路径,并且在备份之前会提示用户主机的真实性无法确定,询问是否继续连接目标主机。输入“yes”之后开始使用密码去连接该主机进行备份,备份之后会提示用户登录该主机去查看是否成功。

通过Ansible登录已经建立免密登录的被管理节点

ssh host1

第一次登录被管理节点时系统仍会提示无法确定目标主机的真实性,输入“yes”继续。

退出控制节点

exit

主机清单

主机清单(Hpst Inventory),又称主机目录,是一个保存着管理节点的所有被管理节点信息与连接参数的文件,同时也用于主机分类。被管理节点的分类方式是多样化的,例如按照不同的作用分为业务节点与测试节点,按照地点可分为本地机房与异地机房等。

主机清单通常默认是/etc/ansible/hosts,该文件类似一个主机清单的配置模板,可由用户自定义。

重新配置主机清单内容,将主机清单内容修改为当前被管理节点的主机名

host1host2host3

之前对3台被管理节点进行了解析,所以才在主机清单中填写了主机名,否则配置不生效。

在刚才建立连接过程中,被管理节点的公钥已经存放到管理节点的~/.ssh/known_hosts文件中。所以也可以使用普通用户进行连接,前提条件是这个普通用户是shdo用户,在使用时添加-u参数就可以指定想要的用户。

通过Ansible的ping模块去测试与被管理节点的连通性,出现“SUCCESS”即表示成功。

ansible host1 -m ping

输出结果

host1 | SUCCESS => {    "ansible_facts": {        "discovered_interpreter_python": "/usr/bin/python"    },     "changed": false,     "ping": "pong"}

上述命令中,-m参数用来指定模块,不同的模块功能也不同,ping只是其中的一个模块,还有一些其他模块将在后续的内容中进行讲解。也可以通过添加一个-o参数,使其简洁化输出。

关于Ansible的操作命令可以简单理解为,Ansible让谁用什么模块去做什么操作或是达到某种状态。

未完待续。。。。。。

最后,祝大家中秋快乐,阖家团圆!工作再忙也不要忽略对家人的陪伴!

来不及解释了,快上车!(进群看公告)

欢迎新的小伙伴加入!在这里,我们鼓励大家积极参与群内讨论和交流,分享自己的见解和经验,一起学习和成长。同时,也欢迎大家提出问题和建议,让我们不断改进和完善这个平台。

              ↓↓↓ 点个在看,无需赞赏!

原文作者:运维book思议;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2022-09-24

  • 博文量
    333
  • 访问量
    215273