自动化运维工具Ansible

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:

一、简介

1.1 基本概念:

  ansible是一个基于python开发的轻量级自动化运维管理工具,可以用来批量执行命令,安装程序,支持playbook编排。它通过ssh协议来连接主机,去中心化,相对比puppet和saltstack无需安装客户即可实现文件传输、命令执行、应用部署、配置管理、任务编排等,显得更为简单与轻量。ansible只是提供一种框架,其基于模块工作的,本身没有批量部署。

1.2 核心组件:

(1)、连接插件connection plugins:负责和被监控端实现通信;

(2)、host inventory:指定操作的主机,是一个配置文件里面定义监控的主机;

(3)、各种模块核心模块、command模块、自定义模块;

(4)、借助于插件完成记录日志邮件等功能;

(5)、playbook:剧本执行多个任务时,非必需可以让节点一次性运行多个任务。

1.3 工具特性:

(1)、no agents:不需要在被管控主机上安装任何客户端;

(2)、no server:无服务器端,使用时直接运行命令即可;

(3)、modules in any languages:基于模块工作,可使用任意语言开发模块;

(4)、yaml,not code:使用yaml语言定制剧本playbook;

(5)、ssh by default:基于SSH工作;

(6)、strong multi-tier solution:可实现多级指挥。

1.4 流程架构:

wKioL1ncR6eADyO1AAEvXQjifhw076.png

wKioL1ncXunh8DRkAAHwKsC_JoE071.png

1.5 优缺点:

优点:

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

  • 批量任务执行可以写成脚本,而且不用分发到远程就可以执行;

  • 使用python编写,维护更简单;

  • 使用push方式,控制节点向其他节点推方式,可先测试变更,方便控制管理。

缺点:

  • 基于ssh,串行,故超过500台主机效率较低;

二、安装部署

名称
主机名
IP地址
A主机
ansible-A
172.20.4.10
B主机
ansible-B
172.20.4.11
C主机
ansible-C
172.20.4.12

2.1 Ansible安装

  安装方式可使用源码编译安装,也可以更新yum源后yum安装,由于依赖较多模块,编译安装易出现异常,此次采用yum安装,Centos 6.x安装epel源后,直接可以yum安装,python版本2.6以上,在各个节点均需要安装

1
2
rpm -ivh http: //mirrors .sohu.com /fedora-epel/6/x86_64/epel-release-6-8 .noarch.rpm
yum  install  ansible -y

2.2 各主机SSH互信

例如:在A主机执行以下命令,将公钥发送到B主机

1
ssh -keygen -t rsa                              #创建公钥与私钥
1
ssh -copy- id  -i ~/. ssh /id_rsa .pub root@172.20.4.11             #将公钥传输给对端服务器

此时A服务器可以免密码登录B服务器

wKioL1ncYvGgfSjkAACbI1nUyrk391.png

同样方式,可以做A到C主机,如果控制端为B主机,需要B反向将公钥发布到A主机,实现互信。

2.3 命令参数介绍

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
Usage: ansible <host-pattern> [options]
 
Options:
-a MODULE_ARGS, --args=MODULE_ARGS                  #制定调用的模块(ansible-doc查看模块)
module arguments
--ask-vault-pass      ask  for  vault password           #加密文件
-B SECONDS, --background=SECONDS               #后台等待多少秒
run asynchronously, failing after X seconds
(default=N /A )
-C, --check           don't  make  any changes; instead, try to predict some       #不执行命令,值执行命令检查
of the changes that may occur
-D, -- diff             when changing (small) files and templates, show the
differences  in  those files; works great with --check
-e EXTRA_VARS, --extra-vars=EXTRA_VARS                                   #调用外部变量
set  additional variables as key=value or YAML /JSON
-f FORKS, --forks=FORKS                                          #一次执行并发的连接数
specify number of parallel processes to use
(default=5)
-h, --help            show this help message and  exit
-i INVENTORY, --inventory- file =INVENTORY                                 #调用的hosts文件
specify inventory host path
(default= /etc/ansible/hosts ) or comma separated host
list.
-l SUBSET, --limit=SUBSET                                        #限定主机列表中的某台主机执行
further limit selected hosts to an additional pattern
--list-hosts          outputs a list of matching hosts; does not execute         #列出直接列表中主机
anything  else
-m MODULE_NAME, --module-name=MODULE_NAME                                #调用执行模块
module name to execute (default= command )
-M MODULE_PATH, --module-path=MODULE_PATH
specify path(s) to module library (default=None)
--new-vault-password- file =NEW_VAULT_PASSWORD_FILE  
new vault password  file  for  rekey
-o, --one-line        condense output
--output=OUTPUT_FILE  output  file  name  for  encrypt or decrypt; use -  for
stdout
-P POLL_INTERVAL, --poll=POLL_INTERVAL
set  the poll interval  if  using -B (default=15)
--syntax-check        perform a syntax check on the playbook, but  do  not
execute it
-t TREE, --tree=TREE  log output to this directory
--vault-password- file =VAULT_PASSWORD_FILE
vault password  file
- v , --verbose         verbose mode (-vvv  for  more , -vvvv to  enable            #命令输出详细输出
connection debugging)
--version             show program's version number and  exit
 
