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

Ansible自动化运维工具使用详解

413次阅读
没有评论

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

一、 ansible 简介

1. ansible

ansible 是新出现的 自动化 运维工具 基于 Python 研发 糅合了众多老牌运维工具的优点实现了批量操作系统配置、批量程序的部署、批量运行命令等功能。 仅需在管理工作站上安装 ansible 程序配置被管控主机的 IP 信息,被管控的主机无客户端。 ansible 应用程序存在于 epel( 第三方社区 ) 源,依赖于很多 python 组件

Ansible 自动化运维工具使用详解

2.ansible 特性

模块化 设计 ,调用特定的模块来完成特定任务 ,本身是核心组件,短小精悍

基于 Python 语言实现,由 Paramiko (python 的一个可并发连接 ssh 主机功能库 ) , PyYAML 和 Jinja2 ( 模板化 ) 三个关键模块实现;

部署简单,agentless 无客户端工具;

主从模式 工作;

支持自定义模块 功能;

支持 playbook 剧本,连续任务按先后设置顺序完成;

期望每个命令具有 幂等性:

3.ansible 架构

ansible core ansible 自身核心模块

host inventory: 主机库,定义可管控的主机列表

connection plugins: 连接插件,一般默认基于 ssh 协议连接

modules:core modules ( 自带模块 ) custom modules ( 自定义模块 )

playbooks :剧本,按照所设定编排的顺序执行完成安排任务

Ansible 自动化运维工具使用详解

4. 配置 文件:

(1)ansible 应用程序的 主配置文件:/etc/ansible/ansible.cfg

(2) Host Inventory 定义管控主机 :/etc/ansible/hosts

遵循 INI 风格;中括号中的字符是组名;一个主机可同时属于多个组;

示例:

# Ex 1: Ungrouped hosts, specify before any groupheaders. 直接在任何组的头部前面指定,不属于任何组的主机

green.example.com

blue.example.com

192.168.100.1

192.168.100.10

# Ex 2: A collection of hosts belonging to the’webservers’ group ;一批主机属于一个组,例如定义为 ‘webservers’ 的组

[webservers]

alpha.example.org

beta.example.org

192.168.1.100

192.168.1.110

注意:默认是以 root 用户执行,但是基于 ssh 连接操作要多次输入密码,为方便可以使用基于 ssh 密钥方式进行认证

二、 ansible 应用程序命令

1. ansible-doc 命令:获取模块列表,及模块使用格式;

ansible-doc -l :获取列表

ansible-doc -s  module_name :获取指定模块的使用信息

2.ansible 命令格式

ansible  <host-pattern>  [-f forks] [-m module_name]  [-a args]

<host-pattern>

指明管控主机,以模式形式表示或者直接给定 IP ,必须事先定义在文件中; all 设置所有

[-f forks]

指明每批管控多少主机,默认为 5 个主机一批次

[-m module_name]

使用何种模块管理操作,所有的操作都需要通过模块来指定

[-a args]

指明模块专用参数; args 一般为 key=value 格式

注意:command 模块的参数非为 kv 格式,而是直接给出要执行的命令即可;

注意: <host-pattern> 默认读取 /etc/ansible/hosts ,也可以指明自定义文件路径

-iPATH, –inventory=PATH:指明使用的 host inventory 文件路径;

常用模块 (module_name)

1) command:默认模块 ,可省略。在远程主机上进行操作命令

-a  ‘COMMAND’

注意: comand 模块的参数非 key=value 格式,直接给出要执行的命令

[root@localhost ~]# ansible all -m command -a  ‘ifconfig’

2)user:

-a ‘name=  state={present ( 创建 ) |absent ( 删除 ) }  force= ( 是否强制操作删除家目录 )   system=  uid=  shell= home=’

[root@localhost ~]# ansible all -m user -a ‘name=ansible state=present’

3)group:

-a ‘name= state={present|absent}  gid=  system= ( 系统组 )

[root@localhost ~]# ansible all -m group -a ‘name=mygroup state=presentsystem=true’

4)cron:

-a  ‘name= state=  minute=  hour= day=  month=  weekday= job=’

[root@localhost ~]# ansible all -m cron -a ‘name=’Time’ state=presentminute=’*/5′ job=’/usr/sbin/ntpdate 172.168.0.1 &> /dev/null”

5)ping:

无参数

[root@localhost ~]# ansible all -m ping

6) file: 文件管理

-a ‘path=  mode=  owner= group= state={file|directory|link|hard|touch|absent}  src= (link ,链接至何处 )

[root@localhost ~]# ansible all -m file -a ‘path=/tmp/testdirstate=directory’

[root@localhost ~]# ansible all -m file -a ‘path=/tmp/test.txt state=touchmod=600 owner=user1’

7)copy:

-a ‘dest= ( 远程主机上路径 )   src= ( 本地主机路径 )   content= ( 直接指明内容 )  owner=  group=  mode=’

[root@localhosttmp]# ansible web -m copy -a ‘src=/etc/yum.repos.d/aliyun.repodest=/etc/yum.repos.d/’

8)template

