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

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:存放角色的元数据,如依赖和作者信息。

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

相关文章:

  • pdf拆分,pdf拆分在线使用,pdf拆分多个pdf
  • 主干网络篇 | YOLOv5/v7 更换骨干网络之 MobileNetV3 | 基于神经网络搜索的轻量级网络
  • Ubuntu20.04安装vimplus插件
  • 多任务学习和迁移学习的原理
  • Windows传统DOS路径有效性检测(资源篇)
  • 服务器是否稳定怎么看
  • 将excel表格转换为element table(上)
  • springcloud-gateway 路由加载流程
  • 获取目标机器的ssh反弹权限后,如何通过一台公网服务器的服务 jar 包进行偷梁换柱植入目录进行钓鱼,从而获取目标使用人的终端设备权限和个人信息?
  • 记因hive配置文件参数运用不当导致 sqoop MySQL导入数据到hive 失败的案例
  • MySQL 基础概念
  • 编写动态库
  • YOLOv8 的简介 及C#中如何简单应用YOLOv8
  • 《深入浅出MySQL:数据库开发、优化与管理维护(第3版)》
  • 二刷 动态规划
  • 网络传输文件的问题
  • hexo+github搭建个人博客
  • 【跃迁之路】【444天】程序员高效学习方法论探索系列(实验阶段201-2018.04.25)...
  • 〔开发系列〕一次关于小程序开发的深度总结
  • Akka系列(七):Actor持久化之Akka persistence
  • Consul Config 使用Git做版本控制的实现
  • CSS实用技巧
  • gf框架之分页模块(五) - 自定义分页
  • java架构面试锦集:开源框架+并发+数据结构+大企必备面试题
  • JS实现简单的MVC模式开发小游戏
  • LeetCode刷题——29. Divide Two Integers(Part 1靠自己)
  • Nginx 通过 Lua + Redis 实现动态封禁 IP
  • PAT A1050
  • Python - 闭包Closure
  • springMvc学习笔记(2)
  • weex踩坑之旅第一弹 ~ 搭建具有入口文件的weex脚手架
  • 案例分享〡三拾众筹持续交付开发流程支撑创新业务
  • 工程优化暨babel升级小记
  • 使用Tinker来调试Laravel应用程序的数据以及使用Tinker一些总结
  • 腾讯大梁:DevOps最后一棒,有效构建海量运营的持续反馈能力
  • 一道闭包题引发的思考
  • 3月7日云栖精选夜读 | RSA 2019安全大会:企业资产管理成行业新风向标,云上安全占绝对优势 ...
  • CMake 入门1/5:基于阿里云 ECS搭建体验环境
  • Spring第一个helloWorld
  • ​3ds Max插件CG MAGIC图形板块为您提升线条效率!
  • # linux 中使用 visudo 命令,怎么保存退出?
  • #git 撤消对文件的更改
  • #LLM入门|Prompt#1.8_聊天机器人_Chatbot
  • (1)Map集合 (2)异常机制 (3)File类 (4)I/O流
  • (2020)Java后端开发----(面试题和笔试题)
  • (附源码)apringboot计算机专业大学生就业指南 毕业设计061355
  • (附源码)spring boot儿童教育管理系统 毕业设计 281442
  • (附源码)ssm考试题库管理系统 毕业设计 069043
  • (几何:六边形面积)编写程序,提示用户输入六边形的边长,然后显示它的面积。
  • (四)搭建容器云管理平台笔记—安装ETCD(不使用证书)
  • (一)Docker基本介绍
  • (一)Spring Cloud 直击微服务作用、架构应用、hystrix降级
  • (转)德国人的记事本
  • (轉貼) VS2005 快捷键 (初級) (.NET) (Visual Studio)
  • .Net 访问电子邮箱-LumiSoft.Net,好用