Linux轻量级自动运维化工具Ansible是什么?

2023年 7月 10日 116.0k 0

Ansible 是什么 ?

Linux轻量级自动运维化工具Ansible是什么?

ansible架构图

Linux轻量级自动运维化工具Ansible是什么?

ansible特性

模块化:调用特定的模块,完成特定的任务;

基于Python语言研发,由Paramiko, PyYAML和Jinja2三个核心库实现;

部署简单:agentless;

支持自定义模块,使用任意编程语言;

强大的playbook机制;

幂等性;

安装及程序环境:

程序:

ansible

ansible-playbook

ansible-doc

配置文件:

/etc/ansible/ansible.cfg

主机清单:

/etc/ansible/hosts

插件目录:

/usr/share/ansible_plugins/

安装ansible

Linux轻量级自动运维化工具Ansible是什么?

安装依赖包

Linux轻量级自动运维化工具Ansible是什么?

ansible命令的使用:

Usage: ansible [options]

常用选项:

-m MOD_NAME

-a MOD_ARGS

配置Host Inventory:

/etc/ansible/hosts

[group_id]

HOST_PATTERN1

HOST_PATTERN2

示例:

首先对此文件进行备份操作,以防后面需要用到默认配置文件

Linux轻量级自动运维化工具Ansible是什么?

进入到/etc/ansible/hosts文件,此处绿色光标以下的内容是没有用的,都是示例,可以删除掉,然后添加我们下面实验操作用到的主机。

Linux轻量级自动运维化工具Ansible是什么?

添加一组websrvs服务器,以用于下面的测试

Linux轻量级自动运维化工具Ansible是什么?

测试主机连通性

这里报错是因为实验用的主机交换其他两台主机的公钥/私钥的原因导致的

Linux轻量级自动运维化工具Ansible是什么?

实验SSH免密码登陆设置

生成私钥和公钥 ssh-keygen -t rsa -P ''

Linux轻量级自动运维化工具Ansible是什么?

复制公钥文件问authorized_keys

Linux轻量级自动运维化工具Ansible是什么?

把公钥传送到其他主机

Linux轻量级自动运维化工具Ansible是什么?

在68的主机上面可以看见公钥已经传送过来了,并且确认文件的权限是否正确

Linux轻量级自动运维化工具Ansible是什么?

重复以上操作把公钥发送给69的主机

Linux轻量级自动运维化工具Ansible是什么?

然后重新执行ansible的ping模块命令查看该两台主机的连通性

可以发现此时已经成功,那么下面就开始介绍ansilbe的其他模块

Linux轻量级自动运维化工具Ansible是什么?

最后记得利用ansible同步一下所有主机的时间,以免某主机的时间有错误,后面看日志起来会造成混乱

Linux轻量级自动运维化工具Ansible是什么?

ansible模块:

获取模块列表:ansible-doc -l

获取指定模块的使用帮助:ansible-doc -s MOD_NAME

常用模块:

ping模块:探测目标主机是否存活;

Linux轻量级自动运维化工具Ansible是什么?

示例:测试所有的主机的连通性

Linux轻量级自动运维化工具Ansible是什么?

command模块:在远程主机执行命令;

Linux轻量级自动运维化工具Ansible是什么?

示例1:让所有主机同步时间

此处没有给出指定的-m command命令,是因为ansible的模块默认就是command

Linux轻量级自动运维化工具Ansible是什么?

示例2:让每一台主机都执行uname -r命令

Linux轻量级自动运维化工具Ansible是什么?

示例3:在主机上面都创建一个用户

Linux轻量级自动运维化工具Ansible是什么?

查看两台主机是否已经创建该用户

Linux轻量级自动运维化工具Ansible是什么?Linux轻量级自动运维化工具Ansible是什么?Linux轻量级自动运维化工具Ansible是什么?

查看用户信息:

Linux轻量级自动运维化工具Ansible是什么?