-a  ‘dest= src=\’#\'” content=  owner= group=  mode=’

9)yum:

-a ‘name=  conf_file= ( 指明配置文件 )  state={present|latest|absent} enablerepo= disablerepo=’       

[root@localhost ~]# ansible all -m yum ‘name=httpd state=present’

10)service:

-a ‘name= state={started|stopped|restarted} enabled= ( 是否开机自动启动 )   runlevel=’

[root@localhost ~]# ansible all -m service -a ‘name=httpd state=started’

11)shell:

-a ‘COMMAND’   运行 shell 命令

[root@localhost ~]# ansible all -m shell -a echo “123456789” |passwd –stdin user1′

12)script:

-a ‘/PATH/TO/SCRIPT’ 运行脚本

[root@localhost ~]# ansible all -m script -a ‘/tmp/a.sh’

13) setup:获取指定主机的 facts 变量

Ansible 自动化运维工具使用详解

三、 Playbooks 剧本

1.playbook 组织格式:YAML 语言格式

playbooks ansible 更强大的配置管理组件,实现基于文本文件编排执行的多个任务,且多次重复执行

(1)YAML 简介

YAML YAML Ain’t  Markup Language;  Yet Another Markup Language;

类似于半结构化数据,声明式配置;可读性较高的用来表达资料序列的格式,易于与脚本语言交互

官方站点: http://www.yaml.org

(2) 语法 格式

1) 任何书记结构都用缩进来标识,可以嵌套

2) 每一行是一个键值数据 k ey :v alue ,冒号隔开。若想在一行标识需要用 {} , 分隔格式

3) 列表用 标识

2. inventory 参数 :主机库 ssh 参数设置

ansible 基于 ssh 连接 inventory 中指定的远程主机时,将以此处的参数指定的属性进行;

ansible_ssh_port

指定 ssh 端口

ansible_ssh_user

指定 ssh 用户

ansible_ssh_pass

指定 ssh 用户登录是认证密码,明文密码不安全

ansible_sudo_pass

指明 sudo 时候的密码

实例:

[websrvs]

192.168.0.101  ansible_ssh_port=22  ansible_ssh_user=root  ansible_ssh_pass=xuding

192.168.0.102

注意:在 /etc/ansible/hosts 中直接定义连接时候的密码不安全,一般建议基于 ssh 的密钥认证方式实现

3.playbooks

(1) 核心元素

Tasks 任务、 Variables 变量、 Templates 模板、 Handlers 处理器、 Roles 角色

(2)playbooks 定义任务:

– name:task description     注释 描述信息

module_name: module_args   声明模块:定义 ansible 模块参数

Ansible 自动化运维工具使用详解

(3) ansible-playbook 执行 命令:

ansible-playbook  <filename.yml> …  [options]

Ansible 自动化运维工具使用详解

4.playbook— 变量

(1)变量命名:字母、数字和下划线组成,仅能以字母开头;

(2)变量种类:

1) facts:由远程主机发回的主机 特有的 属性信息,这些信息被保存在 ansible 变量中;无须 声明 ,可直接调用;

2)自定义变量:

通过命令行传递:ansible-playbook  test.yml  –extra-vars “host=www user=test”

通过 roles 传递

3) 主机变量:定义在 inventory 中的主机之后的变量; 直接传递给单个主机的变量

实例:

[root@localhost ~]# vim /etc/ansible/hosts 中直接定义在主机之后

[web]

192.168.0.101    host=mail

192.168.0.102

192.168.0.103

4) 组变量:定义在 inventory 中的组上的变量 ( 例如在默认的文件 /etc/ansible/hosts 上编辑 )

[group_name:vars]

var1=value

var2=value

注意:组名要事先存在,实例如下:

[websrvs]

192.168.0.101

192.168.0.102

[websrvs:vars]

host=mail

变量使用示例:

[root@localhost~]# vim useradd.yml

–    hosts: websrvs

remote_user: root

vars:

username: testuser

password: xuding

tasks:

-name: add user

user: name={{username}} state=present

-name: set password

shell: /bin/echo {{password}} |/usr/bin/passwd –stdin {{username}}

注释:

1) {{}} 调用变量

2) #ansible-playbook /PATH/TO/SOME_YAML_FILE  {-eVARS|–extra-vars=VARS}     变量的重新赋值调用方法

[root@localhost ~]# ansible-playbookuseradd.yml –extra-vars “username=Ubuntu”

5.playbook—  tasks

(1) 条件测试:

在某 task 后面添加 when 子句即可实现条件测试功能;when 语句支持 Jinja2 语法;

    实例 当时 RedHat 系列系统时候调用 yum 安装

tasks:

-name: install web server package

yum: name=httpd state=present

when: ansible_os_family == “RedHat”

(2) 迭代: item

在 task 中调用内置的 item 变量;在某 task 后面使用 with_items 语句来定义元素列表;

tasks:

-name: add four users

user: name={{item}}  state=present

with_items:

-testuser1

-testuser2

-testuser3

-testuser4

注意:迭代中,列表中的每个元素可以为字典格式;

实例:

-name: add two users

