Ansible自动化部署


AUTHOR:闫小雨
TIME:2024-06-26


文章目录

  • 一、Ansible简述
      • 1、使用者的四种交互方式
      • 2、Ansible工具集
      • 3、作用对象
  • 二、Ansible安装
        • 1、使用yum安装,并安装EPEL仓库
        • 2、使用pip源代码安装
        • 3、使用pip直接安装
      • 4、 创建ssh免交互登录
  • 三、Ansible配置
      • Inventory 文件
      • ansible.cfg 文件
      • 其他配置方式
  • 四、Ansible命令
      • 1、ansible
      • 2、Ansible-doc
      • 3、Ansible-palybook
      • 4、Ansible-console
  • 五、Ansible模块
      • 1、command模块
      • 2、shell模块
      • 3、copy模块
      • 4、hostname模块
      • 5、yum模块
      • 6、service模块
      • 7、user模块
  • 六、Playbook配置文件
    • 1、执行配置文件
        • 说明
        • 描述
        • 示例
        • 解释
        • 运行playbooks
    • 2、触发器
        • 说明
        • 描述
        • 示例
        • 解释
      • 3、角色
        • 说明
        • 描述
        • 示例
        • 解释


一、Ansible简述

Ansible 是一个开源的自动化工具,用于配置管理、应用部署、任务自动化和 IT 编排。它通过无代理(agentless)的方式工作,使用 SSH 连接到目标主机执行命令,并通过简单的 YAML 格式的剧本(playbooks)来定义任务。

1、使用者的四种交互方式

交互方式作用特点
CMDB存储和管理企业架构的配置信息通过CMDB组合Ansible,下发指令调用Ansible工具
publie/private通过API接口与Ansible交互使用编程语言调用Ansible API(如python,php)
Ad_Hoc命令集即时执行单次任务通过命令行直接调用Ansible工具集,适用快速执行任务
playbooks执行预先编排好的任务集使用YAML格式编写playbooks,按序完成复杂任务

2、Ansible工具集

工具描述
Ansible CLI命令行工具
Ansible Playbooks用YAML编写的自动化任务剧本
Ansible Modules执行特定任务的功能模块
Ansible Galaxy角色共享和发现平台
Ansible Tower(AWX)企业级管理和可视化工具

3、作用对象

作用对象描述
服务器Linux和Windows服务器
云实例AWS、Azure、阿里云、 Google Cloud
容器Docker 和 Kubernetes
网络设备路由器、交换机、防火墙
存储设备NAS 和 SAN 系统
应用程序Web 服务器、数据库、消息队列等
安全和合规性安全策略和合规性检查

二、Ansible安装

1、使用yum安装,并安装EPEL仓库
# 安装 EPEL 仓库
sudo yum install epel-release -y

# 安装 Ansible
sudo yum install ansible -y

#验证安装 
ansible --version

2、使用pip源代码安装
#安装python pip
yum install python3 pythom3-pip -y

#下载安装源代码  码云gitee
git clone https://gitee.com/ansible/ansible.git
#或  github
#git clone https://github.com/ansible/ansible.git
#或  gitLub
#git clone https://gitlab.com/ansible/ansible.git

#安装依赖
cd ansible
pip install -r requirements.txt

#使用devel分支 进行版本选择
#切换到稳定的发布分支,这里以 3.5 版本为例
git checkout stable-3.5  

#安装 Ansible
pip install --user .

#验证安装
ansible --version

如果以上方法都不可行,可以尝试从一个已知的备份或镜像站点下载 Ansible 的压缩包
假设从清华大学镜像站下载:wget https://mirrors.tuna.tsinghua.edu.cn/ansible/stable-3.5/ansible-3.5.1.tar.gztar -zxvf ansible-3.5.1.tar.gz

3、使用pip直接安装
#安装python pip
yum install pythom3-pip -y

#安装 Ansible
pip install --user ansible

#验证安装
ansible --version

4、 创建ssh免交互登录

1、生成ssh密钥对

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