Connection Options:
control as whom and how to connect to hosts
 
-k, --ask-pass      ask  for  connection password                           #需要安装sshpass  输入密码
--private-key=PRIVATE_KEY_FILE, --key- file =PRIVATE_KEY_FILE
use this  file  to authenticate the connection
-u REMOTE_USER, --user=REMOTE_USER                                        #ssh执行命令的用户,默认为当前执行ansible的用户
connect as this user (default=None)
-c CONNECTION, --connection=CONNECTION
connection  type  to use (default=smart)
-T TIMEOUT, --timeout=TIMEOUT                                        #执行命令的超时时间 (default=10)
override the connection timeout  in  seconds
(default=10)
-- ssh -common-args=SSH_COMMON_ARGS
specify common arguments to pass to  sftp /scp/ssh  (e.g.
ProxyCommand)
-- sftp -extra-args=SFTP_EXTRA_ARGS
specify extra arguments to pass to  sftp  only (e.g. -f,
-l)
-- scp -extra-args=SCP_EXTRA_ARGS
specify extra arguments to pass to  scp  only (e.g. -l)
-- ssh -extra-args=SSH_EXTRA_ARGS
specify extra arguments to pass to  ssh  only (e.g. -R)
 
Privilege Escalation Options:
control how and  which  user you become as on target hosts
 
-s, -- sudo           run operations with  sudo  (nopasswd) (deprecated, use
become)              #sudo
-U SUDO_USER, -- sudo -user=SUDO_USER        #sudo
desired  sudo  user (default=root) (deprecated, use
become)
-S, -- su             run operations with  su  (deprecated, use become)
-R SU_USER, -- su -user=SU_USER                                         #su 的时候切换到那个用户
run operations with  su  as this user (default=root)
(deprecated, use become)

2.4 配置相关文件

修改主机文件inventory:,此文件定义执行命令的主机列表

wKioL1ncY8bS-Ms9AAAojWh7jgg214.png

设置ansible.cfg参数

1
2
3
4
5
6
inventory = /etc/ansible/hosts              #定义资源清单inventory文件的位置,一般保持默认
library = /usr/share/my_modules/            #library指向ansible模块的目录,一般保持默认
forks =10                                  #设置多少个进程同时工作
sudo_user=root                             #设置默认执行命令的用户,也可在playbook中重新设置此参数
remote_port=22                             #制定连接被管理的管理端口,默认为22
timeout =10                                #设置SSH连接的超时时间间隔,单位为秒

2.5 测试

1
2
ansible agent -m  command  -a  "touch /tmp/aaa"  -vvv
#-m  使用command模块  -a 使用command里面支持的命令参数 -vvv 查看详细过程

wKioL1ncbXmA9xmVAAB-f9ZOtgs514.png

三、模块介绍

ansible模块较多,对应可以查看相关文档,此处列出一下日常工作中常用的模块

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
【copy】模块
ansible agent -m copy -a  "src=/root/test.sh dest=/tmp"
file
调用-s 参数,需要客户端能够无密码使用 sudo 命令;
ansible agent -m  file  -a  "dest=/tmp/test.sh mode=755 owner=root group=root"  -s
【script】
ansible agent -m script -a  "/tmp/test.sh"
【shell】创建用户
ansible agent -m shell -a  "/tmp/test.sh" 
【group】创建组
ansible agent -m group -a  "name=test1 state=present"  -s
【user】
ansible agent -m user -a  "name=xuel home=/home/xuel state=present"  -s
【yum】
可以提供的status:absent,present,installed,removed,latest
ansible agent -m yum -a  "name=httpd state=latest"  -s
【server】
可以提供的status:running,started,stopped,restarted,reloaded
cron
ansible agent -m  cron  -a  'name="my job" minute=*/1 hour=* day=* month=* weekday=* job="/usr/sbin/ntpdate time1.aliyun.com"'
【get_url】
ansible agent -m get_url -a  "url=http://mirrors.sohu.com/fedora-epel/6/x86_64/epel-release-6-8.noarch.rpm dest=/tmp"
【synchronize】需要安装 rsync
ansible agent -m synchronize -a  "src=/root/test.file dest=/tmp"
模块默认使用的为推送push,如果想使用pull功能需添加mode=pull
ansible agent -m synchronize -a  "mode=pull src=/tmp/test.file dest=/root/"
【ini_file】 
ansible agent -m ini_file -a  "dest=/tmp/test.ini section=Mongo option=Host value=127.0.0.1"
该模块Python需要安装ConfigParser

四、ansible-playbook介绍

4.1 核心组件

1
2
3
4
5
hosts              #执行的远程主机列表
tasks              #任务集
varniables         #内置变量或自定义变量
templates          #可替换模版
handlers           #触发操作

4.2 命令

1
2
3
4
5
Usage: ansible-playbook playbook.yml
ansible-playbook test1.yml              #执行剧本
ansible-vault encrypt test1.yml          #加密剧本
ansible-vault decrypt test1.yml          #加密剧本
ansible-vault view test1.yml             #加密剧本

