自动化运维之Ansible概述及Ansible部署|(持续更新中)

Ansible概述

由于互联网的快速发展导致产品更新换代速度逐渐加快,运维人员每天都要进行大量的维护操作,仍旧按照传统方式进行维护使得工作效率低下。这时,部署自动化运维就可以尽可能安全,高效地完成这些工作。
一般会把自动化运维工具划分为两类:一类是需要使用代理工具的,也就是基于专用的Agent程序来完成管理功能,如:Puppet、Func、Zabbix等;另外一类是不需要配置代理工具的,可以直接基于SSH服务来完成管理功能,如:Ansible、Fabric等。

1.Puppet

Puppet基于Ruby开发,支持Linux、UNIX、Windows平台,可以针对用户、系统服务、配置文件、软件包、软件包等进行管理,有很强的扩展性,但远程执行命令相对较弱。

2.SaltStack

SaltStack基于Python开发,允许管理员对多个操作系统创建统一的管理系统,比Puppet更轻量级。

3.Ansible

Ansible基于Python开发,集合了众多优秀运维工具的优点,实现了批量运行命令、部署程序、配置系统等功能。默认通过SSH协议进行远程命令执行或下发配置,无需部署任何客户端代理软件,从而使得自动化环境部署变得更加简单。可同时支持多台主机并行管理,使得管理主机更加便捷。

工具 开发语言 结构 配置文件 运行任务
Ansible Python YAML 执行命令行
SaltStack Python C/S YAML 支持命令行
Puppet Ruby C/S Ruby语法格式 通过模块实现

Ansible核心组件

Ansible可以看作是一种基于模块进行工作的框架结构,批量部署能力就是由Ansible所运行的模块实现的。简而言之Ansible是基于“模块”完成各种“任务”的。其基本框架结构如图所示:

可以看出Ansible基本架构由六个部分构成:

  • Ansible core核心引擎
  • Host inventory主机清单:用来定义Ansible所管理的主机,默认是在Ansible的hosts配置文件中定义被管理主机,同时也支持自定义动态主机清单和指定其他配置文件的位置
  • Connection plugins连接插件:负责和被管理主机实现通信。除支持使用SSH连接被管理主机外,Ansible还支持其他的连接方式,所以需要有连接插件将各个主机用连接插件连接到Ansible
  • Playbooks(yam1,yam2)剧本:用来集中定义Ansible任务的配置文件,即将多个任务定义在一个剧本中由Ansible自动执行,可以由控制主机针对多台被管理主机同时运行多个任务
  • Core modules核心模块:是Ansible自带的模块,使用这些模块将资源分发到被管理主机,使其执行特定任务或匹配特定的状态
  • Custom modules自定义模块:用于完成模块功能的补充,可借助相关插件完成记录日志、发送邮件等功能

安装部署Ansible服务

Ansible自动化运维环境由控制主机与被管理主机组成,由于Ansible是基于SSH协议进行通信的,所以控制主机安装Ansible软件后不需要重启或运行任何程序,被管理主机也不需要安装和运行任何代理程序。

角色 主机名 IP地址
控制主机 node1 192.168.88.11
被管理主机 websrvs node2 192.168.88.10
被管理主机 dbsrvs node3 192.168.88.12

1.安装Ansible

[[email protected] ~]# yum install epel-release -y     //安装epel源
[[email protected] ~]# yum install ansible -y          //安装Ansible
[[email protected] ~]# ansible --version               //查看版本信息
ansible 2.6.2
  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 = /usr/bin/ansible
  python version = 2.7.5 (default, Aug  4 2017, 00:39:18) [GCC 4.8.5 20150623 (Red Hat 4.8.5-16)]
[[email protected] ansible]# cd /etc/ansible/
[[email protected] ansible]# ll
总用量 24
-rw-r--r--. 1 root root 19549 7月  29 04:07 ansible.cfg     //配置文件
-rw-r--r--. 1 root root  1016 7月  29 04:07 hosts           //管控主机文件
drwxr-xr-x. 2 root root     6 7月  29 04:07 roles

附:配置文件ansible.cfg解析:

