ansible怎么用

我们使用三步法来学习一下这个工具

第一步

ansible的历史

它是一个开源项目,最初由 Michael DeHaan 创建,并于2012年首次发布。以下是 Ansible 的历史概述:
2012年:Ansible 项目由 Michael DeHaan 创建,并于同年发布。最初的版本专注于简化系统配置和部署。
2013年:Ansible 发布了 1.0 版本,引入了一些重要的功能和改进,如模块化插件系统和多平台支持。这些改进增强了 Ansible 的灵活性和可扩展性。
2015年:Ansible 宣布被 Red Hat 收购。这使得 Ansible 获得了更多的资源和支持,并进一步推动了其在自动化领域的发展。
2017年:Ansible 2.0 版本发布,引入了许多新功能和改进,包括支持 Windows 平台、容器化支持、网络自动化和多个云平台的增强集成。
2019年:Ansible 2.9 版本发布,成为 Ansible 的最后一个主要版本。此后,Ansible 的版本号调整为年份和月份形式,如 2019.10。
2021年:Ansible 4.0 版本发布,引入了一些重要的改进和新功能,例如 Ansible Collections 的引入,以及在 Windows 和网络自动化方面的增强。
Ansible 在其发展过程中获得了广泛的采用和社区支持,成为自动化和配置管理领域的重要工具之一。它的简单性、可读性和可扩展性使得许多组织和个人选择 Ansible 来简化和自动化他们的 IT 环境。

第二步

ansible是什么

首先看一下ansible的核心组件
ansible核心组件

  • Modules:包括Ansible自带的核心模块及自定义模块
  • Plugins:完成模块功能的补充,包括连接插件、邮箱插件
  • Playbooks:剧本;定义Ansible多任务配置文件,完成对主机批量部署操作
  • Inventory:定义Ansible管理主机的清单 /etc/ansibe/hosts
    主机清单里面包含了被执行的主机
    仅对主机清单内的主机列表进行操作,可以实现主机分组
  • Connection Plugins:负责和被监控端实现通信

了解了ansible的核心,我们来看一下ansible到底是个什么

Ansible 是一种自动化工具,用于批量配置、部署和管理计算机系统,是基于ssh协议来实现远程管理,不需要在被执行主机上安装代理。它提供了一种简单而强大的方式来自动化各种任务,包括系统配置、应用程序部署、编排和协调任务、云资源管理以及网络设备配置。此外,ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架
以下是 Ansible 的主要用途和功能:
系统配置管理:Ansible 可以自动配置和管理多台计算机系统。它使用声明性语言(YAML)来描述所需的系统状态,并通过 SSH 协议与目标主机进行通信,实现系统配置的自动化。
应用程序部署:Ansible 可以自动化应用程序的部署过程。它可以将应用程序和相关依赖项安装到目标主机,并确保应用程序的正确配置和启动。
编排和协调任务:Ansible 具有强大的任务编排能力。你可以定义复杂的任务流程,包括多个主机和任务的顺序和并行执行。这使得你可以协调和管理跨多个系统的任务。
云资源管理:Ansible 可以与各种云提供商(如 AWS、Azure、GCP)集成,通过 API 自动管理云资源。你可以使用 Ansible 创建、启动、停止和删除云实例,配置网络和存储资源等。
网络设备配置:Ansible 支持网络设备的自动化配置。它可以与各种网络设备(如路由器、交换机)进行交互,并通过设备特定的模块实现配置管理、设备状态查看和故障排除等操作。
Ansible 的主要优势在于其简单性和易用性。它使用基于文本的声明性语言,易于理解和编写。此外,Ansible 不需要在目标主机上安装任何代理程序,只需通过 SSH 协议与目标主机进行通信,因此部署和使用都非常简单。它还具有强大的社区支持和广泛的模块库,可以扩展其功能和适用于各种场景。

第三步

ansible怎么用

