Ansible工作原理

Ansible是一款非常简单的IT自动化引擎,可自动执行 云配置配置管理应用程序部署服务内编排和许多其他IT需求。

从第一天开始,Ansible就专为多层部署而设计,它通过描述所有系统之间的相互关系来建模IT基础架构,而不仅仅是一次管理一个系统。

它不使用任何代理程序,也不使用其他自定义安全性基础结构,因此易于部署-最重要的是,它使用一种非常简单的语言(YAML,以Ansible Playbooks的形式)。

高效的架构

Ansible通过连接到节点并向其推出称为Ansible模块的小程序来工作。这些程序被编写为系统所需状态的资源模型。然后,Ansible执行这些模块(默认情况下通过SSH),并在完成后将其删除。

您的模块库可以驻留在任何计算机上,并且不需要服务器,守护程序或数据库。通常,您将使用自己喜欢的终端程序,文本编辑器以及可能的版本控制系统来跟踪内容的更改。

友好的SSH密钥

支持密码,但是带有ssh-agent的SSH密钥是使用Ansible的最佳方法之一。尽管如果您想使用Kerberos,那也很好。很多选择!

不需要root用户登录,您可以以任何用户身份登录,然后以su或sudo身份登录到任何用户。

Ansible的authorized_key模块是使用ansible控制哪些机器可以访问哪些主机的好方法。也可以使用其他选项,例如kerberos或身份管理系统。

ssh-agent bash
ssh-add〜/ .ssh / id_rsa

以简单的文本文件管理库存

默认情况下,Ansible使用一个非常简单的INI文件表示要管理的计算机,该文件将所有受管计算机放入您自己选择的组中。

要添加新计算机,无需使用其他SSL签名服务器,因此,毫无疑问可以确定为什么特定的计算机由于NTP或DNS问题而无法链接。

如果您的基础架构中还有其他来源,Ansible也可以对此进行插件,例如从EC2,Rackspace,OpenStack等来源中绘制库存,组和变量信息。

纯文本清单文件如下:

[webservers]
www1.example.com
www2.example.com

[dbservers]
db0.example.com
db1.example.com

一旦列出清单主机,就可以在简单的文本文件(在名为“ group_vars /”或“ host_vars /”的子目录中)中或直接在清单文件中为它们分配变量。

或者,正如已经提到的,使用动态清单从EC2,Rackspace或OpenStack等数据源中提取清单。

使用Ansible AD DOC并发执行任务

有了可用实例后,您可以立即与其进行对话,而无需进行任何其他设置:

ansible all -m ping 
ansible foo.example.com -m yum -a "name=httpd state=installed"
ansible foo.example.com -a "/usr/sbin/reboot"

请注意,我们有权访问基于状态的资源模块以及运行原始命令。这些模块非常易于编写,Ansible附带了许多模块,因此您的大部分工作已经完成。
Ansible包含一个巨大的内置模块工具箱,其中有750多个。

手册:简单而强大的自动化语言

PLaybook可以很好地协调基础结构拓扑的多个部分,并且可以非常详细地控制一次要处理的计算机数量。这是Ansible开始变得最有趣的地方。

Ansible的编排方法是微调的简单方法之一,因为我们相信您的自动化代码对您来说很有意义,而且对于特殊的语法或功能,您应该几乎不需要记住。

这是一本剧本的样子。提醒一下,这仅是预告片-跳至 docs.ansible.com 以获取完整的文档以及所有可能的方法。

---
- hosts: webservers
serial: 5 # update 5 machines at a time
roles:
- common
- webapp
- hosts: content_servers
roles:
- common
- content

例如app_config.yml可能看起来像:

---
- yum: name={{contact.item}} state=installed
with_items:
- app_server
- acme_software


- service: name=app_server state=running enabled=yes


- template: src=/opt/code/templates/foo.j2 dest=/etc/foo.conf
notify: 
- restart app server

该Ansible文档更加深入探讨了这一点。您还可以做很多事情,包括:

  • 从负载均衡器和监视窗口中取出机器
  • 使用收集到的有关特定服务器的事实,让一台服务器知道所有其他服务器的IP地址-并使用这些服务器动态构建配置文件
  • 设置一些变量并提示其他变量,并设置未设置时的默认值
  • 使用一个命令的结果来决定是否运行另一个命令
  • 有许多先进的可能性,但是很容易上手。

最重要的是,该语言保持可读性和透明性,并且您无需执行诸如声明显式排序关系或使用编程语言编写代码之类的事情。

扩展可扩展性:模块,插件和API

如果您想编写自己的模块,则可以使用任何可返回JSON的语言(Ruby,Python,bash等)编写Ansible模块。库存还可以通过编写与该数据源对话并返回JSON的程序来插入任何数据源。还有各种Python API用于扩展Ansible的连接类型(SSH并非唯一的传输方式),回调(Ansible日志的方式等),甚至用于添加新的服务器端行为。

原文: https://www.ansible.com/overview/how-ansible-works

0 个评论

要回复文章请先登录注册