DevOps自动化运维实践_自动化运维工具Ansible

一、Ansible简介与安装

1.1、Ansible介绍与应用场景

Ansible是一款自动化运维工具,基于Python开发,可以实现【批量系统设置】、【批量程序部署】、【批量执行命令】等功能,Ansible的特点如下表:

序号 Ansible的特点
1 完全基于Python开发,要求python的版本在2.6及其更高。
2 丰富的内置模块,近600个模块完全满足日常功能所需。
3 默认通过SSH协议管理机器(因此,客户端无需任何配置,管理端配置好后即可使用)。
4 目前属于红帽(Redhat)公司,最新版本为Ansible13
序号 Ansible的应用场景
1 代码自动化部署
2 系统管理配置自动化
3 持续交付自动化
4 云计算,大数据平台环境
5 批量任务执行可以写成脚本,不用分发到远程就可以执行
6 支持非root用户管理操作,支持sudo
7 使用python编写,维护更简单

1.2、Ansible的安装

本文以红帽系的AlmaLinux9.3为例进行操作:

bash 复制代码
#Ansible的安装
#1-先安装第三方的epel源
yum install epel-release
#2-直接安装Ansible(由于Ansible依赖Pyhont环境,且是红帽系系统的一个组成部分,因此推荐用yum命令安装)
yum install ansible -y

1.3、Ansible的指令

Ansible如下表的七个指令中,用的最多的是【ansible】【ansible-playbook】这两个指令,一定要掌握;其他的五个指令属于扩展或高级指令。

序号 Ansible指令 说明
1 ansible ansible是指令核心部分,其主要用于执行ad-hoc命令(即:单条命令)。默认后面需要跟主机和选项部分,默认不指定模块时,使用的是command模块。
2 ansible-doc 该指令用于查看模块信息,常用参数有两个【-l】 和 【-s】: 《1》列出所有已经安装的模块【ansible-doc -l】; 《2》查看某个模块的用法【ansible-doc -s 需查看的命令名称】(如:ansible-doc -s shell)
3 ansible-galaxy 指令用于方便的从https://galaxy.ansible.com/ 站点下载第三方扩展模块; 可以将其形象的理解其类似于centos下的yum、python下的pip或easy_install命令 。
4 ansible-lint 对playbook的语法进行检查的一个工具。用法是【ansible-lint playbook.yml
5 ansible-playbook 该指令是使用最多的指令,其通过读取playbook 文件后,执行相应的动作;接下来会详解。
6 ansible-pull ansible的【pull 模式】,这与平常经常用的push模式刚好相反,其适用于以下场景: 《1》有数量巨大的机器需要配置,即使使用非常高的线程还是要花费很多时间 《2》要在一个没有网络连接的机器上运行Anisble,比如在启动之后安装。
7 ansible-vault ansible-vault主要应用于配置文件中含有敏感信息,又不希望被人看到,vault可以帮你加密/解密这个配置文件,属高级用法。 主要对于playbooks里比如涉及到配置密码或其他变量时,可以通过该指令加密,这样我们通过cat看到的是一个密码串类的文件,编辑的时候需要输入事先设定的密码才能打开。这种playbook文件在执行时,需要加上 --ask-vault-pass参数,同样需要输入密码后才能正常执行。

二、Ansible的架构与运行原理

2.1、Ansible的基础架构

序号 Ansible的基础架构内容 说明
1 ansible 是核心
2 Core Modules 【核心模块】:是ansible自带的模块,Ansible模块资源分发到远程节点使其执行特定任务或匹配一个特定的状态。
3 Custom Modules 【扩展模块】:如果核心模块不足以完成某种功能,可以添加扩展模块。
4 Plugins 【插件】:完成较小型的任务。辅助模块来完成某个功能。
5 Playbooks 【ansible的任务配置文件,将多个任务定义在剧本中,由ansible自动执行】。 例如:安装一个nginx服务,则可以拆分为几个任务放到一个playbook(剧本)中: 《1》下载nginx的安装包; 《2》将事先写好的nginx.conf配置文件下发到目标服务器上; 《3》把nginx服务启动起来。 《4》需要检查端口是否正常开启。 这些步骤可以通过playbook来进行整合,然后通过inventory来下发到想要执行剧本的主机上。
6 Connection Plugins 【连接插件】:ansible基于连接插件连接到各个主机上,默认是基于SSH连接到目标机器上执行操作的,但是它还支持其他的连接方法,所以需要有连接插件,管理端支持local 、ssh、 paramiko三种方式连接被管理端。
7 Host Inventory 【主机清单】:定义ansible管理主机的策略; 《1》一般小型环境下只需要在host文件中写入主机的IP地址即可; 《2》中大型环境就需要使用静态inventory或者动态主机清单来生所需要执行的目标主机。

2.2、Ansible的任务执行模式

序号 Ansible的任务执行模式 说明
1 命令行模式 是单个模块,单条命令的批量执行【常用于测试环境】。
2 playbook 可以理解为面向对象编程(即:可以将多个想要执行的任务放到一个剧本(playbook)中,当然多个任务在事务逻辑上最好是有上下联系的,通过多个任务可以完成一个总体的目标)【常用于线上生产环境】

三、Ansible的主机和组配置

3.1、简单的主机和组

ansible的配置文件在【/etc/ansible】目录下,主要有【ansible.cfg】【hosts】文件;本文重点讲解主机与组定义文件【/etc/ansible/hosts】:

