简介

| 是什么?

是新出现的自动化运维工具,基于开发,集合了众多运维工具(、chef、func、)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能

| 特点

部署简单,只需在主控端部署环境,被控端无需做任何操作;

默认使用SSH协议对设备进行管理;

有大量常规运维操作模块,可实现日常绝大部分操作;

配置简单、功能强大、扩展性强;

支持API及自定义模块,可通过轻松扩展;

通过来定制强大的配置、状态管理;

轻量级,无需在客户端安装agent,更新时,只需在操作机上进行一次更新即可;

提供一个功能强大、操作性强的Web管理界面和REST API接口——AWX平台;

| 架构图

运维自动化部署_ansible运维管理平台_ansible自动化运维

上图中我们看到的主要模块如下:

任务执行

| 任务执行模式

系统由控制主机对被管节点的操作方式可分为两类,即adhoc和:

| 执行流程

ansible自动化运维_ansible运维管理平台_运维自动化部署

简单理解就是在运行时, 首先读取 .cfg 中的配置, 根据规则获取 中的管理主机列表, 并行的在这些主机中执行配置的任务, 最后等待执行返回的结果

| 命令执行过程

加载自己的配置文件,默认路径为/etc//.cfg;

查找对应的主机配置文件,找到要执行的主机或者组;

加载自己对应的模块文件,如 ;

通过将模块或命令生成对应的临时py文件(脚本), 并将该文件传输至远程服务器;

对应执行用户的家目录的./tmp/XXX/XXX.py文件;

给文件 +x 执行权限;

执行并返回结果;

删除临时py文件,sleep 0退出;

服务部署

| 关闭服务器防火墙

运维自动化部署_ansible自动化运维_ansible运维管理平台


# 关闭firewalld防火墙

systemctl stop firewalld

systemctl disable firewalld

# 关闭SELinux

setenforce 0

sed -ri s'#(SELINUX=)enforcing#1disabled#'

| 安装

安装常用两种方式,yum安装 和 pip程序安装,下面我们来详细介绍一下这两种安装方式

使用 pip(的包管理模块)安装

首先,我们需要安装一个-pip包,安装完成以后,则直接使用pip命令来安装我们的包,具体操作过程如下:

ansible运维管理平台_运维自动化部署_ansible自动化运维


yum install python-pip

pip install ansible

使用 yum 安装

yum 安装是我们很熟悉的安装方式了

我们需要先配置epel源,然后再安装我们的 即可

ansible运维管理平台_运维自动化部署_ansible自动化运维


yum install epel-release -y

yum install ansible –y

| 程序结构

安装目录如下(yum安装):

| 常用选项介绍

运维自动化部署_ansible自动化运维_ansible运维管理平台

| 主配置文件

的配置文件可以存放在任何位置,但配置文件有读取顺序,先对配置做一个基本了解

的配置文件有查找顺序:

最先查找$变量对应的位置和文件

其次查找当前目录下.cfg

然后查找用户家目录下的..cfg

最后查找/etc//.cfg(默认)

.cfg 配置文件介绍

运维自动化部署_ansible运维管理平台_ansible自动化运维

主机清单

在配置文件中,我们提到了资源清单,这个清单就是我们的主机清单,里面保存的是一些 需要连接管理的主机列表

| 基于密码连接

ansible运维管理平台_运维自动化部署_ansible自动化运维


# 方式一、主机+端口+用户名+密码 ※※※※※

[web]

10.0.0.101 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass='123456'

10.0.0.102 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass='123456'


# 方式二、域名+密码

[web]

web[01:04].oldboy.com ansible_ssh_pass='123456'


# 方式三、主机组设置共用变量variables

[web]

web[1:2].oldboy.com


[web:vars] #给 webservers 主机组设置共用变量variables

ansible_ssh_pass='123456'

| 基于密钥连接

创建和发放密钥

ansible运维管理平台_运维自动化部署_ansible自动化运维


yum -y install openssh-clientsansible


# 生成私钥

ssh-keygen


# 向其它主机分发私钥

ssh-copy-id root@10.0.0.101

ssh-copy-id root@10.0.0.102

设置主机清单

ansible运维管理平台_运维自动化部署_ansible自动化运维


[web]

10.0.0.101

10.0.0.102

| 主机组使用方式

主机清单中

ansible运维管理平台_运维自动化部署_ansible自动化运维


# 定义lbservers组

[lb]

10.0.0.5

10.0.0.6


# 定义webserver组

[web]

10.0.0.7

10.0.0.8


# 定义servers组包括两个子组 [lbservers,webserver]

[servers:children]

lb

web

常用模块

| 什么是ad-hoc

ad-hoc简而言之就是“临时命令”,执行完即结束,并不会保存

| ad-hoc模式的使用场景

临时获取主机的数据、状态

比如在多台机器上查看某个进程是否启动,或拷贝指定文件到本地,等等

| ad-hoc模式的命令使用

ansible运维管理平台_运维自动化部署_ansible自动化运维


