ansible的部署及模块介绍

什么是ansible?

Ansible是一种自动化工具,用于配置管理、应用部署和任务自动化。通过使用简单的剧本(Playbooks)和任务(Tasks),Ansible使得管理和部署基础设施变得更加简单和高效。Ansible基于SSH协议进行通信,不需要在被管节点上安装客户端,因此易于部署和扩展。它支持各种操作系统、云服务和网络设备,使得跨多个环境的自动化管理变得更加便捷。Ansible的语法简洁易懂,学习曲线较低,适用于各种规模的项目和组织。通过Ansible,用户可以实现基础设施即代码(Infrastructure as Code)、持续部署(Continuous Deployment)、自动化测试等现代化运维实践,提高团队的效率和可靠性。

ansible的优点

  1. 简单易用:Ansible使用基于YAML的剧本语言,语法简洁直观,易于学习和使用。

  2. 无Agent:无需在被管理节点上安装代理,通过SSH协议实现远程执行,部署简单高效。

  3. 灵活性:支持多种操作系统、云服务和网络设备,适用于各种不同场景和环境。

  4. 可扩展性:可以轻松扩展功能,编写自定义模块和插件以满足特定需求。

  5. 自动化能力:支持自动化配置管理、应用部署、任务编排等,提高运维效率和一致性。

  6. 社区支持:拥有活跃的社区和丰富的文档资源,便于获取帮助和分享经验。

  7. 可视化工具:提供Ansible Tower等可视化工具,简化任务调度、权限管理等操作。

ansible不足

  1. 学习繁琐: 对于初学者来说,学习 Ansible 可能需要花费一些时间。需要掌握 YAML 语法、模块的使用方法、Playbook 的编写等内容。

  2. Windows 支持: 相比于 Linux 和 Unix 系统,Ansible 在 Windows 平台上的支持相对较弱。虽然 Ansible 支持在 Windows 上执行命令和脚本,但其功能和性能仍然不如在 Linux 平台上的表现。

  3. 复杂性: 针对大型基础设施和复杂的自动化任务,有时候需要编写复杂的 Playbook 和角色,这可能会增加维护和理解的难度。

  4. 实时交互的限制: Ansible 主要是面向批量化操作的自动化工具,对于需要实时交互的场景(例如实时监控和调试),其支持并不是特别强大。

  5. 性能问题: 在某些情况下,特别是在大规模部署和高频率执行任务时,Ansible 的性能可能会成为瓶颈。

  6. 需求高的网络环境: Ansible 执行任务时需要与被管节点进行频繁的通信,因此对网络的稳定性和延迟要求较高。

ansible组件

  1. 控制节点(Control Node):

    控制节点是 Ansible 的中心管理服务器,通常是一个运行 Ansible 工具的 Linux 主机。在控制节点上执行 Ansible 命令和操作,包括编写和运行 Playbook,管理 Ansible 的配置文件等。
  2. 被管节点(Managed Nodes):

    被管节点是需要被 Ansible 管理和配置的远程主机或服务器。Ansible 通过 SSH 连接到被管节点,并在其上执行任务、命令或配置操作。
  3. Inventory(清单):

    清单是一个定义被管节点的列表的文件,通常是一个文本文件,其中列出了被管理主机的 IP 地址或主机名。清单文件可以分为静态清单和动态清单,用于指定 Ansible 应该在哪些主机上执行任务。
  4. 模块(Modules):

    模块是 Ansible 执行任务的基本单位,每个模块用于执行特定的操作,比如管理软件包、服务、文件操作等。Ansible 自带了众多模块,同时也支持用户编写自定义模块。
  5. Playbook:

    Playbook 是一个 YAML 格式的文件,其中包含了一系列任务和配置指令,用于定义 Ansible 在被管节点上执行的操作。通过 Playbook 可以实现复杂的自动化任务和配置管理。
  6. Roles(角色):

    角色是一种组织 Playbook 的方式,用于将相关的任务、变量和文件组织在一起,以便在不同的 Playbook 中重复使用。
  7. 变量(Variables):

    变量允许在 Ansible 中定义和引用数据,可以用于配置、条件判断和任务执行过程中的动态操作。

