目录

一、Ansible简介

二、安装部署Ansible

2.1、在控制节点安装ansible

2.2、对Linux和Unix受管节点要求

2.3、基于 Microsoft Windows 的受管主机

2.4、受管网络设备

三、Ansible配置文件

3.1、ansible.cfg配置文件推荐做法

3.2、ansible.cfg配置文件内容

四、Ansible清单

五、运行临时命令


一、Ansible简介

Asnible是什么?一种简单的自动化语言,可通过playbooks完美描述IT应用架构。一种自动化引擎,运行playbooks。也就是自动化运维,避免手动操作的误操作,管理功能一致的服务器避免差异。

  • Ansible无代理,无需开放更多端口,仅通过ssh通信执行任务。
  • playbook用YAML格式编写,简单易学,人类可读的自动化。
  • 跨平台支持,Ansible提供Linux、Windows、UNIX和网络设备的无代理支持, 适用于物理、虚拟、云和容器
  • 使用非root账号即可管理,需要root的时候再sudo提权。

二、安装部署Ansible

Ansible中的主机分为 控制节点 和 受管节点。在控制节点上进行操作就可以管理受管节点。

2.1、在控制节点安装ansible

Ansible的安装在控制节点进行。Ansible是用python开发的,要先安装python,再安装ansible。红帽环境直接安装。CentOS环境ansible需要epel源来安装ansible。

sudo yum install epel-release
sudo yum list installed platform-python
sudo yum install ansible

2.2、对Linux和Unix受管节点要求

受管节点不需要安装特殊的代理。Ansible 控制节点使用 标准的网络协议连接受管主机,从而确保系统处于指定的状态。

受管主机可能要满足一些要求,具体取决于控制节点连接它们的方式以及它们要运行的模块。 Linux 和 UNIX 受管主机需要安装有 Python,这样才能运行大部分的模块。 对于 RHEL8 和 CentOS8 可以依靠 platform-python 软件包。也可以启用并安装 python36

2.3、基于 Microsoft Windows 的受管主机

  • 大部分专门为 Microsoft Windows 受管主机设计的模块需要在受管主机上安装 PowerShell 3.0 或更高版本,而不是安装 Python。
  • 受管主机也需要配置 PowerShell 远程连接。Ansible 还要求至少将 .NET Framework 4.0 或更高版本安装在 Windows 受管主机上。

2.4、受管网络设备

  • Ansible 可以自动化配置受管网络设备,例如路由器和交换机。 Ansible 包含大量专门为此目的而设计的模块。
  • 由于大多数网络设备无法运行 Python,因此 Ansible 在控制节点上运行网络模 块,而不是在受管主机上运行。

三、Ansible配置文件

3.1、ansible.cfg配置文件推荐做法

可以通过修改 Ansible 配置文件中的设置来自定义 Ansible 安装的行为。 Ansible 从控制节点上多个可能的位置之一选择其配置文件。

  • /etc/ansible/ansible.cfg  ansible 软件包提供一个基本的配置文件, 如果找不到其他配置文件、则使用此文件。
  • ~/.ansible.cfg  ansible在用户的主目录中查找.ansible.cfg文件。如果存在此配置并且当前工作目录中也没有 ansible.cfg 文件,则使用此配置取代 /etc/ansible/ansible.cfg。
  • ./ansible.cfg 如果执行 ansible 命令的目录中存在 ansible.cfg 文件,则使用它,而不使用全局文件或用户的个人文件。

可以用ansible --version查看当前ansible的配置文件。

推荐做法是在要运行 Ansible 命令的目录中创建 ansible.cfg 文件。目录中也包含任何供 Ansible 项目使用的文件,如清单 inventory 和 playbook,这是用于 Ansible 配置文件的最常用位置。一般不使用 ~/.ansible.cfg 或 /etc/ansible/ansible.cfg 文件。

3.2、ansible.cfg配置文件内容

Ansible配置文件由几个部分组成,每一部分含有以 key = value 键值对形式定义的设置。 每个部分的标题以方括号 [ ] 括起。对于基本操作,使用以下两部分:

  • [defaults] 部分设置 Ansible 操作的默认值
  • [privilege_escalation] 配置 Ansible 如何在受管主机上执行特权升级
[student@workstation ~]$ mkdir -p ansible/roles
[student@workstation ~]$ cd ansible/
[student@workstation ansible]$ vim ansible.cfg
[student@workstation ansible]$ tree
.
├── ansible.cfg
└── roles1 directory, 1 file[student@workstation ansible]$ cat ansible.cfg # [defaults]部分设置 Ansible 操作的默认值
# inventory 清单文件的路径
# remote_user 在受管主机上登录的用户的名称。如果未指定,则使用当前用户的名称
# ask_pass 是否提示输入SSH密码。如果使用SSH公钥身份验证,则可以是 false
# roles_path 查找roles的路径,多个路径用冒号 : 分隔
[defaults]
inventory = /home/student/ansible/inventory
remote_user = devops
ask_pass = false
roles_path = /home/student/ansible/roles    # [privilege_escalation]部分配置 Ansible 如何在受管主机上执行特权升级
# become 指定连接后是否自动在受管主机上切换用户(通常切换为 root)
# become_method 如何切换用户,通常为sudo
# become_user 要在受管主机上切换到的用户(通常是root,这也是默认值)
# become_ask_pass 是否需要为become_method提示输入密码。默认为 false
[privilege_escalation]
become = true
become_method = sudo
become_user = root
become_ask_pass = false                              [student@workstation ansible]$ ansible --version
ansible 2.9.21config file = /home/student/ansible/ansible.cfgconfigured module search path = ['/home/student/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']ansible python module location = /usr/lib/python3.6/site-packages/ansibleexecutable location = /usr/bin/ansiblepython version = 3.6.8 (default, Aug 24 2020, 17:57:11) [GCC 8.3.1 20191121 (Red Hat 8.3.1-5)]