帮这两个用户改密码,此处需要注意的是,虽然用下面的命令看似执行成功,但是当我们验证的时候,就会发现密码错误了,这是因为ansible的command模块并不支持管道等输出,所以下面介绍另外一个ansible的模块shell

Linux轻量级自动运维化工具Ansible是什么?Linux轻量级自动运维化工具Ansible是什么?

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

注意:command和shell模块的核心参数直接为命令本身;而其它模块的参数通常为“key=value”格式;

Linux轻量级自动运维化工具Ansible是什么?

示例:批量修改其他主机的特定用户的密码

Linux轻量级自动运维化工具Ansible是什么?

此时可以发现已经可以登陆成功

Linux轻量级自动运维化工具Ansible是什么?

copy模块:复制文件到远程主机

用法:

(1) 复制文件

-a "src='https://www.cainiaoxueyuan.com/yunwei/15438.html#'" "

(2) 给定内容生成文件

-a "content= dest= "

其它参数:mode, owner, group, ...

Linux轻量级自动运维化工具Ansible是什么?

示例:复制文件到其他主机

此处创建一个测试文件

Linux轻量级自动运维化工具Ansible是什么?

复制文件到其他主机

下面红色的报错信息是,如果要传送文件,该主机的指定目录需要存在,如果不存在,就是提示错误

Linux轻量级自动运维化工具Ansible是什么?

创建对应的目录

Linux轻量级自动运维化工具Ansible是什么?

重新传送文件,已经没有错误提示,但是此处也可以看见,如果文件已经存在,则原文件会被覆盖掉,并且此处也没有任何提示覆盖文件的信息,所以操作的时候就需要注意了,以免覆盖掉重要的文件

Linux轻量级自动运维化工具Ansible是什么?

验证文件

Linux轻量级自动运维化工具Ansible是什么?

file模块:设置文件的属性

用法:

(1) 创建目录:

-a "path= state=directory"

(2) 创建链接文件:

-a "path= src='https://www.cainiaoxueyuan.com/yunwei/15438.html#'" /p>

(3) 删除文件:

-a "path= state=absent“

Linux轻量级自动运维化工具Ansible是什么?

示例:修改文件的权限和属主

Linux轻量级自动运维化工具Ansible是什么?

验证文件

Linux轻量级自动运维化工具Ansible是什么?

示例:创建文件的软连接

Linux轻量级自动运维化工具Ansible是什么?

验证文件

Linux轻量级自动运维化工具Ansible是什么?

设置文件的状态为absent(即删除文件)

Linux轻量级自动运维化工具Ansible是什么?

验证

Linux轻量级自动运维化工具Ansible是什么?

fetch模块:从远程主机拿文件

Linux轻量级自动运维化工具Ansible是什么?

示例:从10.1.156.69主机拿一个文件

Linux轻量级自动运维化工具Ansible是什么?

当抓去一堆文件的时候,也会创建对应的ip地址的目录,以区分文件

Linux轻量级自动运维化工具Ansible是什么?

cron模块 :管理计划任务条目

用法:

-a ""

minute=

hour=

day=

month=

weekday=

job=

name=

user=

state={present|absent}

Linux轻量级自动运维化工具Ansible是什么?

示例:创建一个同步时间的计划任务,每5分钟同步一下服务器的时间

Linux轻量级自动运维化工具Ansible是什么?

验证任务

Linux轻量级自动运维化工具Ansible是什么?

示例:删除计划任务

Linux轻量级自动运维化工具Ansible是什么?

验证

Linux轻量级自动运维化工具Ansible是什么?

hostname模块:管理主机名

用法:

name=

Linux轻量级自动运维化工具Ansible是什么?

示例:修改主机名

Linux轻量级自动运维化工具Ansible是什么?Linux轻量级自动运维化工具Ansible是什么?

yum模块:使用yum命令完成程序包管理

用法:

-a ""

(1) name= state={present|latest}

(2) name= state=absent

