Ansible-基本概述

Ansible-基本概述,第1张

为什么要自动化运维

我们以 10 台机器部署 Nginx 为例。部署步骤如下:

1、通过 ssh 登录一台机器;

2、yum install -y nginx 或者 获取安装包自行编译安装;

3、配置 Nginx

4、启动 Nginx ,如有必要加入开机自启动;

5、退出登录

上面步骤重复 10 次,即可完成我们的部署要求。

痛点:

1、重复 *** 作频繁,增加了人工成本和后续维护成本;

2、机器太多时,容易落下某些机器且未 *** 作,进而产生后续影响;

3、人工频繁 *** 作时可能有 *** 作步骤不完整的情况,造成该机器和其他机器状态不一致。

我们还是以 10 台机器部署 Nginx 为例。部署步骤如下:

1、在控制机或者称为管理机的机器上写好相关脚本。「当然该脚本我们是测试通过的,脚本中包括安装、配置、启动等等」

2、将写好的脚本从控制机推送到受控机;

3、在受控机执行相关脚本,根据脚本部署我们需要的 Nginx。

好处

1、减少了重复 *** 作,提高了工作效率;

2、减小了出错几率,提高了准确率;

3、所有机器状态一致,降低了后续维护成本。

软件安装部署

配置同步

代码变更

命令执行

任务执行

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

Ansible 是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是 Ansible 所运行的模块,Ansible 只是提供一种框架。进而能减少我们的重复 *** 作,提高工作效率。

Ansible 不需要在远程主机上安装 client/agents,因为它们是基于 SSH 来和远程主机通讯的。

Ansible 目前已经已经被红帽官方收购,是自动化运维工具中大家认可度最高的,并且上手容易,学习简单。是每位运维工程师必须掌握的技能之一。

1、批量执行远程命令:可以对 N 台主机同时进行命令的执行;

2、批量配置软件服务:可以用自动化的方式管理配置和服务;

3、实现软件开发功能:例如 jumpserver 底层使用 Ansible 来实现自动化管理;

4、编排高级的 IT 任务:Ansible 的 Playbooks 是一门编程语言,可以用来描绘一套 IT 架构。

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

2、安全可靠,默认使用 SSH 协议对被控端进行管理;

3、有大量的常规运维 *** 作模块,可实现日常绝大部分 *** 作;

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

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

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

7、轻量级,无需在客户端安装 Agent,更新时只需在 *** 作机上进行一次更新即可。

模块说明如下:

Ansible:Ansible 核心程序。

Host Inventory:记录由 Ansible 管理的主机信息清单,包括端口、密码、IP 等。

Playbooks:“剧本” YAML 格式文件,多个任务定义在一个文件中,定义主机需要调用哪些模块来完成的功能。

Core Modules:核心模块,主要 *** 作是通过调用核心模块来完成管理任务。

Custom Modules:自定义模块,完成核心模块无法完成的功能,支持多种语言。

Connection Plugins:连接插件,Ansible 和 Host 通信使用

Ansible 控制主机对被管节点的 *** 作方式可分为两类,即 ad-hoc 和 playbook:

ad-hoc 模式(点对点模式)

使用单个模块,支持批量执行单条命令。ad-hoc 命令是一种可以快速输入的命令,而且不需要保存起来的命令。 就相当于 bash 中的一句 shell。

playbook 模式(剧本模式)

是 Ansible 主要管理方式,也是 Ansible 功能强大的关键所在。 playbook 通过多个 tasks 集合完成一类功能 ,如 Web 服务的安装部署、数据库服务器的批量备份等。可以简单地把 playbook 理解为通过组合多条 ad-hoc *** 作的配置文件。

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

1、加载自己的配置文件,默认 /etc/ansible/ansible.cfg;

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

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

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

5、对应执行用户的家目录的 .ansible/tmp/XXX/XXX.PY文件;

6、给文件 +x 执行权限;

7、执行并返回结果;

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

目录

一、常用命令使用

二、双引号" " 单引号' '对执行结果的影响

三、ansible-console工具

四、ansible常用模块

一、常用命令使用

前面有提到过ansible的常用的命令和使用

列出要执行主机

ansible all --list-hosts

批量检测主机

ansible all -m ping -k

ansible主机集合 -m 模块名称 -a 模块参数

主机集合 主机名或分组名,多个使用"逗号"分隔

-m 模块名称,默认command模块

-a or --args模块参数

其它参数

-i inventory文件路径,或可执行脚本

-k 使用交互式登陆密码

-e 定义变量