hostfile    = /etc/ansible/hosts   //hosts文件的位置
 library      = /usr/share/ansible //ansible默认搜寻模块的位置
 pattern     = *  //如果没有提供hosts节点,这是playbook要通信的默认主机组.默认值是对所有主机通信
 remote_tmp  = $HOME/.ansible/tmp   //Ansible通过远程传输模块到远程主机,然后远程执行,执行后在清理现场.在有些场景下,你也许想使用默认路径希望像更换补丁一样使用
 forks   = 5    //在与主机通信时的默认并行进程数 ,默认是5d
 poll_interval  = 15  //当具体的poll interval 没有定义时,多少时间回查一下这些任务的状态, 默认值是5秒
 sudo_user  = root   //sudo使用的默认用户 ,默认是root
 #ask_sudo_pass = True   //用来控制Ansible playbook 在执行sudo之前是否询问sudo密码.默认为no
 #ask_pass    = True    //控制Ansible playbook 是否会自动默认弹出密码
 transport   = smart   //通信机制.默认 值为’smart’。如果本地系统支持 ControlPersist技术的话,将会使用(基于OpenSSH)‘ssh’,如果不支持将使用‘paramiko’.其他传输选项‘local’,‘chroot’,’jail’等等
 #remote_port  = 22    //远程SSH端口。 默认是22
 module_lang   = C   //模块和系统之间通信的计算机语言,默认是C语言
 #host_key_checking = False    //检查主机密钥
 timeout = 10    //SSH超时时间
 #log_path = /var/log/ansible.log     //日志文件存放路径
 #module_name = command     //ansible命令执行默认的模块
 #private_key_file = /path/to/file     //私钥文件存储位置

主机列表文件Hosts可使用的指令

ansible_ssh_host     //指定主机别名对应的真实 IP
ansible_ssh_port      //指定连接到这个主机的 ssh 端口,默认 22
ansible_ssh_user     //指定连接到该主机上的用户
ansible_sudo_pass      //sudo 密码
ansible_sudo_exe       //sudo 命令路径
ansible_connection   //连接类型,可以是 local、ssh 或paramiko,ansible1.2 之前默认为 paramiko
ansible_ssh_private_key_file      //私钥文件路径
ansible_shell_type       // 目标系统的 shell 类型,默认为sh

2.配置主机清单

Ansible通过读取默认主机清单/etc/ansible/hosts文件,修改主机与组配置后,可同时连接到多个被管理主机上执行任务。比如定义一个websrvs组,包含两台主机的IP地址,再定义一个dbsrvs组,包含一个主机的IP地址,内容如下:

[[email protected] ansible]# vi hosts
...
[webserver]
192.168.88.10
[mysql]
192.168.88.12

3.设置SSH无密码登录

[[email protected] ansible]# ssh-keygen -t rsa         //基于SSH秘钥的连接
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):    //直接Enter使用默认路径
Created directory ‘/root/.ssh‘.
Enter passphrase (empty for no passphrase):         //直接Enter不加密
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:NGsx7HoUljEOpgUU6Fp1vay+aDkgHO2AHhtedcrXoD8 [email protected]
The key‘s randomart image is:
+---[RSA 2048]----+
|   o+o+.o        |
|  . .=.*.+       |
|....+.+.&.       |
|.=oo + =oB       |
|+oO   o.S        |
|o=..  .E         |
| . . o. o        |
|    +...         |
|   .....         |
+----[SHA256]-----+

[[email protected] ansible]# ssh-copy-id [email protected]
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
The authenticity of host ‘192.168.88.10 (192.168.88.10)‘ can‘t be established.
ECDSA key fingerprint is SHA256:LVQy8BE9xArhgdx5buiZoCIhYKAzoTkl7SPX6geEFdk.
ECDSA key fingerprint is MD5:af:47:6d:64:8f:0f:e6:25:7f:7b:d1:10:a5:31:83:29.
Are you sure you want to continue connecting (yes/no)? y
Please type ‘yes‘ or ‘no‘: yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
[email protected]‘s password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh ‘[email protected]‘"
and check to make sure that only the key(s) you wanted were added.

[[email protected] ansible]# ssh-copy-id [email protected]
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
The authenticity of host ‘192.168.88.12 (192.168.88.12)‘ can‘t be established.
ECDSA key fingerprint is SHA256:/E8PrN6v7MJRRcWbmU0mXwELY+yABUuNTyDiTl7O2lU.
ECDSA key fingerprint is MD5:1e:f1:8e:93:d6:65:1d:fd:1d:ff:71:15:a4:6c:2f:4e.
Are you sure you want to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
[email protected]‘s password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh ‘[email protected]‘"
and check to make sure that only the key(s) you wanted were added.