以下两个选项可以不用跟;
-b 4096:指定生成 RSA 密钥的位数为 4096 位,比默认的 2048 位更安全
-C "your_email@example.com":通过 -C 选项添加注释,一般标识这个密钥对的用途或所有者的电子邮件地址。

2、复制公钥到远程主机

ssh-copy-id user@hostname

将生成的公钥复制到远程主机的 ~/.ssh/authorized_keys文件中 , 需要输入远程主机的密码进行确认;
如果 ssh-copy-id 命令不可用,可以手动将公钥内容复制粘贴到远程主机的 ~/.ssh/authorized_keys 文件中 ;

3、验证免密登录

ssh user@hostname

三、Ansible配置

Inventory 文件

  • 作用:用于管理和描述要管理的主机和主机组。
  • 格式:文本文件,例如:
[webservers]
web1.example.com
web2.example.com

[databases]
db1.example.com
db2.example.com

此处 [webservers] [databases] 是组名,下面列出的是具体的主机名或 IP 地址。可以根据需要组织和分组主机 ;

  • 分组:可以根据需要对主机进行组织和分组。

ansible.cfg 文件

  • 作用:Ansible 的配置文件,包含全局配置选项。
  • 示例
[defaults]
inventory = /path/to/your/inventory/file
remote_user = your_remote_user
private_key_file = /path/to/your/private/key.pem
host_key_checking = False

ansible.cfg 是 Ansible 的配置文件,可以包含全局配置选项,如默认的 Inventory 路径、SSH 连接设置、日志级别等

主要配置项

配置项描述
inventory指定 Inventory 文件的路径
remote_user指定远程主机的用户名
private_key_file指定用于 SSH 连接的私钥文件路径
host_key_checking设置为 False 可以禁用 SSH 主机密钥检查,方便自动化环境下的连接

其他配置方式

1、环境变量
可以使用 ANSIBLE_CONFIG 环境变量指定 ansible.cfg 文件的路径。
2、命令行参数
使用 -i 参数指定特定的 Inventory 文件,使用 -u 参数指定远程用户等。
例如:

#使用 Ansible 运行一个 ping 模块(用于测试主机是否可达)来测试名为 web 的主机组中所有主机的连通性;
ansible -i /etc/ansible/hosts web -m ping

#如果使用默认的Inventory文件(/etc/ansible/hosts),也可以不指定Inventory文件
ansible web -m ping

四、Ansible命令

1、ansible

说明ansible 命令是 Ansible 的主要命令行工具,用于执行 Ad-Hoc 命令和管理远程主机
描述通过 SSH 连接到远程主机,并执行指定的命令或模块

使用模板

ansible <pattern> -i <inventory> -m <module> -a '<module_arguments>' [options]

可选项

选项描述
-i 指定 Inventory 文件的路径
-m 指定要执行的 Ansible 模块
-a ‘<module_arguments>’模块的参数,使用单引号包裹参数
-u <remote_user>指定远程主机的用户名
-b在执行命令时提升为超级用户(sudo)
–private-key=<private_key_file>指定用于 SSH 连接的私钥文件
-e ‘key=value’定义额外的变量,传递给 Ansible playbook

示例

ansible webservers -i /etc/ansible/hosts -m shell -a 'uptime'

解释:上面的命令将连接到名为 webservers 的主机组中的所有主机,执行 shell 模块并运行 uptime 命令,显示每台主机的运行时间。

2、Ansible-doc

说明ansible-doc 命令用于查看 Ansible 模块的文档
描述提供对 Ansible 模块、插件以及其他 Ansible 组件的文档查看功能

使用模板

ansible-doc <module_name>

可选项: 无。
示例

ansible-doc shell

解释:上述命令将显示 shell 模块的文档,包括该模块的用法、参数说明和示例。

3、Ansible-palybook

说明ansible-playbook 命令用于运行 Ansible playbook
描述执行预定义的任务集合,通常用于自动化部署和配置管理

使用模板

ansible-playbook -i <inventory> <playbook.yml> [options]

可选项