使用 Ansible,你可以按照以下步骤进行配置和管理计算机系统:
安装 Ansible:首先,你需要在管理主机上安装 Ansible。Ansible 可以在多个操作系统上运行,包括 Linux、macOS 和 Windows。你可以按照 Ansible 官方文档提供的安装指南进行安装。
创建 Ansible Inventory:Ansible Inventory 是一个用于定义目标主机和主机组的配置文件。你可以在 Inventory 文件中列出要管理的主机的 IP 地址或主机名,并将它们分组。默认情况下,Ansible 使用 /etc/ansible/hosts 文件作为 Inventory 文件,但你也可以创建自定义的 Inventory 文件。
编写 Ansible Playbooks:Ansible Playbooks 是用来描述所需系统状态和执行任务的 YAML 文件。你可以编写 Playbooks 来定义主机组、变量、任务和处理步骤。Playbooks 提供了灵活的语法和模块化的任务组织方式。
定义主机组和变量:在 Playbooks 中,你可以定义主机组和主机变量。主机组可以根据功能、环境或其他分类方式进行定义,而主机变量可以用于在不同主机之间传递配置信息。
编写任务和角色:在 Playbooks 中,你可以编写任务来执行特定的操作,如安装软件包、启动服务、配置文件等。你还可以将任务组织为角色,以便在多个 Playbooks 中重用。
运行 Ansible Playbooks:使用 ansible-playbook 命令来运行 Ansible Playbooks。你需要指定 Inventory 文件和要运行的 Playbook 文件。Ansible 将连接到目标主机,根据 Playbook 中定义的任务和配置,执行相应的操作。
除了上述基本步骤,Ansible 还提供了许多功能和模块,用于处理变量、条件语句、循环、错误处理等。后续可以根据具体需求,深入学习 Ansible 的功能和高级用法。

实战(一个简单的例子)

将文件上传到指定的机器并启动服务
确保你的机器安装了ansible
创建剧本:adsl.yaml

---
- name: Copy and start scripts
  hosts: ips
  tasks:
    - name: Copy scripts
      copy:
        src: "{{ item }}"
        dest: "/home/node/google/{{ item }}"
        mode: "0755"
        force: yes  #覆盖原有文件
      with_items:
        - run.sh

    - name: Start run.sh script
      shell:  cd /home/node/google & nohup sh run1.sh >>run1.log 2>&1 &

host文件: host.txt

[ips]
ip000 ansible_ssh_host=XXXXX ansible_ssh_port=XXXX ansible_ssh_user=root ansible_ssh_pass=XXXXXXX
ip001 ansible_ssh_host=XXXXX ansible_ssh_port=XXXX ansible_ssh_user=root ansible_ssh_pass=XXXXXXX
ip002 ansible_ssh_host=XXXXX ansible_ssh_port=XXXX ansible_ssh_user=root ansible_ssh_pass=XXXXXXX
ip003 ansible_ssh_host=XXXXX ansible_ssh_port=XXXX ansible_ssh_user=root ansible_ssh_pass=XXXXXXX

执行命令

ansible-playbook -i host.txt -vvv adsl.yaml
# -i:主机清单文件
# -vvv:详细的日志信息
# -user:ssh连接时的用户名

小tips

  • 执行剧本前可以检查一下语法格式的正确性:ansible-playbook --syntax-check adsl.yaml

  • 模拟执行剧本中的任务:ansible-playbook -C adsl.yaml

  • 在执行过程中可能会存在类似这种问题

Using a SSH password instead of a key is not possible because Host Key checking is 
enabled and sshpass does not support this. Please add this host's fingerprint to your 
known_hosts file to manage this host
解决这个问题的方法是手动添加目标主机的指纹到 known_hosts 文件中。
known_hosts 文件用于存储已知的主机公钥指纹,以便在将来的连接中进行验证。

以下是解决这个问题的步骤:
打开终端并运行以下命令,将目标主机的指纹添加到 known_hosts 文件中:
ssh-keyscan <目标主机IP或主机名> >> ~/.ssh/known_hosts
请将 <目标主机IP或主机名> 替换为您要连接的实际目标主机的 IP 地址或主机名。
  • 11
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值