Linux轻量级自动运维化工具Ansible是什么?

示例:安装指定包

此实验,首先,确定主机的yum源是可用的,否则实验会失败

Linux轻量级自动运维化工具Ansible是什么?

安装samba包

Linux轻量级自动运维化工具Ansible是什么?

验证

Linux轻量级自动运维化工具Ansible是什么?

删除samba安装包

Linux轻量级自动运维化工具Ansible是什么?

已经没有安装的字眼了

service模块:服务管理

用法:

-a ""

name=

state=

started

stopped

restarted

enabled=

runlevel=

Linux轻量级自动运维化工具Ansible是什么?

示例:开启主机的httpd服务

首先我们确认httpd服务是关闭的

Linux轻量级自动运维化工具Ansible是什么?

开启httpd服务,并且设置为开机启动

Linux轻量级自动运维化工具Ansible是什么?

验证,80端口已经开启

Linux轻量级自动运维化工具Ansible是什么?

group模块:增加或删除组

用法:

-a ""

name=

state=

system=

gid=

Linux轻量级自动运维化工具Ansible是什么?

示例:添加一个组

Linux轻量级自动运维化工具Ansible是什么?

验证

Linux轻量级自动运维化工具Ansible是什么?

删除组

Linux轻量级自动运维化工具Ansible是什么?Linux轻量级自动运维化工具Ansible是什么?

验证

Linux轻量级自动运维化工具Ansible是什么?

user模块:用户管理

使用格式:

name= : 创建的用户名

state= : present新增,absent删除

force= : 删除用户的时候删除家目录

system= : 创建系统用户

uid= : 指定UID

shell= : 指定shell

home= : 指定用户家目录

Linux轻量级自动运维化工具Ansible是什么?

示例:增加一个系统用户

Linux轻量级自动运维化工具Ansible是什么?

验证

Linux轻量级自动运维化工具Ansible是什么?

删除用户

Linux轻量级自动运维化工具Ansible是什么?

setup模块:收集主机里面的各种信息

Linux轻量级自动运维化工具Ansible是什么?

示例:收集所有主机的信息

Linux轻量级自动运维化工具Ansible是什么?

YAML : 一种数据序列化工具的语言格式

YAML is a data serialization format designed for human readability and interaction with scripting languages.

Linux轻量级自动运维化工具Ansible是什么?

数据结构:

key:value

- item1

- item2

- item3

例如{name:jerry, age:21}

PlayBook

核心元素:

Tasks:任务,由模块定义的操作的列表;

Variables:变量

Templates:模板,即使用了模板语法的文本文件;

Handlers:由特定条件触发的Tasks;

Roles:角色;

playbook的基础组件:

Hosts:运行指定任务的目标主机;

remote_user:在远程主机以哪个用户身份执行;

sudo_user:非管理员需要拥有sudo权限;

tasks:任务列表

模块,模块参数:

格式:

(1) action: module arguments

(2) module: arguments

运行playbook,使用ansible-playbook命令

(1) 检测语法

ansible-playbook --syntax-check /path/to/playbook.yaml

(2) 测试运行

ansible-playbook -C /path/to/playbook.yaml

--list-hosts

-list-tasks

--list-tags

(3) 运行

ansible-playbook /path/to/playbook.yaml

-t TAGS, --tags=TAGS

--skip-tags=SKIP_TAGS

--start-at-task=START_AT

示例1:定义一个playbook任务来新增用户和组

定义一个yaml的模板

Linux轻量级自动运维化工具Ansible是什么?Linux轻量级自动运维化工具Ansible是什么?

查查语法有没有错误,没有提示即表示语法应该没有问题。

Linux轻量级自动运维化工具Ansible是什么?

测试运行看看,-C表示仅测试跑一边,但是不会实际操作

Linux轻量级自动运维化工具Ansible是什么?

也可以单独测试某些特定的选项

查看仅影响的主机