ansible的搭建

1.安装ansible(这里使用yum进行安装)

yum -y install ansible*

进入配置文件,查看到以下信息

进入/etc/ansible/ansible.cfg,执行ansible-config init --disabled > ansible.cfg,修改以下配置

nventory=/etc/ansible/hosts   设定清单文件信息
log_path=/var/log/ansible.log	开启ansible目录
host_key_checking=False		不检测服务器的指纹信息!
roles_path=~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles设定角色信息

2.配置主客连接

我们可以做两台之间的ssh免密登录,也可以在主机清单中填写ssh密码(不安全),我推荐两台之间做ssh免密登录较稳妥些。

ssh免密登录

生成密钥  ssh-keygen

一路回车

将密钥传输给远程计算机 ssh-copy-id root@远程主机IP

回答yes

输入远程计算机用户密码

尝试登录远程计算机,格式ssh root@远程计算机ip

如果直接登录成功,则表示已经免密成功

注意:登录后记得退出远程计算机exit

[group4:children]			该组的子组为2 3组
group2
group3

3.测试连接

ansible all -m ping
 ansible-doc -s ping   查看指定模块的帮助
Ansible-doc -l			查看所有模块

简单模块,命令介绍

ansible all -m command -a "creates=/iso ls"		可以检测文件是否存在,不会去执行
ansible all -m command -a "touch /root/123"  创建命令,在远程主机上执行指定的命令。
chdir 用来切换目录的
removes 当指定的文件存在的时候,命令会执行将文件删除,如果指定的文件不存在,则不会执行命令
creates 当指定的文件存在的时候,命令不执行(不创建)。如果指定的文件不存在,则执行命令创建文件

user模块

name  指定用户名  如果用户名不存在则可以创建用户

password  给用户添加密码,添加的密码只能是hash加密后的字符

uid  指定用户的uid

group 指定用户的基本组

groups 指定用户的附加组

append=yes 增量添加的附加组 相当于把一个用户添加到多个附加组里面

append=no 增量添加的附加组,相当于只设置一个附加组!

state=absent 删除用户 默认不删除家目录

remove=yes  删除用户的同时删除家目录

后面加参数即可。

ansible all -m user -a "name=chen"

script模块

编写一个脚本(赋予执行权限),可以让管控主机执行

ansible all -m script -a "chdir=/root test.sh"

copy模块

参数:

src: 要复制的文件路径(源文件)

dest: 要将文件复制到目标主机的哪个位置(必须出现的参数)

content:将指定的内容添加到远程主机的文件中

注意,content会覆盖原来的内容

copy当中不加任何参数,当主控端和远程主机的文件名一致,但是内容不一致

的时候会强制覆盖原有内容,等同于加上了force=yes

force=no 当主控端和远程主机文件名一致,但是内容不一致的时候,则放弃拷贝

backup=yes 当主控端和远程主机文件名一致,但是内容不一致的时候,则对目标文件进行备份

owner 指定文件的属主

group 指定文件的属组

mode 指定文件的权限

复制目录的时候不能复制空目录!

例如;在本地创建newfile文件,写入些文字,即可去客户机上/media查看ansible all -m copy -a "src=/root/newfile dest=/media"

ansible all -m copy -a "src=/root/newfile dest=/media"

修改文件内容

ansible all -m copy -a "content='lovely' dest=/media/newfile"

设置属主属组,给予777权限

ansible all -m copy -a "src=/root/newfile dest=/media owner=root mode=777"

yum模块

在远程主机上使用yum安装软件,在远程主机上需要配置好yum。

参数

name 软件名称

state:installed 安装  removed卸载

例如;安装dhcp服务

ansible all -m yum -a "name=dhcp* state=installed"

卸载dhcp服务

ansible all -m yum -a "name=dhcp* state=removed"

service模块

参数:

name 服务名

state:started 开启  restarted 重启  reloaded 重新加载

 stopped 停止

enabled=yes 开机自启

例如;重启防火墙服务

ansible all -m service -a "name=firewalld state=restarted"

下节简单介绍如何部署一个服务,角色

  • 26
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值