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

2、shell模块

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

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

3、copy模块

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

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

4、hostname模块

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

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

5、yum模块

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

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

6、service模块

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

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

7、user模块

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

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

六、Playbook配置文件

1、执行配置文件

说明

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

描述

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

示例
---
- name: Install and configure Apachehosts: webserversbecome: yestasks:- name: Install Apacheyum:name: httpdstate: presentnotify: - start apache- name: Start Apacheservice:name: httpdstate: startedhandlers:- name: start apacheservice:name: httpdstate: 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 Apachehosts: webserversbecome: yestasks:- name: Install Apacheyum:name: httpdstate: presentnotify:- Restart Apachehandlers:- name: Restart Apacheservice:name: httpdstate: 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.mzph.cn/web/36550.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

正版软件 | R-Studio Corporate:企业级数据恢复的终极解决方案

数据是企业的生命线&#xff0c;而数据丢失可能随时威胁到企业的正常运营。R-Studio Corporate 是一款专为企业环境设计的多功能数据恢复软件&#xff0c;确保您在面临数据危机时&#xff0c;能够迅速、高效地恢复宝贵数据。 跨平台操作&#xff0c;灵活恢复 R-Studio Corporat…

从灵感到实践:Kimi辅助完成学术论文选题的文艺之旅

学境思源&#xff0c;一键生成论文初稿&#xff1a; AcademicIdeas - 学境思源AI论文写作 昨天我们为大家介绍了ChatGPT辅助完成实现设计&#xff08;AI与学术的交响&#xff1a;ChatGPT辅助下的实验设计新篇章&#xff09;。今天我们再来看看Kimi对于论文选题都能提供哪些帮助…

【一生一芯】笔记

文章目录 一级目录二级目录三级目录缓存的验证 一级目录 二级目录 三级目录 缓存的验证

阿里云 CosyVoice 语音合成大模型 API 实践

前言 最近大模型这么火&#xff0c;就想着玩一下&#xff0c;作为非 AI 从业者&#xff0c;最好的方式就是调用云服务的 API 来构建自己的 AI 应用。首选当然是国外的 ChatGPT API&#xff0c;但是说实话那个玩意有点贵&#xff0c;而且最近国内也被封禁不让调用了&#xff0c…

计算机毕业设计hadoop+spark+hive知识图谱酒店推荐系统 酒店数据分析可视化大屏 酒店爬虫 高德地图API 酒店预测系统 大数据毕业设计

酒店推荐系统开题报告 一、研究背景与意义 随着旅游业的蓬勃发展和人们生活水平的提高&#xff0c;酒店行业迎来了前所未有的发展机遇。然而&#xff0c;面对众多的酒店选择&#xff0c;消费者往往难以在短时间内找到最适合自己需求和预算的酒店。因此&#xff0c;开发一款高…

晋级国赛!卓翼飞思技术引领,助力辽宁赛区机器人及人工智能大赛圆满收官

近日&#xff0c;第二十六届中国机器人及人工智能大赛—辽宁赛区选拔赛在大连海事大学圆满收官。本次大赛吸引来自辽宁工业大学、大连理工大学等知名高校的10余支队伍参与&#xff0c;充分展现各高校在机器人及人工智能领域的深厚实力和创新精神。其中&#xff0c;由卓翼飞思实…

【排序算法】—— 希尔排序

目录 一、希尔排序原理 二、希尔排序的思路 三、希尔排序为什么快 四、如何取增量 五、源码 希尔排序是简单插入排序的一种升级版&#xff0c;它也是用了插入的思想&#xff0c;而插入排序相比冒泡排序和选择排序的效率要高的多&#xff0c;再将它优化为希尔排序后效率跟原…

深度解析华为仓颉语言

什么是华为仓颉语言&#xff1f; 华为仓颉语言&#xff08;Huawei Cangjie Language&#xff0c;HCL&#xff09;是华为公司推出的一种新型编程语言&#xff0c;旨在解决大规模分布式系统开发中的复杂性问题。仓颉语言以高效、简洁和易用为设计目标&#xff0c;特别适用于云计…

51单片机STC89C52RC——12.1 数据存储芯片AT24C02

目的/效果 利用存储芯片AT24C02存储数据&#xff0c;LCD1602显示存储的数据。 一&#xff0c;STC单片机模块 二&#xff0c;AT24C02存储芯片 2.1 介绍 AT24C02是一个2K位串行CMOS E2PROM&#xff0c;内部含有256个8位字节&#xff0c;采用先进CMOS技术实质上减少了器件的功…

