ARTICLE DETAIL

资讯详情

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

90DaysOfDevOps 第63天:配置管理全景图——从 Desired State 到 Ansible 实战

90DaysOfDevOps 第63天:配置管理全景图——从 Desired State 到 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 中承上启下的关键环节在基础设施即代码IaC保证基础设施处于期望状态之后配置管理工具负责接管操作系统与应用程序的期望状态。本文基于 90DaysOfDevOps 第 63 天的内容系统梳理配置管理的定义、典型场景、四大主流工具Chef、Puppet、Ansible、SaltStack的选型对比并结合本仓库 2022/Days/Configmgmt 目录下的真实 playbook 与 Vagrant 环境带你完成从理解概念到看得懂、跑得起来的进阶。配置管理让系统始终处于期望状态紧随 IaCInfrastructure as Code专题之后我们必然会遇到一个与 IaC 高度交叉的概念配置管理或更精确地说应用配置管理Application Configuration Management。配置管理的定义可以概括为一句话维护应用程序、系统与服务器始终处于期望状态Desired State的过程。它与 IaC 的分工需要仔细辨析IaC 负责让基础设施处于期望状态例如用 Terraform 创建虚拟机、网络、存储等资源但 Terraform 这类 IaC 工具不会持续维护操作系统设置或应用程序本身的期望状态——软件装到哪一版、配置文件内容是什么、服务是否在运行这些正是配置管理工具的职责配置管理工具确保在变更持续发生的生命周期中系统与应用程序始终按预期方式运行。此外配置管理还有一个容易被忽略的价值它阻止你做无文档记录的改动。无论大小变更都被代码化、版本化、可审计这正是文档即代码的体现。场景推演系统管理员为什么需要配置管理工具设想一个名叫 Dũng英文版对应 Dean的系统管理员他负责环境中的所有系统。当一台服务器宕机、出现故障时Dũng 凭借经验可以轻松修复——单点故障不成问题。但麻烦在于当多台服务器开始同时出故障尤其是在大型且不断扩张的环境中。此时逐个手动排查既不现实也不可持续。这正是配置管理工具的价值所在Dũng 只需编写正确的代码把每台服务器应该如何设置的指令快速、高效、规模化地推送出去——让管理员从救火队员变成摇滚明星。从仓库中的 Vagrantfile 可以看到本专题的真实实验环境设计它定义了db01、web01、web02、loadbalancer四台bento/ubuntu-21.10虚拟机内存 2GB、SSH 端口分别为 2210-2213分别对应数据库、Web 服务器与负载均衡器角色。这正是多服务器、多角色的典型场景——单靠手动管理很快会失控而配置管理工具可以统一编排这些异构节点。四大主流配置管理工具速览市面上有多种配置管理工具各自有特定的适用场景。本节基于原文档逐一快速过一遍 Chef、Puppet、Ansible 与 SaltStack 的核心特性、优缺点与架构形态然后再做选型。Chef通过基础设施自动化确保配置在任何规模、任何环境下都一致地应用开源工具由 OpsCode 开发使用Ruby 和 Erlang编写最适合拥有异构基础设施、寻求成熟解决方案的组织通过Recipes 与 Cookbooks定义系统配置代码✅ 优点拥有大量现成 recipes 可复用与 Git 集成良好提供强版本控制能力❌ 缺点学习曲线陡峭需要投入大量时间主服务器Chef Server对节点控制力有限架构Server / Client搭建难度中等语言风格过程式Procedural——指定如何做。Puppet配置管理工具支持自动部署基于Ruby构建使用DSL编写 manifests清单同样擅长异构基础设施重点在可扩展性✅ 优点社区庞大、支持资源丰富**报告机制reporting**写得非常好❌ 缺点高级任务需要 Ruby 语言知识主服务器对节点控制力有限架构Server / Client搭建难度中等语言风格声明式Declarative——只指定做什么。AnsibleIT 自动化工具覆盖配置管理、云上资源供给、部署与编排核心 playbook 使用YAML编写本专题多次强调 YAML 的重要性值得专门学习非常适合追求快速上线运行的环境通过 playbook 向服务器下发指令✅ 优点远程节点无需安装 agentYAML 极易上手❌ 缺点执行速度通常比其他工具慢但仍比手动操作快得多YAML 不如 Ruby 强大但学习成本更低架构Client Only无中心服务器搭建难度非常容易语言风格过程式Procedural——指定如何做。SaltStack基于 CLI 的工具自动化配置管理与远程执行底层基于Python指令用YAML或其自身 DSL 编写非常适合以**可扩展性与韧性resilience**为优先的环境✅ 优点运行起来后易于使用报告机制良好❌ 缺点初始搭建阶段困难新的 Web UI 相比其他工具远未成熟架构Server / Client搭建难度中等语言风格声明式Declarative——只指定做什么。Ansible vs Terraform一张表看懂分工本专题选定的工具是Ansible理由很直接易于使用且对语言基础要求更低。但在深入工具之前有必要先厘清 Ansible 与 Terraform 的差异避免两者混用对比维度AnsibleTerraform类型配置管理工具编排orchestration工具基础设施支持**可变mutable**基础设施支持**不可变immutable**基础设施语言过程式语言声明式语言资源供给Provisioning提供部分供给能力VM、网络、存储提供广泛的供给能力VM、网络、存储打包与模板化提供完整支持提供部分支持生命周期管理没有生命周期管理高度依赖生命周期与状态state管理核心结论Terraform 管创建与销毁供给与状态Ansible 管装好之后的状态维护安装、配置、服务——两者互补而非竞争。这也呼应了本文开头IaC 之后需要配置管理的论断。仓库实证从单文件 playbook 到角色化多主机编排本仓库 2022/Days/Configmgmt 完整保留了一条 Ansible 学习路径场景 1→7印证了上文所述的能力演进。先看最基础的 simple_play.yml——一个针对 localhost 的最简 playbook- name: Simple Play hosts: localhost connection: local tasks: - name: Ping me ping: - name: print os debug: msg: {{ ansible_os_family }}它展示了 Ansible 最核心的两个动作ping模块验证连通性debug模块配合ansible_os_family变量输出目标系统家族——这条变量来自 Ansible 自动收集的 facts是后续所有条件判断的基础。沿着场景目录可以清晰看到 Ansible 工程化的递进场景 1playbook1.yml单文件完成 apache2 安装、通过template模块渲染ports.conf与index.htmlJinja2 模板位于templates/用notifyhandlers实现配置变更后重启服务最后用service模块确保 apache 处于运行状态场景 2playbook2.yml用import_tasks把任务拆到tasks/apache2_install.yml、把 handlers 拆到handlers/main.yml实现文件级复用场景 3playbook3.yml引入标准role结构roles/apache2/下的defaults/、handlers/、meta/、tasks/、templates/、tests/、vars/playbook 只剩三行场景 4扩展到common、apache2、nginx三个角色配合install_tools.yml、configure_nginx.yml等任务文件场景 5新增facts.json与顶层mysite.j2展示如何利用主机 facts 与模板生成差异化配置场景 6加入group_vars/all/common_variables.yml用变量集中管理跨主机通用配置场景 7playbook7.yml最终形态——一份 playbook 中定义三个 play分别作用于webserverscommon apache2tagweb、proxycommon nginxtagproxy、databasecommon mysqltagdatabase与 Vagrantfile 中的四台虚拟机一一对应。这一演进路径恰好对应原文档对 Ansible 的评价无 agent、YAML 简单、上手极快——从最简 playbook 到多角色多主机编排只需逐个场景递进即可完成。而过程式、指定如何做的特点也能从notify/handlers、import_tasks等显式控制流中直观体会到。小结与下一步配置管理让系统与应用的期望状态可声明、可版本化、可规模化维护在 ChefRuby/过程式、PuppetRuby DSL/声明式、AnsibleYAML/过程式、SaltStackPython/声明式之间本专题选择 Ansible因为它搭建极易、无 agent、YAML 门槛最低Ansible 与 Terraform 是互补关系前者维护可变基础设施的运行时状态后者负责不可变基础设施的供给与生命周期仓库中场景 1→7 的代码是完整的实战参照配合 Vagrantfile 即可在本地复现 db/web/负载均衡的多机环境。下一篇将正式进入 Ansible 工具的深入学习参见 第 64 天本专题其余章节见 2022 年 Days 目录。赞分享文档/教程【免费下载链接】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 天配置管理全景图——从工具选型到 Ansible 实战90DaysOfDevOps 第 63 天配置管理全景图——从工具选型到 Ansible 实战 配置管理Configuration Management是文档/教程90DaysOfDevOps 第 63 天配置管理全景——从 IaC 到 Ansible 的选型与实践90DaysOfDevOps 第 63 天配置管理全景——从 IaC 到 Ansible 的选型与实践 本文是 90DaysOfDevOps 学习挑战系列中文档/教程90DaysOfDevOps Day 63配置管理Configuration Management全景解读——从工具选型到 Ansible 实战90DaysOfDevOps Day 63配置管理Configuration Management全景解读——从工具选型到 Ansible 实战 配置管理文档/教程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表