4.3 YAML语法

1.“---”顶行首写

2.#代码注释

3.缩进统一,不可混用空格与tab

4.缩进级别椅子

5.区分大小写

6.k/v值可以同行写也可换行写,同行使用:分割,换行需要-分割

7.一个网址的功能代码需要最少的元素包括name:task

8.一个name只能包括一个task

4.4 安装并启动mysql playbook实例

1
2
3
4
5
6
7
8
9
10
--- 
- hosts: agent
   remote_user: root
   tasks:
   - name:  install  mysql-server
     yum: name=mysql-server state=present
   - name: start mysql-server
     service: name=mysqld state=started
   - name: check mysql service
     shell:  ps  -ef | grep  mysqld

执行次playbook将mysql数据库安装到agent服务分组里:

wKiom1nc4kuhzrxQAAApekprQ-Y385.pngwKioL1ncc1ajFfZZAABQ2c97ioY532.png










本文转自 KaliArch 51CTO博客,原文链接:http://blog.51cto.com/kaliarch/1971185,如需转载请自行联系原作者
目录
相关文章
|
11天前
|
敏捷开发
【sgCreatePinyin】自定义小工具:敏捷开发→自动化生成拼音字段名称(字段名生成工具)
【sgCreatePinyin】自定义小工具:敏捷开发→自动化生成拼音字段名称(字段名生成工具)
|
28天前
|
存储 运维 安全
构建高效自动化运维体系:Ansible与Docker的完美结合
【2月更文挑战第31天】 随着云计算和微服务架构的兴起,自动化运维成为保障系统稳定性和提升部署效率的关键手段。本文将详细探讨如何通过Ansible和Docker的结合来构建一个高效、可靠且易于管理的自动化运维体系。首先,介绍自动化运维的必要性及其在现代IT基础设施中的作用;然后,分别阐述Ansible和Docker的技术特点及优势;最后,提供一个基于Ansible和Docker结合使用的实践案例,以及实施过程中遇到的挑战和解决方案。
|
28天前
|
移动开发 安全 数据安全/隐私保护
iOS 全局自动化代码混淆工具!支持 cocoapod 组件代码一并混淆
iOS 全局自动化代码混淆工具!支持 cocoapod 组件代码一并混淆
|
29天前
|
运维 安全 网络安全
构建高效自动化运维体系:Ansible与Docker的完美融合
【2月更文挑战第30天】在当今快速迭代和持续部署的软件发展环境中,自动化运维成为确保效率和稳定性的关键。本文将探讨如何通过结合Ansible和Docker技术,构建一个高效的自动化运维体系。我们将分析Ansible的配置管理功能和Docker容器化的优势,并展示它们如何协同工作以简化部署流程,增强应用的可移植性,并提供一致性的系统环境。此外,文章还将介绍一些最佳实践,帮助读者在真实环境中实现这一整合方案。
|
29天前
|
测试技术
现代软件测试中的自动化工具与挑战
传统软件测试面临着越来越复杂的系统架构和不断增长的测试需求,自动化测试工具应运而生。本文将探讨现代软件测试中自动化工具的应用和挑战,深入分析其优势与局限性,为软件测试领域的发展提供思路和启示。
|
25天前
|
jenkins 测试技术 持续交付
现代软件测试中的自动化工具与挑战
随着软件开发领域的不断发展,自动化测试工具在测试过程中扮演着越来越重要的角色。本文将探讨现代软件测试中自动化工具的应用及面临的挑战,旨在帮助开发人员和测试人员更好地理解和应对自动化测试中的问题。
|
11天前
|
敏捷开发
【sgCreateTableData】自定义小工具:敏捷开发→自动化生成表格数据数组[基于el-table]
【sgCreateTableData】自定义小工具:敏捷开发→自动化生成表格数据数组[基于el-table]
|
18天前
|
Java 测试技术 API
软件测试中的自动化工具与策略
软件测试是确保软件质量的重要环节,而自动化测试工具和策略的应用在提高测试效率和准确性方面发挥着重要作用。本文将介绍几种常见的自动化测试工具,并探讨在软件测试中应用自动化测试的最佳实践和策略。
|
20天前
|
Web App开发 Java 测试技术
深入理解与应用软件自动化测试工具Selenium
随着软件开发的快速发展,软件测试在保证产品质量方面发挥着越来越重要的作用。其中,自动化测试以其效率高、成本低的特点受到了广大开发者的欢迎。本文主要介绍了自动化测试工具Selenium的基本概念、原理以及在实际开发中的应用,旨在帮助读者更好地理解和使用Selenium进行高效的自动化测试。
22 4
|
27天前
|
人工智能 运维 Prometheus
现代运维中的自动化工具与挑战
随着信息技术的不断发展,现代运维工作日益复杂且关键。本文将探讨现代运维中自动化工具的应用与挑战,介绍各类自动化工具在提高效率、降低风险方面的作用,并讨论在实际应用中可能面临的问题与解决方法。
22 4

热门文章

最新文章