当前位置: 首页 > news >正文

Ansible 使用说明

目录

    • Ansible 框架介绍
      • 1、Ansible 框架特点
      • 2、Ansible 工作流程
      • 3、ansible 安装方式
    • Ansible 配置管理
      • 1、配置读取顺序
      • 2、常见的配置项
    • Ansible 主机清单
      • 1、主机清单文件结构
      • 2、主机清单常用变量
    • Ansible 剧本介绍
      • 1、剧本的结构和特点
      • 2、单个 Play 的结构
      • 3、单个 tasks 的结构
    • Ansible 常用命令
      • 1、ansible 命令
      • 2、Ansible-playbook
    • Ansible 常用模块
      • 1、command 模块
      • 2、shell 模块
      • 3、systemd 模块
      • 4、replace 模块

Ansible 框架介绍

Ansible 是通过Python开发的一个简单好用的自动化运维工具,可以实现对成百上千个主机进行统一管理,实现相关流程的自动化。

  • Ansible 官网地址:www.ansible.com
  • Ansible 中文手册:https://ansible-tran.readthedocs.io

1、Ansible 框架特点

  1. 基于 SSH 无代理机制工作,被控端不需要安装任何额外软件或服务,只需要保证被控端安装并开启SSH服务且有 Python环境即可。
  2. Ansible 只是一个框架,是通过调用模块实现具体功能,Ansible提供了上千个模块,可以实现常见的自动化运维功能。

2、Ansible 工作流程

  1. 首先Ansible会解析具体的任务列表,获取需要对哪些受控节点操作,以及每个具体的任务使用哪个模块实现。
  2. 然后Ansible会在一个名为主机清单的文件中查找对应受控节点的SSH连接信息,并建立SSH连接。
  3. 具体的任务会被指定的模块生成临时的Python代码或命令,并通过 SSH 拷贝到远程主机执行,并在执行后自动清理。
  4. 等到执行完成后,会将执行结果(成功、失败、是否变更)通过 JSON 格式回传给控制节点,并输出到控制台。

3、ansible 安装方式

  • 方式一:通过包管理工具进行安装,例如apt、yum等。会自动下载并安装Ansible所需的依赖。
  • 方式二:以模块的方式安装在当前的Python环境中,这种方式能安装较新的Ansible版本。

两种方式使用上是没有区别的,任选其一即可

Ansible 配置管理

1、配置读取顺序

优先级路径说明
最高./ansible.cfg会在执行命令的当前目录下寻找是否存在名为ansible.cfg的文件
次高~/.ansible.cfg会在当前用户家目录下寻找是否存在名为ansible.cfg的文件
最低/etc/ansible/ansible.cfg如果前面两个都没找到,就匹配/etc/ansible下的ansible.cfg

查看当前使用的配置文件路径:ansible --version

2、常见的配置项

Ansible 配置文件采用 INI 格式,即[section] + key=value 结构,常见的一些配置项如下:

[defaults] 配置块

  • 配置块作用:默认配置项,定义一些默认参数选项。
  • 常见配置项:
# 默认配置部分
[defaults]
inventory         = /etc/ansible/hosts     # 指定主机清单(Inventory)文件路径
remote_user       = root                   # 如果不指定用户名,默认使用该用户进行远程SSH连接
ask_pass          = false                  # 设置为 false 表示默认不主动提示你输入 SSH 登录密码。
host_key_checking = False                  # 是否需要检查指纹(known_hosts),要设置为False,适合自动化场景
log_path = /var/log/ansible.log            # Ansible的日志路径(需手动创建该文件)
timeout = 10                               # SSH 连接超时时间,默认即可。
forks = 10                                 # 并发处理的主机数,即如果需要处理若干个主机,能同时处理的数量。
private_key_file = ~/.ssh/id_rsa           # 如果采用私钥连接,不指定私钥路径时,使用该私钥进行连接

