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公钥私钥登录系统时候,使用的密钥路径。
相关推荐
SelectDB10 小时前
Litefuse 开源并推出单进程轻量模式,25 秒就能跑起来的 Agent 可观测与评估平台
运维·后端·自动化运维
XIAOHEZIcode2 天前
Linux系统鼠标偏移常见原因以及修复方案
linux·运维·游戏
用户0328472220702 天前
如何搭建本地yum源(上)
运维
大树885 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠5 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质5 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
Inhand陈工5 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
酣大智6 天前
ARP代理--工作原理
运维·网络·arp·arp代理
shushangyun_6 天前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化
施努卡机器视觉6 天前
SNK施努卡侧滑门锁上滑轮总成自动化装配线,从零件到组件,全流程精密制造方案
运维·自动化·制造