ansible 'oldboy' -m command -a 'df -h'

含义如下图

ansible自动化运维_ansible运维管理平台_运维自动化部署

| 使用ad-hoc执行一次远程命令

ansible运维管理平台_运维自动化部署_ansible自动化运维


ansible all -m ping

常用模块

运维自动化部署_ansible自动化运维_ansible运维管理平台

使用过程中需要先了解-doc帮助手册

ansible运维管理平台_运维自动化部署_ansible自动化运维


ansible-doc -l # 查看所有模块说明

ansible-doc copy # 表示指定模块方法

ansible-doc -s copy # 表示指定模块参数

| 主机连通性测试

ping模块可以用于主机连通性测试

-doc帮助手册

ansible运维管理平台_运维自动化部署_ansible自动化运维


ansible web -m ping

ansible运维管理平台_运维自动化部署_ansible自动化运维

这样就说明我们的主机是连通状态的。接下来的操作才可以正常进行

| 模块

这个模块可以直接在远程主机上执行命令,并将结果返回本主机

举例如下:

ansible运维管理平台_运维自动化部署_ansible自动化运维


ansible all -m command -a 'netstat -ntl'

命令模块接受命令名称,后面是空格分隔的列表参数。给定的命令将在所有选定的节点上执行

它不会通过shell进行处理,比如$HOME和操作如"","|",";","&" 工作(需要使用(shell)模块实现这些功能)

注意,该命令不支持 | 管道命令

下面来看一看该模块下常用的几个命令:

ansible运维管理平台_ansible自动化运维_运维自动化部署

下面我们来看看这些命令的执行效果:

ansible运维管理平台_运维自动化部署_ansible自动化运维


# 先切换到/data/ 目录,再执行“ls”命令

ansible all -m command -a 'chdir=/oldboyedu/ ls'


# 如果/data/aaa.jpg存在,则不执行“ls”命令

ansible all -m command -a 'creates=/oldboyedu/aaa.jpg ls'


# 如果/data/aaa.jpg存在,则执行“cat /data/a”命令

ansible all -m command -a 'removes=/oldboyedu/aaa.jpg cat /oldboyedu/a'

ansible自动化运维_ansible运维管理平台_运维自动化部署

| shell 模块

shell模块可以在远程主机上调用shell解释器运行命令,支持shell的各种功能,例如管道等

只要是我们的shell命令,都可以通过这个模块在远程主机上运行

ansible运维管理平台_运维自动化部署_ansible自动化运维


ansible all -m shell -a 'cat /etc/passwd |grep "oldboy"'

| 模块

把对应脚本传输过去,然后运行对应的脚本

ansible运维管理平台_运维自动化部署_ansible自动化运维


# 编写脚本

mkdir -p /server/scripts


cat >/server/scripts/test.sh<<EOF

#!/usr/bin/bash

echo "Hello,Word!!!"

EOF


# 在本地运行模块,等同于在远程执行,不需要将脚本文件进行推送目标主机执行

ansible all -m script -a "/server/scripts/test.sh"

| yum 模块

该模块主要用于软件的安装

其选项如下:

ansible运维管理平台_运维自动化部署_ansible自动化运维

下面我们就来安装一个包试试看

ansible运维管理平台_运维自动化部署_ansible自动化运维


ansible all -m yum -a 'name=sl state=installed'

| 模块

该模块主要用于yum源的配置

其选项如下:

下面我们就来配置一个yum源

ansible运维管理平台_运维自动化部署_ansible自动化运维


ansible all -m yum_repository -a 'name=php description="php repo" baseurl="http://us-east.repo.webtatic.com/yum/el7/x86_64/" enabled=no state=present‘

| file 模块

该模块主要用于设置文件的属性,比如创建文件、创建链接文件、删除文件等

下面是一些常见的命令:

ansible运维管理平台_运维自动化部署_ansible自动化运维

常见的 state 状态

ansible运维管理平台_ansible自动化运维_运维自动化部署

创建目录:

ansible运维管理平台_运维自动化部署_ansible自动化运维


ansible all -m file -a 'path=/oldboyedu/app state=directory'

ansible all -m shell -a 'ls -l /oldboyedu'

修改文件权限

ansible运维管理平台_运维自动化部署_ansible自动化运维


ansible all -m file -a 'path=/oldboyedu/app/ state=directory owner=nobody mode=600 recurse=yes'

ansible all -m shell -a 'ls -l /oldboyedu'

ansible自动化运维_ansible运维管理平台_运维自动化部署

删除文件

ansible运维管理平台_运维自动化部署_ansible自动化运维


ansible web -m file -a 'path=/oldboyedu/app state=absent'

ansible all -m shell -a 'ls -l /oldboyedu'

| copy 模块

这个模块用于将文件复制到远程主机,同时支持给定内容生成文件和修改权限等

其相关选项如下:

ansible自动化运维_ansible运维管理平台_运维自动化部署

拷贝文件文件至被控节点:

