首页 > 数据库 > 数据库开发技术 > Ansible自动化运维工具1.0:核心组件
先放个链接,万一有人关注呢
↓ ↓ ↓ ↓ ↓
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-releaseEPEL源安装完成之后,即可开始安装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: 1Now 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主机清单
主机清单通常默认是/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思议;如有侵权,请联系管理员删除。