至此一个简单的Ansible环境就部署成功了!

原文地址:http://blog.51cto.com/13625810/2153414

时间: 2024-11-05 11:31:06

自动化运维之Ansible概述及Ansible部署|(持续更新中)的相关文章

5、python自动化运维——集中化管理平台Ansible

集中化管理平台Ansible 简介:Ansible是一种集成IT系统的配置管理.应用部署.执行特定任务的开源平台特点:1.部署简单,只需在主控端部署Ansible环境,被控端不用进行任何操作2.默认使用SSH协议对设备进行管理3.主从集中化管理4.提供一个Web管理界面和RESET API接口--AWX平台 Ansible安装及配置 1.安装ansible:yum install –y ansible 2.修改配置文件:/etc/ansible/hosts,添加主机IP. 193.192.168

RedHat / Centos   Linux 系统运维与管理实践技巧荟萃,持续更新

RedHat / Centos   Linux  系统运维与管理实践技巧荟萃

CheungSSH自动化运维工具Web版本比Ansible Saltstack更好用强大

简介: 姓名:张其川 软件名称:CheungSSH 优点:简单实用,功能强大

python自动化运维——OMserver平台Web服务端部署过程

1.下载源代码(简单不讲述) 2.安装pcre,pcre是一个轻量级的正则表达式函数库,nginx的HTTP Rewrite模块会用到. wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.34.tar.gz tar -zxvf pcre-8.34.tar.gz cd pcre-8.34 ./configure make && make install 3.安装nginx. wget http://nginx.

自动化运维——CentOS7下利用Cobbler批量部署CentOS

Cobbler是一个使用Python开发的开源项目,通过将部署系统所涉及的所有服务集中在一起,来提供一个全自动批量快速建立Linux系统的网络安装环境,Cobbler最初支持Fedora.RedHat和衍生版(如CentOS和Scientific Linux),现在还支持Debian.Ubuntu.SuSE以及FreeBSD.ESXI等.Cobbler是一款快速的网络系统部署工具,其最大的特点是集合了所有系统部署所需服务,如DHCP.DNS.TFTP,这样你在部署一台操作系统的时候不需要在各个服

运维常见问题及解决方法汇总(持续更新...)

1.yum安装软件提示:another app is currently holding the yum.lock;waiting for it to exit. 原因:可能是系统自动升级正在运行,yum在锁定状态中. 解决方法:通过强制关掉yum进程:#rm -f /var/run/yum.pid然后就可以使用yum了. 2../configure时老是报!!!! OpenSSL is not properly installed on your system. 解决: yum install

自动化运维工具之ansible基础入门

自动化运维工具常用的有 ansible  saltstack  puppet等 ,前两者都是基于python开发,puppet基于ruby开发,今天我们简单介绍下ansible基础 一.基础知识: 1. 简介 ansible基于python开发,集合了众多运维工具的优点,实现了批量系统配置.批量程序部署.批量运行命令等功能.ansible是基于模块工作的 (1) host inventory: 指定操作的主机,是一个配置文件里面定义监控的主机        (2) 各种模块核心模块.comman

应用软件学习总结(包括监控,自动化运维工具,WEB服务等)

应用软件学习总结 目录 SVN部署及使用 一健安装Zabbix Ansible自动化运维工具安装及使用 PPTP服务器端部署到客户端连接使用 fail2ban安装配置 kvm安装使用 LVS+Keepalived搭建 Keepalived+LVS维护技巧与调优 LVS概念类型及三种工作模式和十种调度算法介绍 redis单实例.多实例.主从同步实战 整合Nginx和Tomcat Nginx服务器的搭建 安装LAMP 一健安装LNMP 生产环境Nginx配置文件 Apache安装配置解析 Rsync

基于 ANSIBLE 自动化运维实践

摘要:运维这个话题很痛苦,你做任何的产品都离不开运维.不管你用什么语言.什么平台.什么技术,真正能够决定你产品成熟度的很有可能就是你运维的能力.取自 云巴 CEO 张虎在 ECUG 大会上的分享. 云时代的运维 以前的运维那么痛苦,大家却并未做多大的努力去改变这个现状,为什么?因为原来你要自己去建机房.自己去采购.去调研机房.采购服务器.采购带宽,中间出了任何问题很大可能都是机房的问题. 在云时代,尤其是在AWS出现之后,很多美国团队的运维方式发生了极大的变化. 为什么云时代的运维跟原来的运维不