** 选项 **** 描述 **
** -i **指定 Inventory 文件的路径
** <playbook.yml> **指定要执行的 Ansible playbook 文件
** -u <remote_user> **指定远程主机的用户名
** -e ‘key=value’ **定义额外的变量,传递给 Ansible playbook
** --private-key=<private_key_file> **指定用于 SSH 连接的私钥文件

示例

ansible-playbook -i /etc/ansible/hosts site.yml

解释:上述命令将执行名为 site.yml 的 Ansible playbook,根据 hosts 文件中的配置管理远程主机。

4、Ansible-console

说明ansible-console 命令启动 Ansible 控制台,提供交互式环境进行 Ansible 命令执行和调试
描述在控制台中执行 Ad-Hoc 命令、查看主机状态和调试任务

使用模板

ansible-console -i <inventory> [options]

可选项和描述

选项描述
-i 指定 Inventory 文件的路径
-u <remote_user>指定远程主机的用户名
–private-key=<private_key_file>指定用于 SSH 连接的私钥文件
-e ‘key=value’定义额外的变量,传递给 Ansible playbook

示例

ansible-console -i /etc/ansible/hosts

解释:上述命令将启动 Ansible 控制台,允许用户在交互式环境中执行 Ansible Ad-Hoc 命令和查看主机状态。

五、Ansible模块

1、command模块

描述: 在目标主机上执行特定的命令。
示例:

- name: Execute a command
  command: ls /path/to/directory    # 执行 ls 命令查看目录内容
可选项描述
chdir在执行命令前切换到的目录。
creates如果文件已存在,则不执行命令。
warn如果命令返回错误,是否警告而不是报错。

2、shell模块

描述: 在目标主机上以 shell 的方式执行命令。
示例:

- name: Execute a shell command
  shell: echo "Hello, World!"    # 执行 echo 命令输出文本
可选项描述
executable指定要使用的 shell 解释器。
creates如果文件已存在,则不执行命令。
warn如果命令返回错误,是否警告而不是报错。

3、copy模块

描述: 将本地文件或目录复制到目标主机。
示例:

- name: Copy a file
  copy:
    src: /path/to/local/file     # 本地文件路径
    dest: /path/on/remote/host   # 目标主机路径
可选项描述
backup是否备份目标文件。
force是否强制覆盖目标文件。
owner设置目标文件的所有者。

4、hostname模块

描述: 设置主机的主机名。
示例:

- name: Set hostname
  hostname:
    name: myserver.example.com    # 设置主机名为 myserver.example.com
可选项描述
name要设置的主机名。
use指定要用于设置主机名的工具(仅限于 Linux)。

5、yum模块

描述: 在 CentOS/RHEL 等基于 yum 的系统上安装、删除和更新软件包。
示例:

- name: Install a package
  yum:
    name: httpd                  # 要安装的软件包名称
    state: present               # 确保软件包处于安装状态
可选项描述
name要操作的软件包名称。
state软件包应该处于的状态(present、absent、latest 等)。
update_cache是否更新缓存。

6、service模块

描述: 控制系统服务的状态(启动、停止、重启)。
示例:

- name: Restart a service
  service:
    name: httpd                  # 服务名称
    state: restarted             # 重启服务
可选项描述
name要操作的服务名称。
state服务应该处于的状态(started、stopped、restarted 等)。

7、user模块

描述: 管理系统用户(创建、删除、修改)。
示例:

- name: Create a user
  user:
    name: johndoe                # 用户名
    state: present               # 确保用户存在
    groups: wheel                # 将用户添加到 wheel 组
可选项描述
name要操作的用户名。
state用户应该处于的状态(present、absent 等)。
groups将用户添加到的组。

六、Playbook配置文件

1、执行配置文件

说明

Ansible Playbook 是用 YAML 格式编写的自动化任务剧本,用于定义一系列任务和配置步骤,以实现系统配置、部署和管理。

描述

Playbook 文件通过定义任务(tasks)、变量(variables)、条件控制和处理机制来描述应用程序的自动化过程。