通讯录管理系统——查找联系人

功能描述&#xff1a;按照姓名查看指定联系人的信息 查看联系人实现步骤 1.封装查找联系人函数 2.测试查找指定联系人 一、封装查找联系人函数 实现思路&#xff1a;判断用户指定的联系人是否存在&#xff0c;如果存在&#xff0c;显示信息&#xff0c;不存在提示查无此人…

如何在FastAPI服务器中添加黑名单和白名单实现IP访问控制

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 文章内容 📒📝 添加黑名单功能步骤1:安装依赖步骤2:创建FastAPI应用步骤3:添加黑名单📝 添加白名单功能步骤1:创建白名单列表步骤2:添加白名单检查⚓️ 相关链接 ⚓️📖 介绍 📖 在现代网络应用开发中,为了增强…

C++【引用】

P. S.&#xff1a;以下代码均在VS2019环境下测试&#xff0c;不代表所有编译器均可通过。 P. S.&#xff1a;测试代码均未展示头文件stdio.h的声明&#xff0c;使用时请自行添加。 博主主页&#xff1a;LiUEEEEE                        …

进程间通信简介-I.MX6U嵌入式Linux C应用编程学习笔记基于正点原子阿尔法开发板

进程间通信简介 进程间通信简介 进程间进程简称IPC(interprocess communication)&#xff0c;进程间通信就是在不同进程之间传递信息或交换信息 进程间通信的目的 数据传输&#xff1a;一个进程需要将它的数据发送给另一个进程 资源共享&#xff1a;多个进程之间共享同样的…

武汉星起航:一站式服务,助力亚马逊卖家高效运营,实现收益飞跃

在跨境电商的浪潮中&#xff0c;武汉星起航电子商务有限公司以其独特的一站式跨境电商服务&#xff0c;为众多亚马逊卖家提供了强有力的支持&#xff0c;助力他们在不断发展的市场中脱颖而出&#xff0c;实现收益的大幅提升。 武汉星起航的一站式跨境电商服务&#xff0c;以其…

Python 爬虫:多进程,多线程爬虫<提高爬取效率>

关于多进程&#xff0c;多线程的知识&#xff0c;请自行查询资料补充 ~~~~~~~~~~~ 使用多进程&#xff1a; 在python中&#xff0c;使用多进程需要先导包&#xff1a; from threding import Threaddef work(name):for i in range(1000):print(f"我是线程&#xff1a;{n…

如何使用styled实现嵌套组件继承父组件Props以及样式定义

文章目录 前言案例举例1. 首先&#xff0c;在syled.tsx定义DemoBlock组件&#xff0c;并且使用内嵌组件2. 在页面中使用&#xff0c;传递属性 总结 前言 当使用styled-components将属性传递给嵌套组件时&#xff0c;可以通过将属性和样式定义应用于嵌套组件的父组件来实现。然…

JAVA医院绩效考核系统源码:三级公立医院绩效考核系统源码 可源码交付,支持二开

JAVA医院绩效考核系统源码&#xff1a;三级公立医院绩效考核系统源码 可源码交付&#xff0c;支持二开 医院绩效考核系统是一个集数据采集、分析、评估、反馈于一体的信息化工具&#xff0c;旨在提高医疗服务质量、优化资源配置、促进医院可持续发展。以下是对医院绩效考核系统…

Django靓号管理系统:实现Home页面

在本文中,我们将详细介绍如何在Django靓号管理系统中实现Home页面。Home页面是用户成功登录后看到的第一个页面,它应该提供一个友好的欢迎信息和系统的基本布局。 1. 更新 ​​urls.py​​ 首先,我们需要确保 ​​urls.py​​ 文件中包含了 Home 页面的 URL 配置: # url…

API接口知识小结

应用程序接口API&#xff08;Application Programming Interface&#xff09;&#xff0c;是提供特定业务输出能力、连接不同系统的一种约定。这里包括外部系统与提供服务的系统&#xff08;中后台系统&#xff09;或后台不同系统之间的交互点。包括外部接口、内部接口&#xf…

使用c++设计一个计算器

使用c设计一个简单的计算器&#xff0c;它支持不带括号的四则运算&#xff0c;计算器要满足先乘除后加减的规则 #include <iostream> #include <string> #include <vector> #include <sstream>// 定义运算符的优先级 int precedence(char op) {if (op…