-v 显示详细信息

二、双引号" " 单引号' '对执行结果的影响

执行以下命令来查看ansible的执行结果

1)shell

ansible web -m shell -a "echo ${HOSTNAME}"

ansible web -m shell -a 'echo ${HOSTNAME}'

2)创建的文件在哪查看

ansible cache -m shell -a 'cd /tmp'

ansible cache -m shell -a 'touch testfile'

注:

1)变量解析 双引号"" 与单引号''使用区别

ansible 执行命令是二次解析,第一次在本机解析, 第二次在执行机器解析,需要第二次解析的变量要转移

总结: 参数默认使用 ' ' 号就对了

2)创建的文件在哪里

文件在用户家目录,ansible 是使用 ssh 多次连接执行,连接退出以后之前的状态就全部失效了

解决方法:使用 chdir 代替 cd 命令

ansible cache -m shell -a 'chdir=/tmp touch testfile'

三、ansible-console工具

是ansible为用户提供的交互式工具,用户可以在ansible-console虚拟出来的终端出来的终端上像shell一样使用ansible内置的各种命令,这为习惯使用shell交互方式的用户提供了良好的使用体验

四、ansible常用模块

4.1 ) ansible-doc和ping模块

ansible-doc模块手册

模块的手册相当于shell的man,很重要

ping模块

测试网络连通性,ping模块没有参数

注:测试ssh连通性

4.2 ) command模块

默认模块,远程执行命令

用法

command模块注意事项:

该模块通过-a跟上要执行的命令可以直接执行,若命令里有如下字符则执行不成功

"<" ">" "|" "&"

command模块不能解析系统变量

该模块不启动shell直接在ssh进程中执行,所有使用到shell的命令执行都会失败

查看所有机器负载

查看日期和时间

4.3 )shell模块

shell模块用法基本和command一样,区别是shell模块是通过/bin/sh进行执行命令,可以执行任意命令

不能执行交互式的命令,例如 vim top等

4.4 ) script模块

命令太复杂?

在本地写脚本,然后使用script模块指量执行

ansible web -m script -a 'urscript'

注意:该脚本包含但不限于shell脚本,只要指定sha-bang解释器的脚本都可运行

案例:

给所有web主机添加用户wk

1.要求by用户与wk用户不能出现在同一台主机上

2.设置wk用户的密码是456

4.5 ) yum模块

使用yum包管理器来管理软件包

name:要进行 *** 作的软件包名字

state:动作(installed安装、removed删除)

4.6 ) service模块

name:必须项,服务名称

enabled:是否开机启动yes|no

sleep:执行restarted,会在stop和start之间沉睡几秒钟

state:对当时服务执行启动、停止、重启中、重新加载等 *** 作(started,stopped,restarted,reloaded)

案例:

1.给db组安装mariadb

2.开启mariadb服务并设置开机启动

4.7 ) copy模块

复制文件到远程主机

src:复制本地文件到远程主机,绝对路径和相对路径都可以,路径为目录时会递归复制,若路径以"/"结尾,只复制目录里的内容,若不以"/"结尾,则复制包含目录在内的整个内容,类似于rsync

dest:必须项,远程主机的绝对路径,如果源文件是一个目录,那该路径必须是目录

backup:覆盖前先备份原文件,备份文件包含时间信息,有两个选项:yes|no

force:若目标主机包含该文件,但内容不同,如果设置为yes,则强制覆盖,设为no,则只有当目标主机的目标位置不存在该文件时才复制,默认为yes

案例:

拷到本机/etc/resolv.conf 文件到所有拖管主机 并对原文件备份

给所有 db 主机开启 binlog 日志

4.8 ) lineinfile模块 replace模块

类似sed的一种行编辑替换模块

path 目标文件文件

regexp 正则表达式,要修改的行

line 最终修改的结果

replace模块

类似sed的一种行编辑替换模块

path 目标文件文件

regexp 正则表达式,要修改的行

replace 替换后的结果

lineinfile模块与 replace模块区别

lineinfile模块 是修改某个文件的单行并进行替换

replace模块 是修改某个文件的所有匹配行并进行替换

4.9 ) setup模块

主要用于获取主机信息,playbooks里经常会用的另一个参数gather_facts与该模块相关,setup模块下经常用的是filter参数

filter过滤所需信息

执行以下命令可查看包含的所有信息,可大致浏览一遍,包含的信息,

需要注意的是 filter过滤条件必须以信息中模块名为过滤条件 模块中详细信息不能为过滤条件

==============================================================

