专业的编程技术博客社区

网站首页 > 博客文章 正文

网络运维 | 自动化运维之Ansible服务部署

baijin 2024-10-10 04:23:18 博客文章 6 ℃ 0 评论

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

01 自动化运维工具

1、Pup

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

2、SaltStack

CallStack基于Python开发,允许管理员对多个操作系统创建统一的管理系统。

3、Ansible

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


02 Ansible is simple IT automation

Ansible于其他IT自动化运维技术的区别在于其关注点并非配置管理、应用部署或IT流程工作流,而是提供一个统一的界面来协调所有IT自动化功能,因此Ansible的系统更加易用,部署更加方便。

Ansible可以让用户避免编写脚本或代码来管理应用,同时还能搭建工作流实现IT任务的自动化执行。IT自动化可以降低技术门槛以及对传统IT的依赖,从而加快项目的交付速度。

1、Ansible基本架构由以下六个核心:

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



2、Ansible功能特性:

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


03 Ansible安装

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

测试安装环境:



关闭三台主机防火墙:

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

[root@localhost ~]# setenforce 0

一、安装

1、yum安装环境包与Ansible

yum install epel-release -y

yum install ansible -y

2、查看Ansible版本

[root@01~]# ansible -version



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

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

[root@01 ansible]# ls



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

[root@01 ansible]# vim /etc/ansible/host



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

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




6、SSH协议免交互代理

[root@01 ~]# ssh-agent bash

[root@01 ~]# ssh-add


二、shell脚本批量发送公钥

1、下载安装expect

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

2、ping通所由可互通的主机

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


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

在版本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协议中的主机,不做任何修改


三、编写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 //执行脚本

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

四、查看脚本是否执行成功




此时就可以进行Ansible批量部署操作了。

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





| 大 道 | . | 源 于 坚 守 | \我们不生产技术,是熟练的搬运工/


Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表