示例
---
- name: Install and configure Apache
  hosts: webservers
  become: yes
  tasks:
    - name: Install Apache
      yum:
        name: httpd
        state: present
      notify: 
        - start apache
    - name: Start Apache
      service:
        name: httpd
        state: started

  handlers:
    - name: start apache
      service:
        name: httpd
        state: started

解释

name:

  • Install and configure Apache:Playbook 的名称,用于描述该 Playbook 的主要任务。

hosts:

  • webservers:指定了在哪些主机上执行任务。在 Ansible 的 Inventory 文件中,通常会定义不同的主机组,这里的 webservers 可以是一个主机组的名称。

become:

  • yes:指定在执行任务时提升权限(类似于 sudo),以便安装软件和启动服务等需要特权的操作。

tasks:

  • 这部分定义了要执行的具体任务列表:
    • Install Apache:使用 yum 模块安装 httpd(Apache HTTP Server)。
      • name: httpd:指定要安装的软件包名称。
      • state: present:指定软件包应该处于的状态,这里是确保安装并存在。
      • notify:当安装成功后,会触发名为 start apache 的处理程序(handler)。
    • Start Apache:使用 service 模块启动 httpd 服务。
      • name: httpd:指定要操作的服务名称。
      • state: started:指定服务应该处于的状态,这里是启动状态。

handlers:

  • 这部分定义了处理程序(handlers),即在任务执行后触发的操作:
    • start apache:这是一个处理程序的名称。
      • service 模块用于启动 httpd 服务。
      • state: started:指定服务应该处于的状态,这里是启动状态。

运行playbooks
ansible-playbook -i /path/to/your/inventory apache.yml

2、触发器

说明

在 Ansible 中,触发器(handlers)用于在任务执行后根据需要触发额外的操作,例如重启服务或执行其他必要的配置更改。

描述

Handlers 被定义在 Playbook 文件的 handlers 部分,并通过 notify 关键字从任务中调用。

示例
---
- name: Install and configure Apache
  hosts: webservers
  become: yes
  tasks:
    - name: Install Apache
      yum:
        name: httpd
        state: present
      notify:
        - Restart Apache

  handlers:
    - name: Restart Apache
      service:
        name: httpd
        state: restarted

在上述示例中,Restart Apache 处理程序被定义为一个触发器。当 Install Apache 任务成功完成并且需要重启 Apache 服务时,Ansible 将调用 Restart Apache 处理程序来执行重启操作。

解释

回调函数

  • notify:当安装成功后,会触发名为 Restart Apache 的处理程序(handler)。

handlers:

  • 这部分定义了处理程序(handlers),即在任务执行后触发的操作:
    • Restart Apache:这是一个处理程序的名称。
      • service 模块用于管理系统服务。
      • name: httpd:指定要操作的服务名称。
      • state: restarted:指定服务应该处于的状态,这里是重启状态。

3、角色

说明

角色(Roles)是一种组织和复用 Ansible Playbook 的方法,可以将相关任务和文件结构化为可重复使用的单元。

描述

角色包含了一个或多个相关任务、变量、模板和文件,可以作为独立模块在不同的 Playbook 中引用和调用。

示例

角色的目录结构示例:

myrole/
├── tasks/
│   └── main.yml
├── handlers/
│   └── main.yml
├── templates/
├── files/
├── vars/
│   └── main.yml
├── defaults/
│   └── main.yml
├── meta/
│   └── main.yml
└── README.md

解释

tasks/main.yml:定义角色执行的主要任务。

  • handlers/main.yml:定义角色的处理程序。
  • templates/ 和 files/:存放模板和文件。
  • vars/ 和 defaults/:存放变量定义。
  • meta/main.yml:存放角色的元数据,如依赖和作者信息。

角色使得代码重用和管理变得更加简单和可维护,特别适用于复杂的自动化任务和部署流程。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/751948.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

根文件系统

