Ansible运维自动化配置管理工具

Ansible运维自动化配置管理工具

开源地址:

https://github.com/ansible/ansible

https://github.com/ansible/ansible-examples

使用场景

我们先设想一个场景,假如今天学徒需要在aws创建10个ec2实例,并且每台都需要安装vim、docker基础软件,按照常规的操作是,学徒先创建10台ec2,然后分别远程进入这10台ec2实例,使用安装命令安装软件。不得不说,这其中有大量的重复工作,对于开发人员(郑重申明:DevOps也是开发人员)来说,是不能忍受的。

那么Ansible有用武之地了。

Ansible可以在不远程进入服务器实例的情况下,批量的对Linux服务器下达Ansible命令,远程安排你的服务器。

概念介绍

根据上面这个简单的图示,介绍一下Ansible的几个基本概念:

  • Control Node

    下达Ansible命令的主机。

  • Managed Node

    接收Ansible命令的服务器们**。**

  • Inventory

    主机清单,指定要对哪些Managed Node下达Ansible命令,将它们集中配置在一个ini文件中**。**

  • Module

    可以理解为命令模块,要对Managed Node执行的Ansible操作,如文件操作,软件操作,服务操作等。

操作演示

将Master机器作为Control Node,两个Node作为Managed Node,使用Ansible在两个Managed Node安装nginx应用

首先在Master机器上安装Ansible

1
2
3
4
5
6
7
8
# 由于Ansible基于Python开发,所以可以通过下面这行命令直接安装
pip install ansible
# apt或yum安装
apt install ansible -y
# &
yum install ansible -y
# 安装完成后通过以下命令验证
anisble --version复制代码

配置主机清单

创建文件hosts,配置ini格式的Managed Node信息,按照如下格式配置服务器的IP,远程登录方式,学徒这里使用密钥文件登录,如果使用户名密码登录的话,使用ansible_ssh_pass参数替换ansible_ssh_private_key_file即可,关于主机清单的配置可能会另起一篇单独介绍。

1
2
3
4
5
6
[nodes]
10.0.33.118
10.0.32.146
[nodes:vars]
ansible_ssh_user=admin
ansible_ssh_private_key_file=/home/admin/sshkey复制代码

可以对主机清单里的主机下达Ansible命令了

测试Control Node与Managed Node连通性。

1
ansile nodes -m ping -i hosts

其他配置需要具体参考官方文档。

https://juejin.im/post/5e15dd51f265da5d6b3cb89c

Ansible playbook配置

playbook 是 ansible 用于配置,部署,和管理被控节点的剧本。
  通过 playbook 的详细描述,执行其中的一系列 tasks ,可以让远端主机达到预期的状态。playbook 就像 Ansible 控制器给被控节点列出的的一系列 to-do-list ,而被控节点必须要完成。
  也可以这么理解,playbook 字面意思,即剧本,现实中由演员按照剧本表演,在Ansible中,这次由计算机进行表演,由计算机安装,部署应用,提供对外服务,以及组织计算机处理各种各样的事情。

执行一些简单的任务,使用ad-hoc命令可以方便的解决问题,但是有时一个设施过于复杂,需要大量的操作时候,执行的ad-hoc命令是不适合的,这时最好使用playbook。
  就像执行shell命令与写shell脚本一样,也可以理解为批处理任务,不过playbook有自己的语法格式。
  使用playbook你可以方便的重用这些代码,可以移植到不同的机器上面,像函数一样,最大化的利用代码。在你使用Ansible的过程中,你也会发现,你所处理的大部分操作都是编写playbook。可以把常见的应用都编写成playbook,之后管理服务器会变得十分简单。

Ansible playbook格式

1
2
3
4
5
6
7
8
9
10
11
--- 
#安装与运行mysql服务
- hosts: node1
remote_user: root
tasks:
- name: install mysql-server package
yum: name=mysql-server
state=present
- name: starting mysqld service
service: name=mysql
state=started

文件名称应该以.yml结尾

参考地址:

https://docs.ansible.com/ansible/latest/user_guide/playbooks.html

-------------本文结束-------------
0%