[privilege_escalation] 配置块

  • 配置块作用:和提权有关的设置项,所谓提权就是以指定用户身份执行某些操作。例如:sudo
  • 常见配置项:
[privilege_escalation]
become = true            # 是否默认启用 sudo 提权
become_method = sudo     # 提权方式(如:sudo、su、pbrun 等)
become_user = root       # 要切换的用户,默认是 root
become_ask_pass = false	 # 是否提示输入 sudo 密码

[ssh_connection] 配置块

  • 配置块作用:SSH 连接行为配置
  • 常见配置项:
pipelining	     # 是否启用 pipelining 模式,减少 SSH 连接次数,提高性能
ssh_args	     # 额外 SSH 参数(如 -C 启用压缩)
control_path	 # SSH 连接复用时的控制路径模板
control_persist	 # 控制连接保持时间
scp_if_ssh	     # 当使用 SSH 复制文件时是否使用 scp 或 sftp

Ansible 主机清单

Ansible 的主机清单中记录了需要管理的服务器列表,一般主机清单采用 INI 格式进行编写。

主机清单默认路径:/etc/ansible/hosts

1、主机清单文件结构

  1. 使用 [section] 声明主机组,每个组内可列出一个或多个 IP 地址或主机名。
  2. 每个主机还可以通过 变量(Vars) 指定连接信息,如用户名、端口、密码等。
  3. 可以通过IP地址扩展的语法来简化批量指定 IP 地址。范围语法为 [起始:结束],中间不能有空格;

2、主机清单常用变量

变量名说明
ansible_host指定目标主机的实际 IP 地址或主机名
ansible_userSSH 连接使用的远程用户名
ansible_ssh_passSSH 登录密码
ansible_portSSH 连接端口,不指定默认 22
ansible_ssh_private_key_file指定 SSH 私钥路径,用于密钥认证
ansible_become是否启用权限提升(例如 sudo)

例如:指定主机清单的时候,使用公共变量指定主机清单,这样可以简化操作。

[dev]
10.0.28.7
10.0.28.10

[test]
10.0.0.127
10.0.0.135

# [all:vars] 表示对所有组生效的公共变量配置。
[all:vars]
ansible_user=root
ansible_password=Mima@2024

例如:通过IP 扩展语法来批量指定 IP 地址

[test]
10.0.[0:3].[2:254] ansible_user=ehigh ansible_ssh_pass=Abc123

Ansible 剧本介绍

Ansible 中的剧本(Playbook)是采用 YAML 格式编写的脚本,能够描述一组自动化操作。一个剧本由一个或多个“剧”(Play)组成,每个 Play 指定一组主机及要在这些主机上执行的任务,从而实现远程主机的批量配置与管理。

1、剧本的结构和特点

  • 剧本本身是一个 YAML 列表(即以 - 开头),其中的每个元素就是一个 Play。
  • 每个 Play 是一个字典,用于定义在哪些主机上执行哪些任务。

2、单个 Play 的结构

  • 必须字段(最小结构):
字段说明
hosts指定目标主机或主机组
tasks定义要执行的任务列表(tasks 是一个列表)

说明:这两个字段缺一不可,缺了 Playbook 就无法执行。

  • 可选字段:
