Ansible 是什么?

Ansible是一个配置管理和配置工具,它使用SSH连接到服务器并运行配置好的任务,服务器上只需要开启ssh,所有工作都交给client端的ansible负责。

当我们有批量部署的需求时,我们可以自己写脚本,但是更推荐使用 Ansible。使用 Ansible 无需编码只需要配置 yaml 文件即可,并且 Ansible 已经内置了幂等性、并发度控制等功能,大大减少了批量部署时的工作量。

Ansible 原理示意图如上,我们需要关注以下 3 点就能掌握 Ansible 的大致原理。第一,hosts 配置文件的作用是告诉 Ansible 你的程序要部署到哪些机器;第二,yaml 文件的作用是告诉 Ansible 在目标机器上执行哪些操作。第三,Ansible 不需要在目标机器上安装客户端,它通过 SSH 把指令和要部署的程序发送到目标机器上。

安装 Ansile

安装命令:

python3 -m pip install --user ansible==2.5.4

验证安装是否正确:

ansible --version

配置 Ansible

  • 配置 .ansible.cfg 文件

.ansible.cfg 的路径:~/.ansible.cfg

将以下内容写入 .ansible.cfg 文件:

[defaults]
# inventory 是声明 hosts 配置文件
inventory=~/.ansible/hosts
  • SSH 使用密钥登录服务器

设置 SSH 通过密钥登录。使用 ssh-keygen 命令生成密钥对,把 id_rsa.pub 写入目标服务器的 authorized_keys 文件中。

  • 编辑 hosts 文件

hosts 配置文件的格式是 ini。示例如下

# serviceA 是集群名称
[serviceA]
# 枚举 serviceA 集群的 ip 地址
192.168.33.10

编辑 YAML 文件

告诉 Ansible 在目标机器上执行哪些操作的 YAML 文件,Ansible 把这类文件称为 “playbook”。

下面我们一起编写一个为名 hello.yml 的 playbook。这个 playbook 的作用是把 helloworld 文件发送到 serviceA 集群。

# hosts 是要部署服务的集群
- hosts: serviceA
# remote_user 是以 root 用户登录远程机器remote_user: root
# vars 是定义一些变量。这些变量可以在接下来的 tasks 中使用。vars:src: /Users/yutou/mywork/ansible-playbook
# tasks 是在远程机器上具体的执行动作。tasks:# name 是该动作的名称- name: upload helloworld# copy 是要具体执行的动作。copy 是 Ansible 模块,它的作用是把本地文件上传到目标机器上去。# {{ src }} 是 Jinja2 模板语法,Jinja2 模板语法不懂的话可自行百度。copy: src={{ src }}/helloworld dest=/home

发布


ansible-playbook hello.yml

Ansible playbook 常用模块

ansible 很多模块都可以做到 “见其名,知其意”,很多模块都是对 Linux 命令的模仿或者封装,更多模块可参见官方文档。下面我们先挑几个模块简单介绍一下:

  • synchronize,copy,unarchive 都可以上传文件。

  • ping:检查指定节点机器是否还能连通。主机如果在线,则回复pong。

  • yum, apt:这两个模块都是在远程系统上安装包的。

  • pip:远程机器上 python 安装包。

  • user,group:用户管理的。

  • service:管理服务的,类似于 centos7 上的 service。

template 模块和在远程机器上执行 Linux 命令的模块是非常重点的模块,所以接下来重点介绍一下。

Ansible playbook 常用模块

配置文件的一个特点是每个机器上的文件都不一样,都需要一些个性化配置,比如 A 机器配置 “hello world”,B 机器配置 “hello Liming”。这种需求就需要 template 模块实现。

template 模块使用 Jinja2 语法对模板文件进行渲染,然后把渲染后的文件上传到目标机器。渲染时用到的变量可以从 3 个地方读取到:

  • ansible 内置变量;

  • hosts 文件中定义的变量,如上所示;

  • 在 playbook 中 vars 定义的变量。

举例,模板文件 hello_x,内容如下:

hello {{ name }}

hosts 文件配置如下:


[serviceA]
192.168.33.10 name=world
192.168.33.11 name=Liming

在 playbook hello_x.yml 中配置如下:

tasks:- name: upload helloworldtemplate: src={{ src }}/hello_x dest=/home

执行 ansible-playbook hello_x.yml 后,192.168.33.10 上 /home/hello_x 文件的内容就是 hello world, 192.168.33.11 上则是 hello Liming

在远程机器上执行 Linux 命令

raw, command,shell 这三个模块都以用来在远程机器上执行 Linux 命令。三种区别大致区别如下:

  • 一般情况下使用 command

  • 命令中有特殊字符使用 shell

  • raw 是直接执行原始命令,没有经过模块封装,不建议用。

注意命令的内容一般使用 “” 引起来,否则模板渲染的时候可能报错:

