乐趣区

关于前端:Ansible-快速入门

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 helloworld
        template: 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 datanode
      command: "/hadoop-2.7.5/sbin/hadoop-daemon.sh start datanode"

举荐浏览

Redis 存储对象信息是用 Hash 还是 String

实操笔记:为 NSQ 配置监控服务的心路历程

退出移动版