Linux轻量级自动运维化工具Ansible是什么?

查看运行哪些任务

Linux轻量级自动运维化工具Ansible是什么?

查看哪个任务打标了,这里并没有任何任务打标记,后面再演示

Linux轻量级自动运维化工具Ansible是什么?

以上没有错误,开始正式运行该任务

Linux轻量级自动运维化工具Ansible是什么?

验证

Linux轻量级自动运维化工具Ansible是什么?

示例2:定义一个playbook任务来修改文件端口

Linux轻量级自动运维化工具Ansible是什么?

此步骤里面有安装httpd的安装包,其实此处有点多余,因为测试的两台主机均已经安装该服务,此处添加上去是为了演示效果,因为当生产环境中,假如存在一台服务器没有该安装包,那么次处就能帮我们安装上去,不然的话,漏了这一步,到后面查原因也挺麻烦的

Linux轻量级自动运维化工具Ansible是什么?

检查语法问题

Linux轻量级自动运维化工具Ansible是什么?

先从一台主机上面把httpd.conf文件拷问来编辑

Linux轻量级自动运维化工具Ansible是什么?

修改httpd.conf文件

比如修改端口为8080,其他都为默认配置

Linux轻量级自动运维化工具Ansible是什么?

首先备份好各自主机里面的配置文件,以防后面出错

Linux轻量级自动运维化工具Ansible是什么?

检查备份是否成功

Linux轻量级自动运维化工具Ansible是什么?

测试运行web.yml,看看有没有问题,没有问题的话就正常运行

Linux轻量级自动运维化工具Ansible是什么?

执行改文件

Linux轻量级自动运维化工具Ansible是什么?

验证服务器端口打开没有,可以看见8080端口已经打开,实验成功。

Linux轻量级自动运维化工具Ansible是什么?

Handlers的使用:由特定条件触发的Tasks;

格式:

tasks:

- name: TASK_NAME

module: arguments

notify: HANDLER_NAME

handlers:

- name: HANDLER_NAME

module: arguments

示例:参照上面的例子继续修改apache的端口

修改端口号为8090

Linux轻量级自动运维化工具Ansible是什么?

修改原来的web.yml脚本实现操作

Linux轻量级自动运维化工具Ansible是什么?

检测语法

Linux轻量级自动运维化工具Ansible是什么?

测试运行,可以看出,当复制文件过去的时候,会触发到restart httpd service的handlers任务,所以任务就重启了,而不是启动

Linux轻量级自动运维化工具Ansible是什么?

正式运行

Linux轻量级自动运维化工具Ansible是什么?

验证结果,8090端口已经打开,实验成功

Linux轻量级自动运维化工具Ansible是什么?

tags:给指定的任务定义一个调用标识;

使用格式:

- name: NAME

module: arguments

tags: TAG_ID

示例:执行特定的tags

修改文件的端口为8088

Linux轻量级自动运维化工具Ansible是什么?

在此前的配置文件上面插入一个标签instconf

Linux轻量级自动运维化工具Ansible是什么?

检查语法

Linux轻量级自动运维化工具Ansible是什么?

此处可以查看到该yml脚本有一个标签,影响着websrvs组

Linux轻量级自动运维化工具Ansible是什么?

测试运行

Linux轻量级自动运维化工具Ansible是什么?

正式运行一下,指定以instconf的标签运行,所以此处不会显示器其他多余的信息,包括安装httpd包和启动httpd服务

Linux轻量级自动运维化工具Ansible是什么?

验证该结果

Linux轻量级自动运维化工具Ansible是什么?

此处也可以对同一个文件标记多个标签同时执行

Linux轻量级自动运维化工具Ansible是什么?

测试运行,因为此处已经安装了httpd包和文件已经复制过去,所以都是绿色,此处就演示到这里,其他步骤可以参考上面的操作

Linux轻量级自动运维化工具Ansible是什么?

Variables:变量

类型:

内建:

(1) facts

自定义:

