Ansible-使用Ansible自动化运维(一)

2,207 阅读3分钟

今天给大家分享的是一款运维工具——Ansible。

Ansible是一个开源的自动化运维工具,它能为运维人员做些什么呢?

使用场景

我们先设想一个场景,假如今天学徒需要在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操作,如文件操作,软件操作,服务操作等。

操作演示

废话不多说,学徒接下来就直接演示Ansible是怎么使用的吧。演示基于一个kubernetes集群(事先已经准备好了),集群里包括一个Master和两个Node虚拟机,学徒将Master机器作为Control Node,两个Node作为Managed Node,使用Ansible在两个Managed Node安装nginx应用,这个演示只是简单模拟一个软件批量安装的运维工作。

Step

  • 首先在Master机器上安装Ansible

# 由于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即可,关于主机清单的配置可能会另起一篇单独介绍。

[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连通性。

ansile nodes -m ping -i hosts

如果返回内容如下,说明都可以成功连通。

接下来,安装nginx服务。

ansible servers -m apt -a "name=nginx update_cache=yes" -i hosts

执行以上命令,你会发现,返回的信息似乎在说操作失败了。

别慌,这是由于安装服务时,一般是需要sudo权限的,可以直接在命令后加上-b(使用sudo权限执行命令)就行了。

ansible servers -m apt -a "name=nginx update_cache=yes" -i hosts -b

返回内容如下,说明已经成功安装了nginx服务。

可以到Managed Node服务器上去验证。

Bingo!


结束语

为了控制文字量,这篇先介绍到这里。

写这篇主要为了让大家知道有这么一款优秀的运维工具——Ansible,它使用简单,但却可以为我们承担许多繁杂的工作使我们专注于更需要专注的领域,随着社区的贡献,它的功能也越来越强大。后面我大概率会继续写一些关于Ansible的文章,例如Ansible的参数配置,Ansible playbook的使用,Ansible原理等。