根文件系统 1 介绍1.1 根文件系统介绍1.2 根文件系统目录1.3 常见的根文件系统 2 Buildroot 根文件系统的构建2.1 介绍2.2 依赖文件2.3 交叉编译工具2.4 构建2.4.1 配置 Target options2.4.2 配置 Toolchain2.4.3 配置 System configuration2.4.4 配置 Filesystem images2.4.5 …

微服务知识

传统架构 传统架构会出现的问题 配置烦琐&#xff0c;上线容易出错 加机器要重启 负载均衡单点 管理困难 CAP原则。 CAP原则是指在一个分布式系统中&#xff0c;Consistency&#xff08;一致性&#xff09;、Availability&#xff08;可用性&#xff09;、Partition Toleranc…

产品中心|高效能双处理器Xilinx FPGA 4通道射频收发板卡

1、产品概述 基于Xilinx XC7K325T芯片的4通道射频收发板卡&#xff0c;搭载高能效Cortex-A8内核处理器、1组16bit/2GB DDR3及1组4GB DDR3、 1组2GB Nand Flash、1路USB接口、4路高速ADC、4路高速DAC&#xff0c;支持外触发&#xff0c;外时钟。用于FPGA程序加载板卡工作温度范…

Zynq7000系列FPGA中的DMA控制器简介(一)

DMA控制器&#xff08;DMAC&#xff09;使用64位AXI主接口来执行与系统存储器和PL外围设备之间的DMA数据传输&#xff0c;操作频率同CPU_2x的时钟速率。传输由DMA指令执行引擎控制。DMA引擎运行在一个小指令集上&#xff0c;该指令集提供了一种灵活的指定DMA传输的方法。这种方…

激光雷达数据处理

激光雷达技术以其高精度、高效率的特点&#xff0c;已经成为地表特征获取、地形建模、环境监测等领域的重要工具。掌握激光雷达数据处理技能&#xff0c;不仅可以提升工作效率&#xff0c;还能够有效提高数据的质量和准确性&#xff0c;为决策提供可靠的数据支持。 第一章、激…

STM32_hal库学习(3)-OLED显示

硬件&#xff1a;stm32f103c8t6&#xff0c;四脚oled 四脚OLED用的是iic通讯协议&#xff0c;什么是IIC通讯协议&#xff1f;具体可看这篇文章。 stm32中IIC通讯协议-CSDN博客 既然了解了iic协议&#xff0c;接下来我们就利用stm32cubemx来配置oled。 1.新建一个工程 2.然…

愁煞了,UI设计师是闷葫芦,会干不会说,该咋办呢?

Hi&#xff0c;我是大千UI工场&#xff0c;经常有粉丝反映做好设计&#xff0c;不知道咋给客户和团队小伙伴阐述&#xff0c;传达设计里面&#xff0c;换言之就是设计师有必要提升表达能力&#xff0c;该如何提升。 UI设计师需要提升语言表达能力的原因有以下几点&#xff1a;…

科技赋能·创领未来丨智合同和百胜中国就Contract AI Studio项目达成合作

#智合同 #百胜中国 #AIGC #NLP #LLM #Contract AI Studio 近期&#xff0c;国内AIGC和LLM大语言模型发展可谓是如火如荼&#xff0c;其迅速崛起为社会和产业发展起到了非常重要的作用。人们利用AI技术&#xff08;AIGC、LLM大语言模型、NLP等&#xff09;将其赋能到企业生…

<sa8650>QCX ISP Tuning 使用详解 — Tuning前置条件

<sa8650>QCX ISP Tuning 使用详解 — Tuning前置条件 一 如何安装 Qualcomm Chromatix™ 摄像头校准工具二 如何使用 Qualcomm Chromatix™ tuning工具创建tuning项目2.1 创建工程前提依赖2.2 创建工程2.3 添加场景2.4 编辑区域触发器三 如何创建Tuning 树一 如何安装 Qualco…

ChatGPT国内中文版镜像网站整理(2024/6/25)