(1) 命令行传递;

-e VAR=VALUE

(2) 在hosts Inventory中为每个主机定义专用变量值;

(a) 向不同的主机传递不同的变量 ;

IP/HOSTNAME variable_name=value

(b) 向组内的所有主机传递相同的变量 ;

[groupname:vars]

variable_name=value

(3) 在playbook中定义

vars:

- var_name: value

- var_name: value

(4) Inventory还可以使用参数:

用于定义ansible远程连接目标主机时使用的属性,而非传递给playbook的变量;

ansible_ssh_host

ansible_ssh_port

ansible_ssh_user

ansible_ssh_pass

ansible_sudo_pass

...

(5) 在角色调用时传递

roles:

- { role: ROLE_NAME, var: value, ...}

变量调用:

{{ var_name }}

示例1:利用命令行传递变量来安装不同的包

Linux轻量级自动运维化工具Ansible是什么?

此处{{ pkgname }}表示为一个变量

Linux轻量级自动运维化工具Ansible是什么?

检查一下语法,居然报错了,什么情况?仔细看了即便发现是漏了空格

Linux轻量级自动运维化工具Ansible是什么?

加上空格

Linux轻量级自动运维化工具Ansible是什么?

再次检查,还是还是有报错的情况,各位不要慌,因为这只是因为还没有给变量赋值才会报的错,所以此处报错是很正常

Linux轻量级自动运维化工具Ansible是什么?

给变量赋值再跑一遍,此时就不会报错

Linux轻量级自动运维化工具Ansible是什么?

修改一下变量,发现也是正常的,此处68因为已经安装过vsftpd所以就不会执行,所以并不会changed

Linux轻量级自动运维化工具Ansible是什么?

示例2:在playbook中定义变量

Linux轻量级自动运维化工具Ansible是什么?

测试,也没有问题的

Linux轻量级自动运维化工具Ansible是什么?

思考?假如同时利用-e的参数传递一个变量的参数的话会怎么样?

测试结果如下,是-e传递的变量参数的优先级更高,这样的话能避免传递参数的时候,因为文本里面定义的优先级更高而出错?

Linux轻量级自动运维化工具Ansible是什么?

示例3:在hosts Inventory中为每个主机定义专用变量值

Linux轻量级自动运维化工具Ansible是什么?Linux轻量级自动运维化工具Ansible是什么?

删除掉文档里面原有的变量

Linux轻量级自动运维化工具Ansible是什么?

测试,没有问题

Linux轻量级自动运维化工具Ansible是什么?

示例4:在hosts Inventory中为每个主机定义专用变量值的第二种方法

Linux轻量级自动运维化工具Ansible是什么?Linux轻量级自动运维化工具Ansible是什么?

测试,也是可以的

Linux轻量级自动运维化工具Ansible是什么?

Templates :模板,文本文件,内部嵌套有模板语言脚本(使用Jinja2模板语言编写)

Linux轻量级自动运维化工具Ansible是什么?

Jinja2 is a template engine written in pure Python. It provides a Django inspired non-XML syntax but supports inline expressions and an optional sandboxed environment.

Linux轻量级自动运维化工具Ansible是什么?

语法:

字面量:

字符串:使用单引号或双引号;

数字:整数、浮点数;

列表:[item1, item2, ...]

元组:(item1, item2, ...)

字典:{key1:value1, key2:value2, ...}

布尔型:true/false

算术运算:

+, -, *, /, //, %, **

比较操作:

==, !=, >, =,

相关文章

服务器端口转发,带你了解服务器端口转发
服务器开放端口,服务器开放端口的步骤
产品推荐:7月受欢迎AI容器镜像来了,有Qwen系列大模型镜像
如何使用 WinGet 下载 Microsoft Store 应用
百度搜索:蓝易云 – 熟悉ubuntu apt-get命令详解
百度搜索:蓝易云 – 域名解析成功但ping不通解决方案

发布评论