vlambda博客
学习文章列表

【基础】Ansible 自动化运维工具简单入门

关注我,你的眼睛会怀孕

一、简介

Ansible 简单的说是一个配置管理系统(configuration management system)。你只需要可以使用 ssh 访问你的服务器或设备就行。它也不同于其他工具,因为它使用推送的方式,而不是像 puppet 等 那样使用拉取安装agent的方式。你可以将代码部署到任意数量的服务器上。


【基础】Ansible 自动化运维工具简单入门

1、特性

模块化:

  • 调用特定的模块,完成特定的任务

  • 有paramiko、PyYAML、jinja2三个关键模块

  • 支持自定义模块

  • 基于python语言开发

  • 部署简单就要python和ssh,agentless

  • 安全,基于Openssh

  • 支持playbook编排任务

  • 幂等性:一个任务执行一遍和执行n遍效果一样,不会因为重复执行带来意外情况

  • 无序代理不依赖PKI(无需ssl)

  • 可使用认可编程语言编写模块

  • YAML格式编排任务,支持丰富的数据结构

  • 叫强大的多层解决方案

2、ansible架构

【基础】Ansible 自动化运维工具简单入门

3、工作原理

【基础】Ansible 自动化运维工具简单入门

4、主要组成部分

1)命令执行来源:

  • ANSIBLE PLAYBOOKS :任务剧本,编排定义ansible任务急的配置文件,有Ansible顺序执行,通常为json格式的YAML文件

  • INBENTORY:Ansible管理主机的清单/etc/anaible/hosts

  • MODULES:Ansible的执行命令的功能模块,多数为内置核心模块,也可以自定义

  • PLUGINS:模块功能补充,比如链接类型插件、循环插件、变量插件、过滤插件等,不常用

  • API:供第三方程序调用的应用程序编程接口

  • ANSIBLE:组合INVENTORY API MODUES PLUGINS的绿框,可以理解为Ansible的命令工具,其为核心执行工具

2)利用ansible实现管理的方式

  • Ad-Hoc即ansible命令,主要用于临时命令场景

  • ansible-playbook主要用户长期规划好的,大型项目的场景,需要提前规划

3)Ansile-playbook执行过程

  • 将已有编排好的任务急写入Ansible-playbook

  • 通过ansible-playbook命令分拆任务急至逐条ansible命令,按照预定规则执行

4)Ansible主要操作对象

  • hosts主机

  • networking网络设备

5)注意事项

  • 执行ansile的主机一般称为主控端,中控,master或堡垒机

  • 主控端python版本需要2.6以上

  • 被控端python版本需要2.4以上,小于2。4需要安装python-simplejson

  • 被控端如开启selinux需要安装libselinux-python

  • windows端不能作为主控端

二、部署及配置Ansible

部署环境介绍:

主机名 IP 角色 系统
ansible 172.16.111.6 主控端 CentOS 7.5
node1 172.16.111.7 被控端 CentOS 7.5
node2 172.16.111.8 被控端 CentOS 7.5
node3 172.16.111.9 被控端 CentOS 7.5

安装方式很多,本次只演示一种安装yum安装

1、在Ansible主机部署ansble

[root@ansible ~]# yum install ansible -y[root@ansible ~]# rpm -qa ansibleansible-2.4.2.0-2.el7.noarch
[root@ansible ~]# ansible --versionansible 2.4.2.0
 config file = /etc/ansible/ansible.cfg
 configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
 ansible python module location = /usr/lib/python2.7/site-packages/ansible
 executable location = /bin/ansible
 python version = 2.7.5 (default, Jul 13 2018, 13:06:57) [GCC 4.8.5 20150623 (Red Hat 4.8.5-28)]

2、Ansible功能

配置文件或指令

  • /etc/ansible/ansible.cfg 主配置文件,配置ansible工作特性

  • /etc/ansible/hosts 主机清单

  • /etc/ansible/roles/ 存放角色的目录

  • /usr/bin/ansible 主程序,临时命令执行工具

  • /usr/bin/ansible-doc 查看配置文档,模块功能查看工具

  • /usr/bin/ansible-galaxy 下载/上传优秀代码或Roles模块的官网平台

  • /usr/bin/ansible-playbook 定制自动化任务,编排剧本工具

  • /usr/bin/ansible-pull 远程执行命令的工具

  • /usr/bin/ansible-vault 文件加密工具

  • /usr/bin/ansible-console 基于Console界面与用户交互的执行工具

3、编辑hosts连接被控端 hosts

配置被控端的主机清单

[root@ansible ~]# vim /etc/ansible/hosts

插入下面三行,保存退出

172.16.111.7172.16.111.8172.16.111.9

执行命令尝试连接被控端

【基础】Ansible 自动化运维工具简单入门

发现此时是使用SSH命令来连接而不是简单的ping,此时无法接通。需要认证用户密码或者key

[root@ansible ~]# ansible 172.16.111.7 -m ping -kSSH password: 172.16.111.7 | SUCCESS => {    "changed": false,
   "ping": "pong"

-k 用户名 通过用户名密码来连接被控端 默认是root

-m 功能

解决ssh连接慢的问题 修改/etc/ssh/sshd_config文件内的UseDNS no 和 GSSAPIAuthentication no

测试连接多个被控端

【基础】Ansible 自动化运维工具简单入门

此时出现问题 我们写入的顺序是7 8 9 (all代表host内所有主机) 但是读取的顺序是 9 8 7 而且只出现一次输入root密码(只),别的都没提示,所以-k连接只适合连接单个被控端。

查看可知,该命令只会记住一个host的口令,需要手动ssh连接一次才可以。所以推荐基于key验证实现(后面有介绍)

[root@ansible ~]# cat .ssh/known_hosts 172.16.111.7 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBPkK1F+Hc+cQLSP7usLqHbu/hHAUvGc2lUvtHiwKXHLDZZDDR2a5oeVz2xIjkdpl9NTN/dQS0FwqGq8/1BHo23c=

也可以对hosts进行分组

 
   

【基础】Ansible 自动化运维工具简单入门

【基础】Ansible 自动化运维工具简单入门

连接完成

4、查看主配置文件ansible.cfg

 
   

【基础】Ansible 自动化运维工具简单入门

修改后保存退出,运行验证

【基础】Ansible 自动化运维工具简单入门




年度热文

















系统集成/认证培训

买设备,找我们

IT维保,找我们

IT培训,找我们