ansible运维管理平台_运维自动化部署_ansible自动化运维


ansible all -m copy -a "src=/etc/hosts dest=/tmp/test.txt"

对远端已有文件进行备份,按照时间信息备份:

ansible运维管理平台_运维自动化部署_ansible自动化运维


ansible all -m copy -a "src=/etc/hosts dest=/tmp/test.txt backup=yes"

内容 写入文件内容 重定向 >

ansible运维管理平台_运维自动化部署_ansible自动化运维


ansible all -m copy -a 'content="oldboy.cn" dest=/tmp/oldboy.txt'

ansible all -a 'cat /tmp/oldboy.txt'

| 模块

中的wget命令

ansible运维管理平台_运维自动化部署_ansible自动化运维


# 通过get_url下载文件或者软件

ansible web -m get_url -a 'url=https://mirrors.aliyun.com/repo/Centos-7.repo dest=/root/ '

ansible web -m shell -a "ls -l /root/C*"

| 模块

该模块用于服务程序的管理

其主要选项如下:

运维自动化部署_ansible自动化运维_ansible运维管理平台

开关服务

ansible运维管理平台_运维自动化部署_ansible自动化运维


# 开启服务

ansible all -m systemd -a 'name=crond state=stopped'


# 关闭服务

ansible all -m systemd -a 'name=crond state=started'


# 服务重启

ansible all -m systemd -a 'name=crond state=reloaded'

ansible all -m systemd -a 'name=crond state=restarted'

设置服务开机启动

ansible运维管理平台_运维自动化部署_ansible自动化运维


# 开机自启

ansible all -m systemd -a 'name=crond enabled=yes'


# 不开机自启

ansible all -m systemd -a 'name=crond enabled=no'

| user 模块

该模块主要是用来管理用户账号

其主要选项如下:

运维自动化部署_ansible运维管理平台_ansible自动化运维

添加一个用户并指定其 uid

ansible运维管理平台_运维自动化部署_ansible自动化运维


ansible web -m user -a 'name=oldboy uid=11111'

ansible web -m shell -a 'cat /etc/passwd |grep oldboy'

删除用户

ansible运维管理平台_运维自动化部署_ansible自动化运维


ansible web -m user -a 'name=oldboy state=absent'

ansible web -m shell -a 'cat /etc/passwd |grep oldboy'

| group 模块

该模块主要用于添加或删除组

常用的选项如下:

ansible运维管理平台_ansible自动化运维_运维自动化部署

创建组

ansible运维管理平台_运维自动化部署_ansible自动化运维


ansible web -m group -a 'name=oldboyedu gid=12222'

ansible web -m shell -a 'cat /etc/group | grep 12222'

删除组

ansible运维管理平台_运维自动化部署_ansible自动化运维


ansible web -m group -a 'name=oldboyedu state=absent'

ansible web -m shell -a 'cat /etc/group | grep 12222'

运维自动化部署_ansible自动化运维_ansible运维管理平台

| crond 模块

该模块适用于管理cron计划任务的

其使用的语法跟我们的文件中的语法一致,同时ansible自动化运维,可以指定以下选项:

运维自动化部署_ansible自动化运维_ansible运维管理平台

添加计划任务

ansible运维管理平台_运维自动化部署_ansible自动化运维


ansible all -m cron -a "minute=* hour=* day=* month=* weekday=* job='/bin/sh test.sh'"

ansible all -m shell -a "crontab -l"

删除计划任务

ansible运维管理平台_运维自动化部署_ansible自动化运维


ansible web -m cron -a "name=None minute=* hour=* day=* month=* weekday=* job='/bin/sh test.sh' state=absent"

ansible all -m shell -a "crontab -l"

| 模块

该模块适用于管理防火墙的

常用的选项如下:

ansible运维管理平台_ansible自动化运维_运维自动化部署

安装nginx服务

ansible运维管理平台_运维自动化部署_ansible自动化运维


# 配置nginx安装源

ansible all -m yum_repository -a 'name=nginx description="nginx repo" baseurl=http://nginx.org/packages/centos/7/x86_64/ enabled=yes gpgcheck=no state=present'

# 安装nginx

ansible all -m yum -a 'name=nginx state=installed'

编写简单网页测试内容

ansible运维管理平台_运维自动化部署_ansible自动化运维


ansible all -m copy -a 'content="oldoby.com" dest=/usr/share/nginx/html/index.html'

启动服务加入开机自启

ansible运维管理平台_运维自动化部署_ansible自动化运维


ansible all -m systemd -a 'name=nginx state=started enabled=yes'

放行对应的端口

ansible运维管理平台_运维自动化部署_ansible自动化运维


ansible all -m iptables -a 'table=filter action=append chain=INPUT protocol=tcp destination_port=80 jump=ACCEPT'

总结

在本教程中,我们通过一些示例学习了如何去使用

感谢您的阅读ansible自动化运维,由于文档整理较费时费力,难免会有疏漏和不妥当地方,敬请谅解


发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注