阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

自动化运维之Ansible服务部署详述

178次阅读
没有评论

共计 3338 个字符,预计需要花费 9 分钟才能阅读完成。

一、概述分析

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

下面介绍几款功能类似的自动化运维工具:

1. Puppet

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

2. SaltStack

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

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

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

    官方的 title 是“Ansible is Simple IT Automation”——简单的自动化 IT 工具。

Ansible 通过 SSH 协议实现远程节点和管理节点之间的通信。理论上说,只要管理员通过 ssh 登录到一台远程主机上能做的操作,Ansible 都可以做到。

Ansible 跟其他 IT 自动化技术的区别在于其关注点并非配置管理、应用部署或 IT 流程工作流,而是提供一个统一的界面来协调所有的 IT 自动化功能,因此 Ansible 的系统更加易用,部署更快。
Ansible 可以让用户避免编写脚本或代码来管理应用,同时还能搭建工作流实现 IT 任务的自动化执行。IT 自动化可以降低技术门槛及对传统 IT 的依赖,从而加快项目的交付速度。

自动化运维之 Ansible 服务部署详述

Ansible 基本架构由六个部分组成:

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

ansible 功能特性

  • 应用代码自动化部署
  • 系统管理配置自动化
  • 支持持续交付自动化
  • 支持云计算,大数据平台环境
  • 轻量级,无序在客户端安装 agent,更新时只需在控制机上进行更行即可
  • 批量任务执行可以写成脚本,不用分发到远程就可以执行
  • 支持非 root 用户管理操作,支持 sudo
  • 使用 python 编写,维护更简单

二、Ansible 安装

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

实验安装环境:

角色 主机名 IP 地址 组名
控制主机 01 192.168.100.129  
被管理主机 02 192.168.100.128 webserver
被管理主机 03 192.168.100.130 mysql

三台主机关闭防火墙:

[root@localhost ~]# systemctl stop firewalld.service
[root@localhost ~]# setenforce 0

安装步骤:

控制主机安装 ansible 并生成密钥对批量发送给被管理主机

1.yum 安装环境包与 ansible:

yum install epel-release -y
yum install ansible –y

2. 查看 ansible 版本

[root@01 ~]# ansible  --version

自动化运维之 Ansible 服务部署详述

3.yum 安装完成后会生成 3 个文件

[root@01 ~]# cd /etc/ansible/
[root@01 ansible]# ls

自动化运维之 Ansible 服务部署详述

4. 配置被管理端主机 IP 清单

[root@01 ansible]# vim /etc/ansible/hosts                     // 配置主机清单

自动化运维之 Ansible 服务部署详述

5. 虽然 ansible 的配置文件已经设置完成被管理端的 IP 地址,但是因为 ansible 是基于 ssh 协议,所以还需要配置密钥对验证

[root@01 ~]# ssh-keygen -t rsa           // 生成密钥对

自动化运维之 Ansible 服务部署详述
自动化运维之 Ansible 服务部署详述

6.ssh 协议免交互代理

[root@01 ~]# ssh-agent bash
[root@01 ~]# ssh-add

自动化运维之 Ansible 服务部署详述

shell 脚本批量发送公钥

(1). 下载安装 expect

[root@01 .ssh]# yum install expect -y                   //yum 安装 expect

(2). ping 通所有可互通的主机

[root@01 .ssh]# ansible all -m ping       // 使用 ansible 中的 ping 模块

自动化运维之 Ansible 服务部署详述

ansible 是基于 SSH 协议,所以可以 ping 通的主机储存在.ssh/known_hosts 的文件当中。当然就算不 ping 通也可以用 shell 脚本实现批量推送公钥。

在最新版本 ansible 2.7.0 中,在没有推送公钥形成密钥对的情况下,无法使用 ping 模块 ping 通的情况下,很难用 authorized_key 模块去推送公钥的。所以我更改了下 shell 脚本,这样就可以在无法用 ping 模块 ping 通的情况下直接实现批量推送公钥形成密钥对。

[root@01 ~]# cd ~/.ssh/
[root@01 .ssh]# ls
id_rsa  id_rsa.pub  known_hosts
[root@01 .ssh]# vim known_hosts                   // 查看下已经记录在 SSH 协议的主机,不做任何修改操作

自动化运维之 Ansible 服务部署详述

(2). 编写 shell 脚本实现批量推送公钥

[root@01 .ssh]# vim ~/.ssh/pushssh.sh 

脚本如下:

#!/bin/sh
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
host1=`cat /etc/ansible/hosts | awk -F ""'{print $1}'| grep'^192'`
#在生产情况中,有很多种获得 IP 的方法,本脚本最重要的就是获得 IP 地址,脚本只是提供一个思路。for i in $host1;

do

command1="scp ~/.ssh/authorized_keys root@$i:~/.ssh/authorized_keys"

password="123123" 

/usr/bin/expect -c "
        spawn ssh-copy-id root@$i 
        expect {\"*password\" { send \"$password\r\"; exp_continue}
        }     
expect eof"

done

#编写脚本完成后保存退出

[root@01 .ssh]# sh pushssh.sh        // 执行脚本

PS: 想要执行这个脚本,首先需要下载安装 expect,同时被管理端主机的密码需要是一致的。

———————- 验证 ——————-

查看下脚本是否执行成功:

自动化运维之 Ansible 服务部署详述
自动化运维之 Ansible 服务部署详述

此时就可以进行 ansible 批量部署操作

[root@01 ~]# ansible all -m command -a 'date'

自动化运维之 Ansible 服务部署详述

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计3338字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中