Ansible基础入门--初识Ansible

  • 一、Ansible概念
  • 1、Ansible溯源
  • 2、Ansible特点
  • 二、Ansible的基本使用
  • 1、以脚本的方式使用Ansible
  • 2、以命令的方式运行Ansible
  • 3、使用ansible命令管理的前提
  • 4、测试使用Ansible
  • 5、使用自行创建的hosts文件
  • 6、使用ansible.cfg文件定义通用配置


一、Ansible概念

Ansible是一种配置管理工具,可以用来做自动化运维的管理,可以通过Playbook管理受控主机,当然除了Ansible之外,还有其他的配置管理工具,比如Salkstack以及Puppet,三者还是有些区别的
Puppet使用Ruby语言编写,Ansible和Saltstack使用Python编写,Puppet使用的语法复杂一点,且移植性不是很好,Ansible是基于ssh服务实现配置管理,所以只需要在管理主机安装Ansible即可,而Saltstack需要主机和客户端都安装软件,不过Saltstack可以用在大型的主机集群中,可以并行处理,速度要快一些

1、Ansible溯源

Ansible早先出自科幻小说,是虚构的一种以超光速传递信息的通信装置,Ursula K.LeGuin在他的Rocannon’s World一书中发明了这个概念,后来许多科幻家曾引用这个概念
而Ansible作者Michel DeHaan从Orscon Scott Card的科幻书Ender’s Game中借鉴的,书中提到Ansible可以跨越任何距离同时控制无数飞船,就好像在现实世界中,使用Ansible控制很多远程主机一样

2、Ansible特点

Ansible基于ssh实现,引入了特定领域语言(doimain-specific language,缩写为DSL)描述服务器状态
Ansible多用来进行配置管理和部署,其使用最简便的模型来实现各种操作的顺序执行,集成了大量实用的模块

二、Ansible的基本使用

1、以脚本的方式使用Ansible

稍微听说过Ansible的都应该知道Ansible配置管理工具可以运行Playbook脚本,而这个Playbook(剧本)以Yaml语法书写,脚本里按顺序描述了应该执行哪些操作,Ansible只需要运行这个Playbook就可以实现对远程所有主机的部署,类似下面的命令
ansible-palybook web.yml

2、以命令的方式运行Ansible

在不了解大部分模块之前,没办法写Playbook,因此需要先逐一熟悉一下模块,而Ansible给出了命令的方式直接引用模块,-m参数可以指定使用什么模块,所以直接在安装了Ansible的环境中,执行类似于下面的命令就可以使用模块了,这种命令方式也叫ad-hoc命令
ansible 192.168.1.100 -m ping -m表示使用模块,调用ping模块,检查网络是否是通的

3、使用ansible命令管理的前提

(1)有工具
安装ansible可以用yum或者apt直接安装,看自己系统的包管理方式是啥,该用啥装用啥装
yum -y install ansible或者sudo apt install ansible (2)配置好主机信息
安装完毕后,配置主机信息,配置主机信息的方式就是修改主机清单hosts
hosts里的内容决定了ansible要管理的受控主机的地址
安装好ansible之后,在系统下会有默认的清单配置:/etc/ansible/hosts
可以修改/etc/ansible/hosts这个文件如下:
192.168.10.11 ansible_port=22 ansible_user=vagrant
192.168.10.12 ansible_port=22 ansible_user=vagrant
192.168.10.13 ansible_port=22 ansible_user=vagrant

4、测试使用Ansible

有了hosts主机清单,就可以使用ansible了测试了

ansible 192.168.10.11 -m ping -k -m ping是指使用ping模块

-k意思是输入受控主机的密码

ansible all -m ping -k

使用all代表连接hosts文件里所有的受控主机

如下图

Spinnaker ansible对比 ansible与saltstack的区别_linux


当然如果在hosts指定了密码,执行ansible命令就不必输入密码了

Spinnaker ansible对比 ansible与saltstack的区别_linux_02

5、使用自行创建的hosts文件

实际场景中,一般不用默认的主机清单hosts(/etc/ansible/hosts),而是在ansible工作目录自行创建一个hosts文件,这样这个hosts文件可以随着playbook一起移交到其他地方使用,自定义的hosts文件的内容可以跟之前修改默认hosts文件的内容一样

写好这个hosts文件后,在用ansible执行的时候用-i参数指定一下这个文件即可,例如ansible all -i hosts -m ping -k中间的-i代表指定特定的主机清单文件,效果如下:

Spinnaker ansible对比 ansible与saltstack的区别_Spinnaker ansible对比_03


以上对于hosts文件的写法都是只能通过ip的方式管理受管主机,也可以使用名称,只需要起个别名就好,比如,加上ansible_host=IP 如下图:

Spinnaker ansible对比 ansible与saltstack的区别_后端_04

6、使用ansible.cfg文件定义通用配置

到这里虽然能用了,但是hosts文件每次没出现一个主机都这么配置,那可是要搞死人啊,因此有了ansible.cfg文件的作用,这个文件相当于会把通用的内容做一个声明,在自行创建的hosts文件的同一级目录中,再创建一个ansible.cfg文件,内容如下

Spinnaker ansible对比 ansible与saltstack的区别_Spinnaker ansible对比_05


inventory字段可以指定主机清单的位置

remote_user代表受控主机的用户名

remote_port代表端口号

host_key_checking代表不ssh主机的秘钥

通过在ansible.cfg文件里的配置,使得一些通用的配置能够写在这里,这样hosts文件里的主机信息(IP),只需要每行添加一个IP即可

由此可见ansible.cfg文件和hosts文件是搭配使用的

补充:ansible.cfg文件加上自己在项目目录中新创建的,总共是有三个
./ansible.cfg这个就是项目目录中自己创建的
~/.ansible.cfg这个是主目录下的
/etc/ansible/ansible.cfg这个是ansible安装后会默认生成的默认文件
以上三个文件的优先级是:从上到下,最上边优先级较高,依次次之
推荐自己在项目目录中手动创建一个ansible.cfg配置文件,这样可以伴随着playbook一起放到版本控制仓库中(git)