ansible命令可以用命令选项覆盖配置文件,具体用 ansible --help 查看。

  • 用 --inventory 、--user 、--ask-pass 选项指定替代 [default] 部分
  • 用--become、--become-method 、--become-user 、--ask-become-pass 选项指定替代 [privilege_escalation] 部分
[student@workstation ansible]$ ansible --helpPrivilege Escalation Options:control how and which user you become as on target hosts--become-method BECOME_METHODprivilege escalation method to use (default=sudo #如何切换用户,通常为sudo), use `ansible-doc -t become -l` tolist valid choices.--become-user BECOME_USERrun operations as this user (default=root #要在受管主机上切换到的用户(通常是root,这也是默认值))-K, --ask-become-passask for privilege escalation password-b, --become          run operations with become (does not imply passwordprompting)Connection Options:......-k, --ask-pass        ask for connection password-u REMOTE_USER, --user REMOTE_USERconnect as this user (default=devops #在受管主机上登录的用户的名称。如果未指定,则使用当前用户的名称)

四、Ansible清单

清单定义 Ansible 将要管理的一批主机。这些主机也可以分配到组中,以进行集 中管理。组可以包含子组,主机也可以是多个组的成员。

可以通过两种方式定义主机清单。静态主机清单可以通过文本文件来定义。动态主机清单可以根据需要使用外部信息提供程序通过脚本或其他程序来生成。

指定清单的推荐做法,是在目录的配置文件 ansible.cfg 中 inventory = 配置。命令行用 --inventory 指定主机列表来覆盖默认的。主机列表写主机名、IP地址,可以用冒号 : 指定连续的范围,可以分组。使用asnible --list-host 检查。

[student@workstation ansible]$ vim inventory
[student@workstation ansible]$ cat inventory
[dev]
servera.lab.example.com[test]
serverb.lab.example.com[prod]
serverc.lab.example.com
serverd.lab.example.com[webservers:children]
prod[student@workstation ansible]$ ansible webservers --list-hosthosts (2):serverc.lab.example.comserverd.lab.example.com# 默认存在all和ungrouped组
[student@workstation ~]$ ansible -i inventory all --list-host
[student@workstation ~]$ ansible -i inventory ungrouped--list-host

五、运行临时命令

临时命令可以快速执行单个Ansible任务。使用的模块可以用 ansible-doc -l 列出。大多数模块具有幂等性,这表示它们可以安全地多次运行;如果系统已处于正确的状态,它们不会进行任何操作。

ansible servera.lab.example.com -m ping
ansible all -m pingansible-doc -l # 列出可用模块

快速进行测试。

[student@workstation ansible]$ ansible dev -m pingservera.lab.example.com | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/libexec/platform-python"},"changed": false,"ping": "pong"
}[student@workstation ansible]$ ansible webservers -m shell -a "yum repolist"[WARNING]: Consider using the yum module rather than running 'yum'.  If you need to use command because yum is insufficient you can add 'warn: false' to this command task or set
'command_warnings=False' in ansible.cfg to get rid of this message.
serverd.lab.example.com | CHANGED | rc=0 >>
repo id                         repo name
appstream                       CentOS Linux 8 - AppStream
baseos                          CentOS Linux 8 - BaseOS
extras                          CentOS Linux 8 - Extras
serverc.lab.example.com | CHANGED | rc=0 >>
repo id                         repo name
appstream                       CentOS Linux 8 - AppStream
baseos                          CentOS Linux 8 - BaseOS
extras                          CentOS Linux 8 - Extras

比如,使用copy模块向webservers复制文件,并向webservers添加一个john用户指定其为wheel组。-m 指定模块,-a 指定模块参数,参数的使用方法用ansible-doc查看例子即可。

[student@workstation ansible]$ ansible-doc copy
[student@workstation ansible]$ ansible webservers -m copy -a "src=/etc/hosts dest=/tmp owner=student group=student mode=0664"
[student@workstation ansible]$ ansible webservers -m shell -a "ls -l /tmp"[student@workstation ansible]$ ansible-doc user
[student@workstation ansible]$ ansible webservers -m user -a "name=john comment='Jonh Nash' group=wheel"
[student@workstation ansible]$ ansible webservers -m shell -a "id john"
  • 在大多数情形中,避免使用 command、shell 和 raw 这三个“运行命令”模块。
  • 当 shell 或 command 模块运行时,通常会基于它是否认为影响了计 算机状态而报告 CHANGED 状态。

