ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

90DaysOfDevOps 配置管理全景:从 IaC 到 Ansible 的实战选型指南

90DaysOfDevOps 配置管理全景:从 IaC 到 Ansible 的实战选型指南 文档/教程【免费下载链接】90DaysOfDevOpsThis repository started out as a learning in public project for myself and has now become a structured learning map for many in the community. We have 3 years under our belt covering all things DevOps, including Principles, Processes, Tooling and Use Cases surrounding this vast topic.项目地址https://gitcode.com/gh_mirrors/90/90DaysOfDevOps点击查看免费下载配置管理Configuration Management是 DevOps 体系中连接基础设施就绪与应用运行态的关键环节当 Terraform 这类 IaC 工具完成资源创建之后正是配置管理工具负责把操作系统设置、应用软件与运行状态维持在预期状态。本文以 90DaysOfDevOps 第 63 天的内容为核心骨架系统讲解配置管理的核心概念、四大主流工具Chef、Puppet、Ansible、SaltStack的架构与优劣对比并通过仓库中 2022/Days/Configmgmt 目录下的真实 Playbook、模板与 Vagrantfile展示 Ansible 从零到一落地配置管理的完整实战路径。读完你将掌握配置管理工具的选型方法、Ansible 与 Terraform 的边界划分以及如何用 YAML Playbook 批量推送服务器配置。什么是配置管理配置管理是将应用程序、系统和服务器维持在**期望状态desired state**的过程。它紧接在基础设施即代码IaC章节之后展开与 IaC 之间存在天然的交叠IaC 的职责确保基础设施处于期望状态例如用 Terraform 创建 VM、网络与存储资源配置管理的职责在基础设施之上确保 OS 设置、应用配置与运行服务同样处于期望状态并在系统随变更演进时持续保证其按预期工作。正如 2022/ko/Days/day63.md 原文所强调的IaC尤其是 Terraform并不会去照管操作系统设置或应用的期望状态这正是配置管理工具登场的时机。配置管理最重要的价值在于——防止那些未文档化的小型或大型变更悄然发生让环境的每一次改动都可追溯、可复现。场景为什么你需要配置管理工具为了理解配置管理的价值文档引入了一个具体场景系统管理员 Dean韩文版译作철수负责环境中所有系统。当单台服务器宕机、甚至发生火灾级别的事故时Dean 凭借经验可以快速修复但当多台服务器相继故障尤其是面对大规模且持续扩张的环境时手动逐台处理的方式迅速失效。配置管理工具的价值就在这里体现Dean 只需要编写正确的代码Playbook / Recipe / Manifest把如何配置每台服务器的指令推送到目标节点就能快速、有效、规模化地完成配置工作让管理员从救火队员变成摇滚明星。四大配置管理工具横评文档给出了配置管理工具的概览图图中呈现了四款主流工具的品牌标识Chef定位通过基础设施自动化确保配置在任何环境、任何规模下都能一致地应用。技术栈OpsCode 开发的开源工具使用Ruby 与 Erlang编写。适用场景拥有异构基础设施、且正在寻找成熟解决方案的组织。核心概念Recipe 与 Cookbook 决定系统的配置代码。优点拥有大量可用的 Recipe 集合与 Git 集成良好从而获得强大的版本控制能力。缺点学习曲线陡峭需要投入相当多的时间主服务器对节点的控制权有限。架构Server / Client服务器-客户端。配置难度中等。语言范式过程式Procedural——指定如何做一项任务。Puppet定位支持自动部署的配置管理工具。技术栈使用 Ruby 构建通过DSL领域特定语言编写 Manifest清单。适用场景异构基础设施中以可扩展性为优先的环境。优点拥有大规模社区支持报告机制成熟完善。缺点高级任务需要 Ruby 语言知识主服务器对节点的控制权有限。架构Server / Client。配置难度中等。语言范式声明式Declarative——只指定做什么。Ansible定位自动化配置管理、云资源预置Cloud Provisioning、部署与编排的 IT 自动化工具。技术栈Playbook 的核心以YAML编写。适用场景希望快速上手、快速运行的环境。核心概念基于Playbook剧本向服务器下发指令。优点远程节点无需安装 AgentYAML 学习门槛低。缺点性能速度通常低于其他工具但仍快于 Dean 手工逐台操作YAML 的表达能力不及 Ruby但学习曲线更低。架构仅客户端Client Only控制节点直接通过 SSH 等协议操作。配置难度非常容易。语言范式过程式——指定如何做。SaltStack定位基于CLI的配置管理与远程执行工具。技术栈基于 Python指令以 YAML 或 SaltStack 自己的 DSL 编写。适用场景以**可扩展性与弹性resilience**为最高优先级的场景。优点上手后使用简单报告机制良好。缺点初始配置阶段较为棘手新的 Web UI 远不如其他工具成熟。架构Server / Client。配置难度中等。语言范式声明式——只指定做什么。Ansible vs Terraform边界与分工90DaysOfDevOps 本配置管理章节选定的工具是Ansible理由是它易于使用、且对语言基础要求较低。在深入工具细节之前文档专门对比了 Ansible 与 Terraform 的差异二者看似都自动化实则分工截然不同维度AnsibleTerraform类型配置管理工具编排Orchestration工具基础设施支持**可变Mutable**基础设施支持**不可变Immutable**基础设施语言过程式语言声明式语言预置能力提供部分预置VM、网络、存储提供广泛预置VM、网络、存储打包与模板对打包与模板提供完整支持对打包与模板提供部分支持生命周期管理不具备生命周期管理重度依赖生命周期与状态管理简单归纳Terraform 负责创建与销毁基础设施并维护状态Ansible 负责在现有系统上持续施加配置。二者在真实 DevOps 流水线中常常前后衔接——Terraform 拉起资源Ansible 随后把配置推到位。实战用仓库中的 Ansible 场景从零掌握配置管理第 63 天只是配置管理章节的全景导览Big Picture真正的动手实践分布在仓库的 2022/Days/Configmgmt 目录。下面从最简单的 Playbook 开始逐层深入仓库中的真实样例把 Ansible 的机制讲透。1. 最小可运行 Playbook本地连接与变量输出simple_play.yml 是最直观的入门示例- name: Simple Play hosts: localhost connection: local tasks: - name: Ping me ping: - name: print os debug: msg: {{ ansible_os_family }}hosts: localhost表示目标主机为本地connection: local指定本地连接方式无需 SSHping:模块验证控制端与目标是否可达debug:模块配合{{ ansible_os_family }}输出系统家族变量——这是 AnsibleFacts 机制目标节点自动采集的系统信息的最初体验。2. 首个真实场景模板、变量与 Handleransible-scenario1/playbook1.yml 展示了 Playbook 的完整骨架- hosts: webservers become: yes vars: http_port: 8000 https_port: 4443 html_welcome_msg: Hello 90DaysOfDevOps tasks: - name: ensure apache is at the latest version apt: name: apache2 state: latest - name: write the apache2 ports.conf config file template: src: templates/ports.conf.j2 dest: /etc/apache2/ports.conf notify: - restart apache - name: write a basic index.html file template: src: templates/index.html.j2 dest: /var/www/html/index.html notify: - restart apache - name: ensure apache is running service: name: apache2 state: started handlers: - name: restart apache service: name: apache2 state: restarted要点拆解become: yes以提权方式sudo在目标主机执行任务vars声明 Playbook 级变量http_port、https_port、html_welcome_msg均在此定义供模板渲染使用apt模块安装/更新 Apache2state: latest表示保持最新版本template模块把本地 Jinja2 模板渲染后写入目标路径notify在任务变更时触发对应的 Handlerservice模块管理服务运行状态handlers只在被notify触发时才执行的响应式任务这里实现配置变更后自动restart apache。配套的模板文件体现了 Ansible 的模板化能力。 index.html.j2 中用 Jinja2 语法注入变量html h1{{ html_welcome_msg }}/h1 /html而 ports.conf.j2 则把监听端口参数化Listen {{ http_port }} IfModule ssl_module Listen {{ https_port }} /IfModule IfModule mod_gnutls.c Listen {{ https_port }} /IfModule3. 演进任务与处理器的模块化拆分当 Playbook 变长ansible-scenario2/playbook2.yml 示范了用import_tasks拆分代码- hosts: webservers become: yes vars: http_port: 8000 https_port: 4443 html_welcome_msg: Hello 90DaysOfDevOps - Welcome to Day 66! tasks: - import_tasks: tasks/apache2_install.yml handlers: - import_tasks: handlers/main.yml任务的实现被抽取到 ansible-scenario2/tasks/apache2_install.yml处理器被抽取到 ansible-scenario2/handlers/main.yml。这一阶段还引入了目录规范Playbook 与tasks/、handlers/、templates/等子目录共同构成 Ansible 约定的布局。4. 进阶Roles 角色化复用ansible-scenario3/playbook3.yml 展示如何用Roles彻底组织配置- hosts: webservers become: yes vars: http_port: 8000 https_port: 4443 html_welcome_msg: Hello 90DaysOfDevOps - Welcome to Day 66! roles: - apache2在 ansible-scenario3/roles/apache2 目录中Ansible 按约定自动加载defaults/角色的默认变量vars/角色内部高优先级变量tasks/角色的主任务列表handlers/角色专属处理器templates/Jinja2 模板文件meta/角色的元信息依赖关系等tests/角色的测试入口如test.yml与inventoryREADME.md角色使用说明。后续场景在此基础上持续扩展scenario4 引入common与nginx多角色组合scenario6/7 引入group_vars/all的组级变量与 MySQL 角色完整体现了先 Tasks → 再 Roles → 后多角色编排的渐进式演进路线全部样例均可从 2022/Days/Configmgmt 目录逐一查看。5. 规模化基础设施Vagrantfile 多节点环境配置管理的最终目标是规模化。仓库中的 Vagrantfile 用 Vagrant 定义了 4 台 Ubuntu 节点构成一个可复现的多服务器实验环境db01192.168.169.130SSH 端口 2210web01192.168.169.131SSH 端口 2211web02192.168.169.132SSH 端口 2212loadbalancer192.168.169.134SSH 端口 2213。每台节点基于bento/ubuntu-21.10镜像配置 2GB 内存并通过node.vm.provider :virtualbox指定 VirtualBox Provider。这正是 Ansible 场景中webservers主机组的典型实验目标在本地拉起多台 VM再用 Playbook 批量施加配置完整复现配置管理在大规模环境中的价值。小结配置管理确保应用、系统、服务器维持在期望状态弥补 IaC尤其 Terraform不管理 OS/应用配置的空白选型要点ChefRuby 生态、Recipe 丰富、Puppet声明式 DSL、报告机制成熟、Ansible无 Agent、YAML 易学、快速上手、SaltStackPython 生态、可扩展性优先工具边界Ansible 是过程式配置管理工具支持可变基础设施Terraform 是声明式编排工具聚焦不可变基础设施与状态管理实战路线从 simple_play.yml 起步依次掌握模板/Handler、任务模块化、Roles 角色化最终用 Vagrantfile 搭建多节点环境验证规模化配置——完整样例均在 2022/Days/Configmgmt 目录中。下一站Day 64 起将正式深入 Ansible 的安装、Inventory 与具体场景本天的全景导览已经为你划定了清晰的边界与路线。赞分享文档/教程【免费下载链接】90DaysOfDevOpsThis repository started out as a learning in public project for myself and has now become a structured learning map for many in the community. We have 3 years under our belt covering all things DevOps, including Principles, Processes, Tooling and Use Cases surrounding this vast topic.项目地址https://gitcode.com/gh_mirrors/90/90DaysOfDevOps点击查看免费下载相关推荐90DaysOfDevOps 第 63 天配置管理全景——从 IaC 到 Ansible 的选型与实践90DaysOfDevOps 第 63 天配置管理全景——从 IaC 到 Ansible 的选型与实践 本文是 90DaysOfDevOps 学习挑战系列中文档/教程90DaysOfDevOps配置管理全景图——从“期望状态”到 Ansible 实战选型指南90DaysOfDevOps配置管理全景图——从“期望状态”到 Ansible 实战选型指南 配置管理Configuration Management是运文档/教程90DaysOfDevOps Day 63配置管理Configuration Management全景解读——从工具选型到 Ansible 实战90DaysOfDevOps Day 63配置管理Configuration Management全景解读——从工具选型到 Ansible 实战 配置管理文档/教程上一篇Slim框架边缘计算边缘节点API设计与优化下一篇KeyDB中的事件驱动ae.h事件循环实现创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表