文章目录
- 一、Ansible基本概述
- 1、什么是以及特性
- 1)是什么:
- 2)功能
- 2、架构下充当的角色:
- 3、同软件对比
- Ansible与SaltStack
- *YAML的基本语法
- Ansible与其他同类软件对比
- 4、Ansible的架构组成
- 5、Ansible的执行流程
- 二、简单测试Ansible
- 1、m01安装ansible
- *1)ansible默认信息:
- 2)Ansible配置文件内容:
- 3)ansible的一些选项:
- 2、m01配置主机清单
- 0)主机清单有什么:
- 1)主机清单配置文件语法????
- 2)使用密钥连接方式来配置:
- 前提条件:
- 测试:
一、Ansible基本概述
1、什么是以及特性
1)是什么:
自动化统一配置管理工具,集成了丰富模块及功能组件,可通过一个命令完成一系列操作
2)功能
- 远程执行
- 事件驱动,对服务进行不同的事件驱动
- 管理公有云,不如saltstack
- 便于二次开发(基于Python,便于运维二次开发)
- 任务编排(通过playbook)
- 跨平台系统
2、架构下充当的角色:
作为管理机(m01)给下面的多种业务的服务器进行批量下发执行任务
3、同软件对比
Ansible与SaltStack
-
Ansible是串行执行的(一个接一个的代码执行),只通过SSH,大规模环境下执行速度慢,但它是有Python开发的,便于运维人员进行二次开发
-
Saltstack是并行的
SaltStack 和 Ansible 都是流行的配置管理和自动化工具,它们在自动化 IT
任务方面各有优势。以下是它们之间的一些关键对比点,以及为什么培训机构可能更倾向于培训 Ansible 而不是 SaltStack。
- 架构和设计
SaltStack:
- 采用了主从架构,其中 Salt Master 控制多个 Salt Minion(代理)。
- 支持实时的命令执行,适合大规模的环境。
- 使用 ZeroMQ 作为通信协议,提供快速、异步的执行方式。
Ansible:
- 采用无代理(agentless)的架构,使用 SSH 协议与远程主机通信。
- 适合中小型环境,或希望减少维护代理的需求。
- 配置和任务执行更为简单直观。
- 易用性和学习曲线
SaltStack:
- 由于其复杂的架构和多样的功能,学习曲线相对较陡。
- 配置文件和管理命令可能对新手来说较为复杂。
Ansible:
- 使用 YAML 作为配置语言,相对易于理解和编写。
- 无需在目标机器上安装额外的代理,减少了复杂性。
- 更适合快速上手和初学者。
- 社区和支持
SaltStack:
- 虽然有强大的社区,但相对于 Ansible,其社区的规模和活跃度可能较低。
- 商业支持(如 SaltStack Enterprise)也可用,但需要额外费用。
Ansible:
- 拥有非常活跃和广泛的社区支持,用户可以容易地找到资源和帮助。
- Red Hat 对 Ansible 提供了企业级支持,这进一步增强了其在商业环境中的吸引力。
- 功能和扩展性
SaltStack:
- 提供强大的实时执行功能和扩展性。
- 更适合需要高实时性和复杂配置管理的环境。
Ansible:
- 提供了强大的模块和插件系统,适合多种环境。
- 对于配置管理和任务自动化,功能也相当全面,但在实时性方面可能不如 SaltStack。
为什么培训机构更倾向于培训 Ansible?
易用性:Ansible 的无代理架构和简单的 YAML 配置语言使其更容易学习和使用,降低了入门难度。
广泛应用:Ansible 的流行程度高,许多公司使用 Ansible 进行自动化操作,因此掌握 Ansible 对求职者更有利。
社区支持:Ansible 拥有广泛的社区支持和丰富的在线资源,学习者可以更容易找到解决方案和帮助。
企业支持:Red Hat 对 Ansible 的支持提升了其在企业环境中的可信度,企业对 Ansible 的需求也促使培训机构优先考虑 Ansible。
综上所述,Ansible 的易用性、广泛的社区支持以及企业级支持使其成为培训机构更倾向于培训的工具。而 SaltStack
的强大功能和复杂性可能需要更多的专门培训和资源,这对于许多培训机构来说可能是一个挑战。
*YAML的基本语法
YAML(YAML Ain’t Markup
Language)是一种简洁的标记语言,用于数据序列化,常用于配置文件和数据交换。其语法设计简洁易读,下面是 YAML
的基本语法规则和一些示例:一. 基础语法
- 缩进:YAML 使用缩进来表示层级关系,通常使用两个空格作为缩进(不推荐使用制表符)。
- 键值对:键和值之间用冒号和空格分隔,例如:
key: value
。- 列表:用连字符(
-
)表示列表项,例如:
- item1
- item2
二. 基本示例
键值对
name: John Doe
age: 30
is_student: false
列表
fruits:
- Apple
- Orange
- Banana
字典
person:
name: Jane Doe
age: 25
address:
street: 123 Elm St
city: Anytown
三. 多行字符串
- 折叠式(
>
):将多行文本折叠成单行,换行符会被转换为空格。
description: >
This is a long description
that spans multiple lines.
结果为:"This is a long description that spans multiple lines."
- 保留式(
|
):保留换行符,将多行文本保留原样。
description: |
This is a long description
that spans multiple lines.
结果为:
This is a long description
that spans multiple lines.
四. 复杂数据结构
嵌套列表和字典
employees:
- name: Alice
position: Engineer
skills:
- Python
- Docker
- name: Bob
position: Designer
skills:
- Photoshop
- Illustrator
五. 注释
YAML 使用
#
来添加注释,注释可以放在行尾或单独占用一行。
name: John Doe # This is a comment
age: 30
六. 数据类型
- 整数:
age: 30
- 浮点数:
height: 1.75
- 布尔值:
is_student: true
- 空值:
middle_name: null
七. 锚点和别名
- 锚点(
&
):定义一个锚点,后续可以引用。
defaults: &defaults
color: blue
size: medium
- 别名(
*
):引用锚点。
item1:
<<: *defaults
type: T-shirt
八. 复杂结构
引用
defaults: &defaults
color: blue
size: medium
item1:
<<: *defaults
type: T-shirt
组合
store:
name: Example Store
items:
- name: Widget
price: 19.99
- name: Gizmo
price: 25.00
YAML 的语法简洁明了,易于阅读和编写。了解这些基本语法规则和示例,可以帮助你有效地使用 YAML 来编写配置文件和进行数据序列化。
Ansible与其他同类软件对比
Ansible 是一种流行的自动化工具,用于配置管理、应用部署和任务自动化。与 Ansible 类似的其他工具也提供了类似的功能,但它们在设计理念、使用方式和特性上有所不同。下面是对 Ansible 和几种同类软件的比较:
一. Ansible
-
特点:
- 声明式配置:通过 YAML 文件定义“期望的状态”。
- 无代理架构:直接通过 SSH 与目标主机通信,无需在目标主机上安装代理。
- 简易上手:语法简单明了,适合快速上手。
- 强大的社区支持:拥有丰富的模块和插件,适用于各种操作系统和应用。
-
适用场景:
- 配置管理
- 应用部署
- 多机协作
二. Chef
-
特点:
- 声明式与命令式:使用 Ruby 语言编写的“食谱”定义期望状态和操作步骤。
- 客户端-服务器架构:需要在目标主机上安装 Chef 客户端,并与 Chef 服务器通信。
- 灵活性强:支持复杂的配置逻辑,但学习曲线较陡。
-
适用场景:
- 配置管理
- 自动化基础设施管理
三. Puppet
-
特点:
- 声明式配置:使用 Puppet DSL(声明式语言)编写配置。
- 客户端-服务器架构:在目标主机上安装 Puppet 客户端,与 Puppet 服务器通信。
- 强大的功能:适合大型环境和复杂的配置管理,但配置文件语法较复杂。
-
适用场景:
- 配置管理
- 服务器管理
- 自动化任务
四. SaltStack
-
特点:
- 声明式与命令式:使用 YAML 文件和 Python 代码定义状态。
- 客户端-服务器架构与无代理架构:支持通过 SSH 或 Salt Minions 进行通信。
- 高性能:高效的并发执行,适合大规模环境。
-
适用场景:
- 配置管理
- 实时系统监控
- 自动化任务
五. Terraform
-
特点:
- 声明式配置:使用 HashiCorp Configuration Language (HCL) 定义基础设施。
- 基础设施即代码:专注于基础设施的创建、更新和管理。
- 无状态:不直接处理配置管理,但通过提供 Terraform Provider 实现资源管理。
-
适用场景:
- 云基础设施管理
- 基础设施自动化
- 跨平台资源管理
六. CFML (CloudFormation)
-
特点:
- 声明式配置:使用 JSON 或 YAML 描述 AWS 资源和配置。
- AWS 专属:专门用于管理和自动化 AWS 资源。
- 集成度高:与 AWS 服务紧密集成。
-
适用场景:
- AWS 资源管理
- 云基础设施自动化
七、比较总结
-
语言和语法:
- Ansible:YAML(易于阅读和编写)
- Chef:Ruby(功能强大但学习曲线陡)
- Puppet:Puppet DSL(功能强大,但语法较复杂)
- SaltStack:YAML 和 Python(灵活性高)
- Terraform:HCL(专注于基础设施管理)
- CFML:JSON 或 YAML(AWS 专用)
-
架构:
- 无代理:Ansible、SaltStack(支持无代理或代理)
- 客户端-服务器:Chef、Puppet
- 基础设施管理:Terraform、CFML(主要用于资源创建与管理)
-
适用场景:
- 配置管理和应用部署:Ansible、Chef、Puppet、SaltStack
- 基础设施管理:Terraform、CFML
选择合适的工具取决于你的需求,例如环境规模、所需功能、学习曲线以及现有的技术栈。
4、Ansible的架构组成
5、Ansible的执行流程
二、简单测试Ansible
1、m01安装ansible
yum install ansible
*1)ansible默认信息:
- 使用/etc/ansible/hosts作为主机清单,如果需要指定,那么使用
-i
选项
ansible -i /etc/myansible/hosts
- 使用commad模块,如果需要指定,那么使用
-m 模块名
选项
2)Ansible配置文件内容:
??????/etc/ansilbe/???.cfg
3)ansible的一些选项:
????
2、m01配置主机清单
0)主机清单有什么:
包含被管理的机器的认证信息
1)主机清单配置文件语法????
2)使用密钥连接方式来配置:
[web_group]
web01 ansible_ssh_root=172.16.1.7
web02 ansible_ssh_root=172.16.1.8
前提条件:
- 配置Ansible的机器(管理机m01)与主机清单里的机器需要实现建立密钥免密连接
- 上面的“web01”、“web02”这些名字值得指的是主机名,需要在配置Ansible的机器(管理机m01)的DNS域名解析文件中写上才能识别
#CentOS7中的
vim /etc/hosts
# 编辑/etc/hosts:
.....
172.16.1.7 web01
172.16.1.8 web02
.....
测试:
# e.g1
ansible web_group -m ping
# e.g2
ansible web01 -m ping
# e.g3
ansible 172.16.1.8 -m ping