Ansible01-Ansible基础和部署相关推荐

  1. ansible基础-playbooks

    1. playbooks介绍 如果说ansible的modules是工具,inventory配置文件是原材料,那么playbook就是一封说明书,这里会记录任务是如何如何执行的,当然如果你愿意,这里也 ...

  2. ansible基础-Jinja2模版 | 过滤器

    Jinja2模版介绍 注:本文demo使用ansible2.7稳定版 在ansible基础-变量的「8.2 模版使用变量」章节中关于模版与变量也有所提及,有兴趣的同学可以去回顾一下. ansible通 ...

  3. 《Ansible权威指南 》一第2章 Ansible基础元素介绍

    本节书摘来自华章出版社<Ansible权威指南 >一书中的第2章,第2.1节,李松涛 魏 巍 甘 捷 著更多章节内容可以访问云栖社区"华章计算机"公众号查看. 第2章 ...

  4. Ansible 系统概述与部署(1)

    title: Ansible 系统概述与部署(1) date: 2018-12-01 10:27:03 tags: Ansible categories: Ansible copyright: tru ...

  5. ansible自动化运维详解(一)ansible的安装部署、参数使用、清单管理、配置文件参数及用户级ansible操作环境构建

    文章目录 ansible自动化运维详解(一)ansible的安装部署.参数使用.清单管理.配置文件参数及用户级ansible操作环境构建 一.ansible的安装部署 1.1.ansible简介 1. ...

  6. Ansible基础入门

    1.1 Ansible是什么         随着移动互联.物联网.互联网+.大数据.云计算等大规模应用的催生推动,以及人们日常生活的互联网化,互联网的蓬勃发展不仅冲击影响着整个经济体,更对人们的生活 ...

  7. 《Ansible权威指南》一1.7 Ansible的安装部署

    本节书摘来自华章出版社<Ansible权威指南>一书中的第一章,第1.7节,作者 李松涛 魏 巍 甘 捷 更多章节内容可以访问云栖社区"华章计算机"公众号查看. 1.7 ...

  8. SAP(HANA+S/4)上云基础环境部署最佳实践

    简介:为提高客户服务水平及集团管理效率,客户选择了SAP解决方案.但是同时也对客户的IT基础设施提出了更多的要求.对此我们针对SAP上云基础设施选型.云原生产品.灾备方案设计,云上安全环境设计总结出了 ...

  9. docker 启动容器的时候没-p 后面怎么加-p_基于Docker搭建基础自动化部署

           阅读本文约需要7分钟  大家好,我是你们的导师,我每天都会在这里给大家分享一些干货内容(当然了,周末也要允许老师休息一下哈).上次老师跟大家分享了下SpringBoot如何实现全链路调用 ...

  10. Linux基础与部署

    Linux基础与部署 一.Linux概述[了解] Linux是一种操作系统.操作系统(Operating System,简称OS)是管理和控制计算机硬件与软件资源的计算机程序,是直接运行在" ...

最新文章

  1. 杀死多余的ghost 的Android emulator-5554 offline 的方法总结
  2. TClientDataSet[3]: 手动建立数据集
  3. Scala消息通信之akka,akka案例
  4. RESTful架构详解【转】
  5. linux苹果开发者p12,苹果testflight发布流程
  6. 10分钟带你学会微信小程序的反编译
  7. centos7 搭建apache druid
  8. security框架工作笔记001--- Shiro和Spring Security对比_智慧城市项目中选型用Spring Security
  9. 【医疗影像处理】antspy数据读取与保存
  10. VRay无限平面的应用教程
  11. newifi3刷什么固件最稳定_新路由三无线路由器刷什么固件好?
  12. 小刘同学的第一百五十五篇日记
  13. 负载均衡——三角传输
  14. 达叔926词汇pdf单词提取、保存
  15. 在微信里接收文件后如何指着文件用咱编的APP打开?
  16. CAD怎么切换角度标注对象?CAD切换角标操作技巧
  17. 《狂飙》台词“老默我想吃鱼了”被抢注商标
  18. 【Bugzilla】我按照bugzilla的官方指导进行的安装。(一)
  19. 如何学习TRIZ理论将其应用于创新实践当中?
  20. php如何实现上传照片功能_php如何实现图片上传功能

热门文章

  1. oracle9i安装不上,终于成功安装oracle9i了(Cent OS 4.0+oracle9204)
  2. python dos攻击_利用SMB漏洞DoS攻击任何Windows系统
  3. SpringSecurity使用 配置文件 和wen.xml 文件配置
  4. 为什么 JavaScript 的私有属性使用 # 符号
  5. 通讯组基本管理任务一
  6. 从AdventureWorks学习数据库建模——保留历史数据
  7. 简述DataInputStream和DataOuputStream
  8. 页面GBK,用jquery.post乱码问题
  9. 〖Linux〗使用Qt5.2.0开发Android的NDK应用程序
  10. mongodb地理位置索引实现原理