字段类型说明
name字符串为 Play 命名,提升可读性和日志信息
become布尔是否使用 sudo 权限执行(通常设置为 yes
vars字典为该 Play 定义变量
roles列表引用已定义的角色,适合模块化管理
handlers列表定义“触发式任务”,通常与 notify 配合使用
gather_facts布尔是否收集目标主机的硬件/系统信息(默认为 true

3、单个 tasks 的结构

每个 task 是一个字典,其中必须包含一个模块,模块名直接作为 task 的一个键出现,键的值是该模块所需的参数,也是一个字典。

- hosts: all
  tasks:
    - name: 测试连接
      ping:  # ping 就是模块名

说明:一个tasks中有且仅有一个模块

例如:批量初始化操作系统环境的剧本

- name: 初始化部署环境
  hosts: test # 只对test这个主机组的主机操作
  vars: # 定义变量
    tarball_name: DeploySystem-Kylin-V10-offline_v1.9.2_V6.3.1.tar.gz
    tarball_dest: /root
    install_dir: /root/DeploySystem-Kylin-V10-offline_v1.9.2_V6.3.1

 # 具体的任务定义
  tasks:
    - name: 1.永久禁用SELinux
       replace: # 使用 replace 模块实现
        path: /etc/selinux/config
        regexp: '^SELINUX=.*'
        replace: 'SELINUX=disabled'
	
    - name: 2.关闭当前 SELinux(临时)
      command: setenforce 0  # 使用 command 模块实现
      ignore_errors: yes  # 如果selinux本来就是关闭的,不设置这个可能会报错停止

    - name: 3.停止firewalld.service
      systemd: # 使用 systemd 模块实现
        name: firewalld
        state: stopped
        enabled: no

    - name: 4.上传本地离线安装包到指定主机
      copy: # 使用 copy 模块实现
        src: ./DeploySystem-Kylin-V10-offline_v1.9.2_V6.3.1.tar.gz
        dest: "{{ tarball_dest }}/"
        mode: '0644'

    - name: 4.解压安装包
      unarchive: # 使用 unarchive 模块实现
        src: "{{ tarball_dest }}/{{ tarball_name }}"
        dest: "{{ tarball_dest }}"
        remote_src: yes  # 告诉 Ansible:src 指定的文件已经在远程主机上,不需要从控制节点上传。

    - name: 5. 执行 install.sh 脚本
      command: bash "{{ install_dir }}/install.sh"

Ansible 常用命令

1、ansible 命令

ansible 命令用于 ad-hoc 模式,即临时命令执行,适合一条命令搞定的任务

语法格式

ansible <主机组> -m <模块名> -a "<模块参数>"

说明:ansible默认会从配置文件指定的主机清单中读取指定主机组下的主机信息

常用参数

  • 基本选项:
参数说明
-i <inventory>手动指定主机清单文件,不用默认的( /etc/ansible/hosts
-m <模块名>指定要使用的模块,如 pingshellcopy
-a "<参数>"指定需要给模块传的参数信息,多个参数之间使用空格分隔
  • 调试参数:
参数说明
--check加上这个参数后,不会真正执行更改,而是执行“试运行”
-v, -vv, -vvv设置详细输出级别(调试用)
  • 安全参数:
参数说明
--limit <主机>限定只对某些主机执行(支持主机名、IP、通配符)

例如

ansible test  -m ping

2、Ansible-playbook

Ansible 的playbook 模式,需要提前先写好YAML格式的剧本文件,然后使用ansible-playbook命令来解析剧本并执行。

语法格式

ansible-playbook [选项] playbook.yml

常用参数

  • 基础参数:
选项说明
--syntax-check检查 Playbook 语法是否正确
--list-tasks列出将要执行的所有任务(不执行)
--list-hosts列出将会受影响的主机
  • 调试参数:
选项说明
--check试运行,不实际变更目标主机(dry-run 模式)
-v / -vv / -vvv / -vvvv设置输出的详细程度(调试用)

例如

ansible-playbook  KylinV10_init.yaml

Ansible 常用模块

通过 ansible-doc 模块名称 就可以列出Ansible指定模块的使用方法了。

1、command 模块

  • 模块作用:在目标主机上执行命令,不支持shell的一些例如管道符、重定向、变量等特性。
  • 模块特点:会直接调用你写的命令程序,而不是先用shell来解析命令字符串,也就是会直接指定的命令字符串分割成一个程序名和参数

说明:使用 command 模块时,推荐使用命令的绝对路径,这样可以避免因为远程主机环境不同、$PATH 配置不一致而导致命令无法找到的问题。

例如:这样写就会解析失败

tasks: 
- name: 使用 command 模块
  command: echo hello > /tmp/hello.txt
  
# 会被解析为 ["echo", "hello", ">", "/tmp/hello.txt"]

2、shell 模块

  • 模块作用:功能和command类似,都是在远程主机上执行命令,但是shell模块支持 完整的 shell 语法特性
  • 模块特点:会将写的命令作为一整个字符串,交给远程主机的 shell(默认是 /bin/sh)来执行
  • 常用参数:通过 args 这个键来指定常用参数,这个键的值是一个字典,所以如果存在多个参数,这些参数以键值对的形式出现。
参数说明
chdir先进入某个目录再执行命令
creates如果指定文件已存在,则不执行该命令
removes如果指定文件不存在,则不执行该命令
executable指定用哪个 shell 来执行,默认是 /bin/sh

3、systemd 模块

  • 模块作用: 专门用来管理 systemd 服务的模块,相当于在远程主机上运行 systemctl 命令
  • 模块特点:参数不能写在 args 键下,必须直接写在 systemd 模块下面
  • 常用参数:
参数类型说明
name字符串必填,服务名,例如 nginxsshd
state字符串如何管理服务,startedstoppedrestartedreloaded
enabled布尔值是否设置为开机自动启动
masked布尔值是否 mask 服务(禁止启动)
daemon_reload布尔值是否执行 systemctl daemon-reexec,通常在 service 文件变更后使用

例如:启动NGINX服务

- name: 启动 nginx 服务
  systemd:
    name: nginx
    state: started
    enabled: yes

4、replace 模块

  • 模块作用:在远程主机上的文本文件中查找并替换内容
  • 模块特点:可以理解为就是结构化的 sed -i 命令,但是replace模块支持普通正则和扩展正则。
  • 常用参数:
参数类型说明
path字符串必须有,要修改的目标文件路径
regexp字符串(正则)必须有,要匹配的正则表达式
replace字符串必须有,用于替换的新文本(支持反向引用)
backup布尔值是否在替换前创建 .bak 备份文件
after字符串只在匹配该行之后开始替换(可选)
before字符串只在匹配该行之前进行替换(可选)

例如:禁用SeLinux

- name: 1.永久禁用SELinux
    replace: # 使用 replace 模块实现
    path: /etc/selinux/config
    regexp: '^SELINUX=.*'
    replace: 'SELINUX=disabled'

相关文章:

  • 光储充智能协调控制系统的设计与应用研究
  • SQL注入(SQL Injection)深度解析
  • spark- core
  • 全域数字化:从“智慧城市”到“数字生命体”的进化之路
  • 如何避免无效成本拖垮项目
  • JVM高阶架构:并发模型×黑科技×未来趋势解析
  • 介绍一下 ChibiOS
  • 用excel做九乘九乘法表
  • Linux网络之DNS域名解析服务
  • 使用POCO库进行ZIP压缩和解压
  • VSCode CLine 插件自定义配置使用 Claude 3.7 模型进行 AI 开发
  • 深入理解 Linux PATH 环境变量:配置与优化!!!
  • Crossmint 与 Walrus 合作,将协议集成至其跨链铸造 API 中
  • WPF ObjectDataProvider
  • Dify插件安装与使用教程
  • 基于SSM框架的房屋租赁小程序开发与实现
  • OpengGL教程(七)---摄像机
  • 在Ubuntu服务器上安装Docker(支持Ubuntu 20.04/22.04等版本):
  • 道路运输安全员岗位事项有哪些?
  • HBuilderX中uni-app打包Android(apk)全流程超详细打包
  • 网站地图怎么添加/校园推广方案
  • 网站的外链是怎么做的/google搜索关键词
  • 基于dw的动物网站设计论文/百度广告投放平台
  • 分销网站方案/淘宝seo搜索引擎优化
  • 上海骏域网站建设专家/seo手机优化软件哪个好用
  • html网站开发教程/百度权重等级