- name: start datanodecommand: "/hadoop-2.7.5/sbin/hadoop-daemon.sh start datanode"

Ansible 快速入门相关推荐

  1. linux之Ansible快速入门

    Ansible是一款简单的运维自动化工具,只需要使用ssh协议连接就可以来进行系统管理,自动化执行命令,部署等任务. Ansible的优点 不需要安装客户端,不需要运行服务 使用python开发的一套 ...

  2. 运维工具 Ansible 快速入门教程

    Ansible 简介 Ansible 是新出现的自动化运维工具,基于 Python 开发,集合了众多运维工具(puppet.cfengine.chef.func.fabric)的优点,实现了批量系统配 ...

  3. Linux学习总结(61)——Ansible 快速入门学习

    一.基本概述 ansible是一款开源自动化工具,基于python paramiko模块开发,分布式,无需客户端 官网网址:https://www.ansible.com 官方文档:https://d ...

  4. 第三章、Ansible常用模块—新手快速入门

    第三章.Ansible常用模块--新手快速入门 文章目录 一. 查看系统上安装的所有模块 二.ansible常用模块 1.常用模块之–USER 2.常用模块之–shell 3.常用模块之–copy 4 ...

  5. 快速入门运维:成为一名高效运维工程师的关键步骤

    引言: 运维(Operations and Maintenance)是现代技术领域中至关重要的角色之一.而作为一名运维工程师,需要负责维护和管理软件系统.网络基础设施和服务器等关键组件.本篇博客将介绍 ...

  6. python自动化运维快速入门pdf下载_我爱电子书-《Python自动化运维快速入门》| pdf + epub + mobi + awz3, 高清版, 带目录,Kindle版, 多看精排版下载...

    Python自动化运维快速入门 豆 0.0分 资源最后更新于 2020-03-29 01:00:08 作者:郑征 出版社:出版社清华大学出版社 出版日期:2019-04 ISBN:9787302525 ...

  7. ansible从入门到入土:对剧本进行语法检查及真/伪执行剧本

    1.语法检查的作用 在shell脚本中可以使用-n来检查语法是否正确,通过语法检查可以大大的降低了脚本开发时间,那么作为一款热门的自动化工具,ansible也支持语法检查,下面一起来了解一下. 2.如 ...

  8. Shiro第一个程序:官方快速入门程序Qucickstart详解教程

    目录 一.下载解压 二.第一个Shiro程序 1. 导入依赖 2. 配置shiro配置文件 3. Quickstart.java 4. 启动测试 三.shiro.ini分析 四.Quickstart. ...

  9. 计算机入门新人必学,异世修真人怎么玩?新手快速入门必备技巧

    异世修真人怎么快速入门?最近新出来的一款文字修仙游戏,很多萌新不知道怎么玩?进小编给大家带来了游戏新手快速入门技巧攻略,希望可以帮到大家. 新手快速入门攻略 1.开局出来往下找婆婆,交互给点钱,旁边有 ...

最新文章

  1. postman发送post请求,用request.getParameter()获取请求参数
  2. 查看端口号被哪个程序占用
  3. wpf中左侧导航的实现
  4. linux系统下如何创建二级域名和删除这个目录文件
  5. linux命令安装中英文插件,linux – 如何使用命令行自动安装Eclipse插件?
  6. 语法比较:Julia,Matlab,Python
  7. 【算法】03 SCE-UA算法C++实现
  8. 光耦隔离的作用是什么?
  9. 出租屋租赁系统源码带小程序
  10. java定义私有变量_Java Reflection(七):私有变量和私有方法
  11. 你真的了解java编译优化吗?15个问题考察自己是否理解
  12. 浅谈虚拟化软件再防泄密领域的表现如何
  13. 8个好用的图片素材网站,免费资源多,够用一辈子
  14. 数据可视化作品有哪些
  15. linkedList手写
  16. QVM 实操记 - 18.12.28
  17. SBT下载特别慢的问题解决
  18. elementui 合并单元格
  19. matlab isnumeric函数,MATLAB数组的常用函数
  20. 欢乐的《教父》创作过程

热门文章

  1. 异常注意事项_多异常的捕获处理
  2. word打开文档很久很慢_word文档打开特别慢怎么解决,word10打开文档很慢
  3. python实时获取子进程输出_Python 从subprocess运行的子进程中实时获取输出的例子...
  4. c语言 错误 无效的控制谓词,PAT 1025反转链表的代码实现及错误分析(C语言)
  5. PyTorch深度学习实践05
  6. 【图文详解】在电脑中打开.properties配置文件时会生成一个空的名为Java的文件问题
  7. Tomcat之Windows下安装
  8. boost::regex
  9. 专门为ADO二层升三层的咏南中间件(特种用途)
  10. 工作流学习——Activiti整体认识二步曲