bash 复制代码
#1-中括号中的名字表示组名,可根据需求将庞大的主机分为具有标识的组(如:webservers、dbservers)
#2-主机(hosts)部分可以使用域名、主机名、IP地址表示(在使用域名、主机名时需要该主机能够反解析出相应的IP地址,通常此类配置中多使用IP地址)
#3-未分组的机器需要直接保留在hosts的顶部
coffeemilk.blog.csdn.net
[webservers]
ck.net
ck2.net

[dbservers]
db.ck.net
db.ck2.net

3.2、指定主机范围

可在【/etc/ansible/hosts】文件中,指定主机的范围:

bash 复制代码
[webservers]
www[01:60].ck.net

[dbservers]
db[a:h].ck.net

3.3、主机变量

序号 Hosts常用到的变量 说明
1 ansible_ssh_host 指定被管理主机的真实IP
2 ansible_ssh_port 指定连接到被管理主机的ssh端口号(默认是22)
3 ansible_ssh_user ssh连接时默认使用到的用户名
4 ansible_ssh_pass ssh连接时用户对应的密码
5 ansible_sudo_pass 使用sudo连接时用户对应的密码
6 ansible_sudo_exec 若sudo命令不在默认路径,则需要指定sudo命令路径
7 ansible_ssh_private_key_file 秘钥文件路径(秘钥文件若不想使用ssh-agent管理时可以使用该选项)
8 ansible_shell_type 目标系统的shell类型(默认是sh)
9 ansible_connection SSH连接的类型【local】【ssh】【paramiko】(在ansible1.2之前默认是paramiko、后来智能选择,优先使用基于controlpersist的ssh)
10 ansible_python_interpreter 用来指定python解释器的路径,默认是【/usr/bin/python】;同样也可用来指定ruby、perl的路径
11 ansible_*_interpreter 其他解释器路径,用法与ansible_python_interpreter类似;这里的*可以是ruby或perl等其他语言
bash 复制代码
[webservers]
  192.168.1.36 http_port=80
  192.168.1.37 http_port=80

#还可以修改为如下:
[webservers]
  192.168.1.36
  192.168.1.37
[webservers:vars]
  http_port=80

3.4、主机组变量

bash 复制代码
#主机组可以包含主机组,主机的变量可以通过继承关系,继承到最高等级的组的变量【定义主机组之间的继承关系使用【:children】来表示】
[webhost]
host1
host2

[dbhost]
host2
host3

[allhosts:children]
webhost
dbhost

3.5、主机的默认配置

【/etc/ansible/ansible.cfg】文件中定义了ansible的主机的默认配置部分(如:默认是否需要输入密码、是否开启sudo认证、action_plugins插件的位置、hosts主机组的位置、是否开启log功能、默认端口、key文件位置等等)。

序号 Ansible主机的默认配置 说明
1 #inventory = /etc/ansible/hosts 表示资源清单inventory文件的位置,资源清单就是一些Ansible需要连接管理的主机列表
2 #library = /usr/share/my_modules/ Ansible的操作动作,无论是本地或远程,都使用一小段代码来执行,这小段代码称为模块,这个library参数就是指向存放Ansible模块的目录
3 #module_utils = /usr/share/my_module_utils/
4 #remote_tmp = ~/.ansible/tmp 指定远程执行的路径
5 #local_tmp = ~/.ansible/tmp ansible管理节点的执行路径
6 #forks = 5 默认情况下Ansible最多能有多少个进程同时工作,默认设置最多5个进程并行处理。具体需要设置多少个,可以根据控制主机的性能和被管理节点的数量来确定。
7 #poll_interval = 15 轮询间隔
8 #sudo_user = root sudo使用的默认用户 (默认是root)
9 #ask_sudo_pass = True 是否需要用户输入sudo密码
10 #ask_pass = True 是否需要用户输入连接密码
11 #remote_port = 22 指定连接对端节点的管理端口,默认是22,除非设置了特殊的SSH端口,不然这个参数一般是不需要修改的
12 #module_lang = C 默认模块和系统之间通信的计算机语言(默认是C语言)
13 host_key_checking = False 跳过ssh首次连接提示验证部分,False表示跳过。
14 #timeout = 10 连接超时时间
15 #module_name = command 指定ansible默认的执行模块
16 #nocolor = 1 默认ansible会为输出结果加上颜色,用来更好的区分状态信息和失败信息。 如果你想关闭这一功能,可以把'nocolor'设置为'1':
17 #private_key_file=/path/to/file.pem 在使用ssh公钥私钥登录系统时候,使用的密钥路径。
相关推荐
我爱学习好爱好爱2 小时前
Ansible Playbook介绍 playbook的编写要求 playbook多任务案例
linux·运维·ansible
我爱学习好爱好爱2 小时前
Ansible 常用模块详解:firewalld、setup实战
linux·运维·ansible
我科绝伦(Huanhuan Zhou)2 小时前
MySQL数据库备份管理系统新增备份任务巡检功能
运维·数据库·mysql
奇树谦2 小时前
Ubuntu 24 常用截图工具一键安装脚本+自定义快捷键配置指南
linux·运维·ubuntu
吕司2 小时前
Linux的ELF文件与虚拟地址空间
linux·运维·服务器
SPC的存折2 小时前
4、Ansible之Playbook变量应用
linux·前端·chrome·ansible
biubiubiu07062 小时前
Ubuntu 22.04 中 cron 和 systemd timer 的区别与使用
linux·运维·ubuntu
hhzz2 小时前
Openclaw案例之构建《全自动化、高适配、可定制”的AI绘画生产体系》
人工智能·ai作画·自动化·openclaw
Agent产品评测局2 小时前
医药行业合规自动化平台选型,核心要点详解:企业级智能体驱动的合规化演进与实测分析
运维·网络·人工智能·ai·chatgpt·自动化