user: name={{item.name}}  state=present groups={{item.groups}}

with_items:

– {name: ‘testuser5’, groups: ‘wheel’}

– {name: ‘testuser6’, groups: ‘root’}

6.playbook— handlers: 处理器;触发器

只有其关注的条件满足时,才会被触发执行 的任务;

实例:配置文件发生改变触发重启服务

-hosts: websrvs

remote_user: root

tasks:

-name: install httpd

yum:name=httpd state=present

-name: install config file

copy: src=/root/httpd.confdest=/etc/httpd/conf/httpd.conf

notify: restart httpd

-name: start httpd service

service: name=httpd state=started

handlers:

-name: restart httpd

service: name=httpd state=restarted

7.playbook 模板

templates:

用于生成文本文件(配置文件);模板文件中可使用 jinja2 表达式,表达式要定义在{{}},也可以简单地仅执行变量替换;

roles:

roles 用于实现“代码复用”;

roles 以特定的层次型格式组织起来的 playbook 元素(variables,tasks, templates, handlers);

可被 playbook 以 role 的名字直接进行调用;

用法 :在 roles/ 下建立 [group_name] 子目录,并非全部都要创建;例如:

/etc/ansible/roles/ (在 /etc/ansible/ansible.cfg 定义 roles 目录)

webserver/

files/:此角色中用到的所有文件均放置于此目录中;

templates/:Jinja2 模板文件存放位置;

tasks/:任务列表文件;可以有多个,但至少有一个叫做 main.yml 的文件;

handlers/:处理器列表文件;可以有多个,但至少有一个叫做 main.yml 的文件;

vars/:变量字典文件;可以有多个,但至少有一个叫做 main.yml 的文件;

meta/:此角色的特殊设定及依赖关系;

使用 Ansible 高效交付 Docker 容器  http://www.linuxidc.com/Linux/2015-10/124233.htm

使用 Ansible 批量管理远程服务器  http://www.linuxidc.com/Linux/2015-05/118080.htm

Ansible 安装配置与简单使用  http://www.linuxidc.com/Linux/2015-07/120399.htm

在 CentOS 7 中安装并使用自动化工具 Ansible  http://www.linuxidc.com/Linux/2015-10/123801.htm

Ansible 和 Docker 的作用和用法  http://www.linuxidc.com/Linux/2014-11/109783.htm

Ansible 批量搭建 LAMP 环境 http://www.linuxidc.com/Linux/2014-10/108264.htm

Ansible:一个配置管理和 IT 自动化工具  http://www.linuxidc.com/Linux/2014-11/109365.htm

Ansible 的详细介绍:请点这里
Ansible 的下载地址:请点这里

本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-07/133466.htm

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

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19350
评论数
4
阅读量
7963194
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
免费领取huggingface的2核16G云服务器,超简单教程

免费领取huggingface的2核16G云服务器,超简单教程

免费领取 huggingface 的 2 核 16G 云服务器,超简单教程 前言 HuggingFace.co...
一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸

一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸

一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸 前言 作为天天跟架构图、拓扑图死磕的...
星哥带你玩飞牛 NAS-10:备份微信聊天记录、数据到你的NAS中!

星哥带你玩飞牛 NAS-10:备份微信聊天记录、数据到你的NAS中!

星哥带你玩飞牛 NAS-10:备份微信聊天记录、数据到你的 NAS 中! 大家对「数据安全感」的需求越来越高 ...
你的云服务器到底有多强?宝塔跑分告诉你

你的云服务器到底有多强?宝塔跑分告诉你

你的云服务器到底有多强?宝塔跑分告诉你 为什么要用宝塔跑分? 宝塔跑分其实就是对 CPU、内存、磁盘、IO 做...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍

浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍

浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍 前言 在 AI 自动化快速发展的当下,浏览器早已不再只是...
还在找免费服务器?无广告免费主机,新手也能轻松上手!

还在找免费服务器?无广告免费主机,新手也能轻松上手!

还在找免费服务器?无广告免费主机,新手也能轻松上手! 前言 对于个人开发者、建站新手或是想搭建测试站点的从业者...
星哥带你玩飞牛NAS-16:不再错过公众号更新,飞牛NAS搭建RSS

星哥带你玩飞牛NAS-16:不再错过公众号更新,飞牛NAS搭建RSS

  星哥带你玩飞牛 NAS-16:不再错过公众号更新,飞牛 NAS 搭建 RSS 对于经常关注多个微...
每年0.99刀,拿下你的第一个顶级域名,详细注册使用

每年0.99刀,拿下你的第一个顶级域名,详细注册使用

每年 0.99 刀,拿下你的第一个顶级域名,详细注册使用 前言 作为长期折腾云服务、域名建站的老玩家,星哥一直...
星哥带你玩飞牛NAS-12:开源笔记的进化之路,效率玩家的新选择

星哥带你玩飞牛NAS-12:开源笔记的进化之路,效率玩家的新选择

星哥带你玩飞牛 NAS-12:开源笔记的进化之路,效率玩家的新选择 前言 如何高效管理知识与笔记,已经成为技术...