前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >自动化运维之Ansible服务部署详述

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

作者头像
星哥玩云
发布2022-07-25 12:21:08
1.1K0
发布2022-07-25 12:21:08
举报
文章被收录于专栏:开源部署

一、概述分析

由于互联网的快速发展导致产品更新换代速度逐渐加快,运维人员每天都要进行大量的维护操作,仍旧按照传统方式进行维护会使得工作效率低下。这时,部署自动化运维就可以尽可能安全、高效地完成这些工作。 一般会把自动化运维工具划分为两类:一类是需要使用代理工具的,也就是基于专用的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协议进行远程命令执行或下发配置,无需部署任何客户端代理软件,从而使得自动化环境部署变得更加简单。可同时支持多台主机并行管理,使得管理主机更加便捷。

代码语言:javascript
复制
    官方的title是“Ansible is Simple IT Automation”——简单的自动化IT工具。
Ansible通过SSH协议实现远程节点和管理节点之间的通信。理论上说,只要管理员通过ssh登录到一台远程主机上能做的操作,Ansible都可以做到。

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

自动化运维之Ansible服务部署详述
自动化运维之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

三台主机关闭防火墙:

代码语言:javascript
复制
[root@localhost ~]# systemctl stop firewalld.service
[root@localhost ~]# setenforce 0

安装步骤:

控制主机安装ansible并生成密钥对批量发送给被管理主机
1.yum安装环境包与ansible:
代码语言:javascript
复制
yum install epel-release -y
yum install ansible –y
2.查看ansible版本
代码语言:javascript
复制
[root@01 ~]# ansible  --version
自动化运维之Ansible服务部署详述
自动化运维之Ansible服务部署详述
3.yum安装完成后会生成3个文件
代码语言:javascript
复制
[root@01 ~]# cd /etc/ansible/
[root@01 ansible]# ls
自动化运维之Ansible服务部署详述
自动化运维之Ansible服务部署详述
4.配置被管理端主机IP清单
代码语言:javascript
复制
[root@01 ansible]# vim /etc/ansible/hosts                     //配置主机清单
自动化运维之Ansible服务部署详述
自动化运维之Ansible服务部署详述
5.虽然ansible的配置文件已经设置完成被管理端的IP地址,但是因为ansible是基于ssh协议,所以还需要配置密钥对验证
代码语言:javascript
复制
[root@01 ~]# ssh-keygen -t rsa           //生成密钥对
自动化运维之Ansible服务部署详述
自动化运维之Ansible服务部署详述
自动化运维之Ansible服务部署详述
自动化运维之Ansible服务部署详述
6.ssh协议免交互代理
代码语言:javascript
复制
[root@01 ~]# ssh-agent bash
[root@01 ~]# ssh-add
自动化运维之Ansible服务部署详述
自动化运维之Ansible服务部署详述

shell脚本批量发送公钥

(1).下载安装expect
代码语言:javascript
复制
[root@01 .ssh]# yum install expect -y                   //yum安装expect
(2). ping通所有可互通的主机
代码语言:javascript
复制
[root@01 .ssh]# ansible all -m ping       //使用ansible中的ping模块
自动化运维之Ansible服务部署详述
自动化运维之Ansible服务部署详述

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

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

代码语言:javascript
复制
[root@01 ~]# cd ~/.ssh/
[root@01 .ssh]# ls
id_rsa  id_rsa.pub  known_hosts
[root@01 .ssh]# vim known_hosts                   //查看下已经记录在SSH协议的主机,不做任何修改操作
自动化运维之Ansible服务部署详述
自动化运维之Ansible服务部署详述
(2).编写shell脚本实现批量推送公钥
代码语言:javascript
复制
[root@01 .ssh]# vim ~/.ssh/pushssh.sh 
脚本如下:
代码语言:javascript
复制
#!/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服务部署详述
自动化运维之Ansible服务部署详述

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

代码语言:javascript
复制
[root@01 ~]# ansible all -m command -a 'date'
自动化运维之Ansible服务部署详述
自动化运维之Ansible服务部署详述
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、概述分析
    • Ansible通过SSH协议实现远程节点和管理节点之间的通信。理论上说,只要管理员通过ssh登录到一台远程主机上能做的操作,Ansible都可以做到。
    • 二、Ansible安装
      • 实验安装环境:
        • 安装步骤:
          • 控制主机安装ansible并生成密钥对批量发送给被管理主机
          • 1.yum安装环境包与ansible:
          • 2.查看ansible版本
          • 3.yum安装完成后会生成3个文件
          • 4.配置被管理端主机IP清单
          • 5.虽然ansible的配置文件已经设置完成被管理端的IP地址,但是因为ansible是基于ssh协议,所以还需要配置密钥对验证
          • 6.ssh协议免交互代理
          • (1).下载安装expect
          • (2). ping通所有可互通的主机
        • 在最新版本ansible 2.7.0中,在没有推送公钥形成密钥对的情况下,无法使用ping模块ping通的情况下,很难用authorized_key模块去推送公钥的。所以我更改了下shell脚本,这样就可以在无法用ping模块ping通的情况下直接实现批量推送公钥形成密钥对。
          • (2).编写shell脚本实现批量推送公钥
          • 脚本如下:
          • PS:想要执行这个脚本,首先需要下载安装expect,同时被管理端主机的密码需要是一致的。
      • ----------------------验证-------------------
        • 查看下脚本是否执行成功:
        • 此时就可以进行ansible批量部署操作
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档