ansible 主机信息(可以是组) -m 模块名称 -a "完成动作"

举例:

在ansible中 使用ansible-doc <模块名称>来查看单独模块用法

常用参数

官方模块说明: https://docs.ansible.com/ansible/latest/modules/command_module.html#command-module

参数:chdir--在执行命令 *** 作前进行切换目录

参数:creates--判断一个文件是否存在,如果存在后面的命令就不会执行

参数:removes--判断一个文件是否存在,如果不存在,后续的命令不会被执行

官方模块说明: https://docs.ansible.com/ansible/latest/modules/shell_module.html#shell-module

参数chdir:在执行命令前进行目录切换

参数:creates----判断一个文件是否存在,如果存在,后续命令不会执行

参数:removes--判断一个文件是否存在,如果不存在则候命的命令不会执行

官网模块说明: https://docs.ansible.com/ansible/latest/modules/script_module.html#script-module

使用这个模块需要注意的

官方模块说明: https://docs.ansible.com/ansible/latest/modules/yum_module.html#yum-module

参数:name--指定安装软件的名称

参数:state--指定软件安装或卸载

在这个模块中卸载使用 removed 安装使用installed注意看示例

官网模块说明: https://docs.ansible.com/ansible/latest/modules/service_module.html#service-module

官网模块说明: https://docs.ansible.com/ansible/latest/modules/copy_module.html#copy-module

参数:src--指定管理端源数据

参数:dest--分发到远程主机的目标路径下

参数:owner--专属文件之后修改文件属主

参数:group--传输文件之后修改文件属组

参数:mode--修改文件的读、写、执行权限

参数:backup--在分发传输文件之前,将源文件进行备份,按照时间信息进行备份

参数remote_src--no表示从管理端找寻数据进行分发yes 默认从被管理端找寻数据进行分发

参数content--分发文件时在文件中穿件简单信息

官网模块说明: https://docs.ansible.com/ansible/latest/modules/fetch_module.html#fetch-module

参数:src--要拉取的远程数据

参数:dest--要保存本地的文件路径

官方说明: https://docs.ansible.com/ansible/latest/modules/file_module.html#file-module

path:指定路径信息

owner:传输文件之后修改文件属主权限

group:传输文件后修改属组权限

mode:直接修改文件读、写、执行权限

state:touch(创建文件)、directory(创建目录)、hard(创建硬链接文件) link(创建软链接文件)、absent(删除数据)

创建件目录:

创建文件:

删除数据信息:

官方说明: https://docs.ansible.com/ansible/latest/modules/mount_module.html#mount-module

参数:src--指定要挂载数据

参数:path--指定挂载点

**参数:fstype--指定挂载后,文件系统类型 如:ext3、ext4、xfs、nfs **

参数:state--指定动作 如:mounted(挂载)、present(永久挂载)、umounted(临时卸载) absent(永久卸载)

挂载:

官方说明: https://docs.ansible.com/ansible/latest/modules/cron_module.html#cron-module

name: 定义定时任务注释信息

参数:minute --表示分钟信息

参数:hour --表示小时信息

参数:day --表示日期信息

参数:month --表示月份信息

参数:weekday --表示星期信息

参数:job --表示定义任务信息

参数:state --指定动作 如:present(创建定时任务)、absent(删除定时任务)

参数:disabled: 让定时任务临时失效

利用ansible编写时间同步定时任务:每隔5分钟,进行时间同步:

删除定时任务:

注释定时任务:

官网说明: https://docs.ansible.com/ansible/latest/modules/group_module.html#group-module

参数:name--指点组名

参数:gid--指定gid

参数:state--指定动作 present(创建) absent(删除)

官方说明: https://docs.ansible.com/ansible/latest/modules/user_module.html#user-module

参数:name--指定用户名称

参数:uid--指定用户uid信息

参数:group--指定属组

参数:groups--指定属于附加组

参数:password—-指定用户密码信息(必须密文的信息)

参数:shell—-指定用户shell信息 /sbin/nologin

参数:create_home--no表示不创建家目录

创建用户:

删除用户:

**方法一:利用ansible模块功能

ansible all -i localhost, -m debug -a "msg={{ 'mypassword' | password_hash('sha512', 'mysecretsalt') }}"

mypassword: 指定明文密码信息

mysecretsalt:加密计算方式(辅助加密)

方法二:利用python模块功能

使用这种方法需要安装python-pip

如果安装不上需要更新pip源,更新方法:

更新pip源:

==============================================================

Linux


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9590969.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存