在软件开发和运维中,约定优于配置(Convention Over Configuration)是一种设计理念,强调通过预定义的规则和结构减少用户手动配置的工作,从而提高开发效率和代码/系统的可维护性。这一理念的核心在于:对于一个概念或对象,我们应该关注其本质功能,而不是纠结于命名或个性化设置。如果开发者和运维人员各自随意命名文件、设置目录结构或配置风格,代码和系统的可读性、可维护性将显著下降。
telego (https://qcnoe3hd7k5c.feishu.cn/wiki/FSe2wulLqiHcI8kgCqIcmmlknnh) 是一个针对内外网协同开发运维开发的胶水层工具,集成了一系列便捷操作,主要针对以下功能展开:
针对运维人员
从0-1的配置好一套服务器集群初始环境
ssh登录配置,ssh免密配置,k3s安装
通过 配置即部署的模式 描述 安装包、服务等资源的准备来源,中转流程以及部署配置;实现任意新集群都能做到快速的部署从底层k8s到上层服务安装包的完整流程
通过准备好的安装包资源快速安装运维软件
通过集成配置快速配置各类数据源
针对平台用户
可以使用集成安装来安装内网难以安装的软件
可以在内网跳板机上上传镜像、访问权限内存储空间
通过集成配置快速配置各类数据源
在运维场景中,Telego 项目通过约束资源存储目录和配置文件(如 deployment.yml)实现了约定优于配置的理念。这种设计不仅简化了部署流程,还确保了资源管理的稳定性和可审计性。本文将结合 Telego 中约束资源目标目录的例子,详细探讨约定优于配置在运维中的应用。
约定优于配置的核心在于通过统一的规范减少不必要的决策和配置工作。在编程中,例如 Ruby on Rails 框架通过约定目录结构(如 app/models、app/controllers)让开发者无需手动指定文件路径即可运行项目。类似地,在运维中,Telego 通过约束资源目录和配置文件结构,降低了手动管理的复杂性。具体而言,约定的优势包括:
简化配置:通过预定义目录结构和文件命名规则,减少手动配置的工作量。
提高可维护性:统一的目录约定使得项目在迭代时资源路径始终有效,降低了迁移和管理的成本。
便于审计与管理:约束资源存储路径和镜像管理方式,使得资源使用情况更易于跟踪和审计。
Telego 项目的核心配置文件 deployment.yml 是实现配置即部署的关键。通过该文件,Telego 定义了项目的描述、资源准备路径以及全局配置变量。以下是 deployment.yml 的主要结构及其约定的详细说明:
comment: "项目描述,在 TUI 界面中展示" local_values: # 本地配置变量 prepare: # 资源准备路径及规则
comment:用于描述项目信息,当用户在 TUI(终端用户界面)中选择项目时,会展示该描述,方便快速了解项目背景。
local_values:定义本地配置变量,用于项目特定的参数设置。
prepare:指定准备必要资源的文件路径和规则,包含公共资源、私密资源和镜像的存储约定。
资源目录约束
Telego 通过约束资源的目标路径,将资源分为公共资源、私密资源和镜像三类,并为每类资源指定了明确的存储目录。这种约定确保了资源在上传、获取和使用过程中的一致性和安全性。
公共资源与配置
约定路径:公共资源和配置文件的准备目标路径为项目目录下的 teledeploy/xxxx。
上传机制:在资源上传过程中,系统会将这些资源统一传输到共享文件服务器(Main Node 的 /teledeploy 目录)。
访问方式:Telego 获取公共资源时,无需 Main Node 用户的 SSH 权限,直接从共享目录读取。
配置路径:全局可配置变量存储在 Main Node 的 /teledeploy/config/ 目录,供所有节点共享使用。
这种约定简化了公共资源的访问流程,避免了因权限或路径不一致导致的资源获取失败问题。
私密资源与配置
约定路径:私密资源和配置文件的准备目标路径为项目目录下的 teledeploy_secret/xxxx。
上传机制:系统在上传过程中将私密资源传输到目标节点的私密目录(Main Node 的 /teledeploy_secret 目录)。
访问方式:Telego 获取私密资源时,需要提供 SSH 用户的访问密码以确保数据安全。
配置路径:全局可配置变量存储在 Main Node 的 /teledeploy_secret/config/ 目录,仅限授权访问。
通过将私密资源隔离到特定目录并添加访问控制,Telego 保证了敏感数据的安全性,同时保持了配置的统一性。
镜像管理
约定路径:镜像无需手动指定存储路径,统一存储到当前项目目录下的 container_image 目录。
上传机制:镜像直接上传到 Telego 配置的 Harbor 镜像仓库,系统会自动安装并启动 Harbor 仓库。
配置路径:镜像相关的全局可配置变量存储在私密配置目录(/teledeploy_secret/config/)。
这种约定简化了镜像的管理流程,确保镜像存储路径一致,便于后续的纳管和审计。
约定带来的运维优势
通过上述目录约束,Telego 在运维过程中实现了以下优势:
资源路径稳定:无论项目如何迭代,资源存储路径始终遵循约定,避免了因路径变更导致的资源管理问题。
权限管理清晰:公共资源无需权限,私密资源需要密码访问,权限分配明确,降低了安全风险。
便于自动化:统一的目录结构使得自动化脚本更容易编写和维护,上传、部署和获取资源的过程高度标准化。
审计友好:所有资源和镜像的存储路径都遵循约定,便于系统管理员跟踪资源使用情况,进行审计和优化。
Telego 的资源目录约束实践为我们提供了宝贵的启示:在运维中,约定优于配置不仅能减少手动配置的工作量,还能提升系统的可维护性和稳定性。通过预定义的目录结构和配置文件,Telego 确保了资源管理的统一性和安全性,同时简化了部署流程。对于其他运维项目,我们可以从中借鉴以下经验:
定义明确的目录规范:为不同类型的资源(如公共、私密、镜像)指定固定路径,减少路径管理的复杂性。
区分权限级别:根据资源敏感性设置不同的访问权限,确保数据安全。
集成自动化工具:利用约定好的路径和配置文件,结合自动化工具(如 CI/CD 流水线)实现高效部署。
注重可审计性:通过统一的资源管理方式,方便后续的跟踪和审计。