一、国内外模型大对比 1.交互式对话测评 用同样一个问题问文言一心3.5模型和ChatGPT3.5模型&#xff0c;以下是得到的两个结果&#xff1a; 文言一心3.5模型的回答 文言一心的这个回答显然非常愚蠢&#xff0c;虽然回答了很长一段话&#xff0c;但是“一斤土豆的重量和土豆的…

详细分析SpringBootTest中的测试类(附Demo)

目录 前言1. 基本知识2. Demo3. 实战3.1 项目测试3.2 功能测试 前言 书写测试类&#xff0c;一般只需要加入Test即可&#xff0c;但是结合Springboot项目来整体测试对应需要怎么下手 详细的Java知识点推荐阅读&#xff1a;java框架 零基础从入门到精通的学习路线 附开源项目面…

26、 MySQL数据库基础练习系列股票交易系统基础查询和复杂查询

5、基础查询 -- 1、查询用户信息仅显示姓名与手机号 SELECT username as 姓名,phone as 手机号 from users;-- 2、模糊查询和explain语句 alter table stocks add index stock_name_index(stock_name); explain SELECT * from stocks where stock_name like %东吴证券%; -- 3、…

提升自来水公司经济效益的策略研究

现阶段&#xff0c;如何提高自来水公司经济效益的问题已经得到社会的广泛关注。文章将立足于成本管理的角度&#xff0c;在对自来水公司生产现状分析的基础上&#xff0c;总结影响自来水公司经济效益的相关因素&#xff0c;最后从成本管理的角度出发&#xff0c;对如何提高自来…

企业级Windows设备日志采集工具

永久免费: 前往Gitee最新版本 更新内容 进一步提升工程师部署采集客户端效率. 打开根Url,自动跳转到部署页面.(原工程师需输入很长的Url);新增复制同类客户端同步任务功能.优化客户端分组操作;文件同步到服务器后,可配置文件名增加时间戳; 介绍 定时全量或增量采集工控机,…

字节码编程ASM之两数之和

写在前面 源码 。 看下如何使用ASM来写如下的类&#xff1a; package com.dahuyou.demo.asm;public class AsmSumOfTwo {public AsmSumOfTwo() {}public static void main(String[] var0) {int var1 (new AsmSumOfTwo()).sum(1, 2);System.out.println(var1);}public int su…

C++精解【8】

文章目录 运算,- 加减法* / 乘除法逐元 乘法逐元 除法逐元综合运算矩阵乘法与加减法 转置、共轭、伴随矩阵点乘法,叉积 运算 ,- 加减法 逐元加减法 #include <iostream> #include "e:/eigen/Eigen/Dense" using namespace std;int main() {Eigen::Matrix2d …

【源码】Spring Data JPA原理解析之Auditing执行原理

Spring Data JPA系列 1、SpringBoot集成JPA及基本使用 2、Spring Data JPA Criteria查询、部分字段查询 3、Spring Data JPA数据批量插入、批量更新真的用对了吗 4、Spring Data JPA的一对一、LazyInitializationException异常、一对多、多对多操作 5、Spring Data JPA自定…

vue + Lodop 制作可视化设计页面 实现打印设计功能(二)

历史&#xff1a; vue2 Lodop 制作可视化设计页面 实现打印设计功能&#xff08;一&#xff09; 前言&#xff1a; 之前本来打算用直接拿之前做的vue2版本改改就发的&#xff0c;但考虑到现在主流都是vue3了&#xff0c;所以从这篇文章开始使用vue3来写&#xff0c;以及最后…

Spring相关面试题(三)

29 如何在所有的BeanDefinition注册完成后&#xff0c;进行扩展 Bean工厂的后置处理器&#xff0c;在所有的Bean注册完成后&#xff0c;就被执行。 public class A implements BeanFactoryPostProcessor {private String name "a class";private B b; ​public St…

项目分层--简单图书管理系统

分层情况 实体类Book代码 //实体类 public class Book {private int id;private String name;private int bsum;public Book() {}public Book(int id, String name, int bsum) {this.id id;this.name name;this.bsum bsum;}public int getId() {return id;}public void set…