别再手搓环境了:聊聊我们是怎么用 Terraform + Helm 做内部服务模板化的

简介: 别再手搓环境了:聊聊我们是怎么用 Terraform + Helm 做内部服务模板化的

别再手搓环境了:聊聊我们是怎么用 Terraform + Helm 做内部服务模板化的

做过几年运维或者 DevOps 的朋友,大概率都有过这种经历:

新项目上线,流程是这样的:

  1. 建 Kubernetes Namespace
  2. 写 Deployment YAML
  3. 配 Service
  4. 配 Ingress
  5. 配 ConfigMap
  6. 配数据库
  7. 配 Redis
  8. 配监控
  9. 配日志

忙完一圈,突然发现:

80% 的工作都是重复的。

更要命的是,不同项目的人写的 YAML 还不一样。

有人这样写:

resources:
  limits:
    cpu: "500m"

有人这样写:

resources:
  limits:
    cpu: "0.5"

还有人根本不写资源限制。

于是时间一长,公司 Kubernetes 集群就变成了:

YAML 垃圾场。

后来我们痛定思痛做了一件事:

内部服务模板化(Service Template)。

核心思路其实很简单:

Terraform 管基础设施,Helm 管应用模板。

今天就聊聊这个实践。


一、为什么一定要做服务模板化

先说句很实在的话:

DevOps 最大的敌人其实不是技术,而是重复劳动。

很多公司所谓的“自动化”,其实只是:

人工 + 文档

比如:

步骤1:创建Namespace
步骤2:复制deployment.yaml
步骤3:修改镜像

这不叫自动化。

这叫:

手工流水线。

真正的自动化应该是:

terraform apply

然后环境 + 应用直接起来。

这就是模板化的价值。


二、整体架构设计

我们当时的架构大概是这样:

开发者
   │
   │ git push
   ▼
CI/CD
   │
   ▼
Terraform
(基础设施)
   │
   ▼
Helm
(应用模板)
   │
   ▼
Kubernetes

职责划分非常清晰:

工具 负责什么
Terraform 云资源 / 集群资源
Helm 应用部署
Kubernetes 运行服务

一句话总结:

Terraform 管“地”,Helm 管“房子”。


三、Terraform:统一基础设施模板

先说 Terraform。

我们先把所有服务需要的基础设施模板化。

比如一个服务通常需要:

Namespace
ServiceAccount
数据库
Redis
S3 Bucket

Terraform 模块可以这样写:

module "service_base" {

  source = "./modules/service_base"

  service_name = var.service_name
  env          = var.env

}

模块内部大概这样:

resource "kubernetes_namespace" "service" {
  metadata {
    name = var.service_name
  }
}

Redis 示例:

resource "aws_elasticache_cluster" "redis" {

  cluster_id = "${var.service_name}-redis"

  engine = "redis"

  node_type = "cache.t3.micro"

}

这样一个服务上线只需要:

service_name = "order-service"
env = "prod"

Terraform 就会自动创建:

namespace
redis
数据库
存储

基础设施一键完成。


四、Helm:真正的应用模板

Terraform 解决了基础设施问题。

接下来就是应用部署。

这部分 Helm 非常适合。

我们设计了一个 标准 Helm Chart 模板。

目录结构大概是这样:

service-template
  ├── Chart.yaml
  ├── values.yaml
  └── templates
        ├── deployment.yaml
        ├── service.yaml
        ├── ingress.yaml

Deployment 模板示例:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: {
   {
    .Values.service.name }}

spec:

  replicas: {
   {
    .Values.replicaCount }}

  template:
    spec:

      containers:

      - name: app

        image: {
   {
    .Values.image.repository }}:{
   {
    .Values.image.tag }}

        resources:

          limits:
            cpu: {
   {
    .Values.resources.limits.cpu }}
            memory: {
   {
    .Values.resources.limits.memory }}

values.yaml:

service:
  name: order-service

replicaCount: 2

image:
  repository: company/order-service
  tag: latest

resources:
  limits:
    cpu: "500m"
    memory: "512Mi"

这样一个服务部署只需要:

helm install order-service ./service-template

五、模板化真正的关键:约束,而不是自由

很多团队做模板化最后都会失败。

原因只有一个:

模板不强制执行。

开发可以随便写 YAML。

结果时间一长:

模板 A
模板 B
模板 C

整个系统又乱了。

所以我们当时做了一件比较“狠”的事情:

禁止直接提交 Kubernetes YAML。

所有服务必须走:

Helm Template

CI 会检查:

if raw_yaml_detected
then
   build_fail
fi

这样所有服务部署都必须使用模板。

慢慢整个公司就统一了。


六、模板化带来的三个巨大好处

这套体系跑了一段时间之后,好处非常明显。

1 新服务上线速度

以前:

1-2天

现在:

30分钟

开发只需要写:

values.yaml

剩下全部自动完成。


2 运维成本下降

以前:

每个服务配置不一样。

现在:

所有服务结构一致。

排查问题的时候:

deployment
service
ingress

都一模一样。


3 平台能力可以统一升级

比如要加:

sidecar
日志采集
service mesh

只需要改:

Helm 模板

所有服务自动升级。

这才是平台化的真正价值。


七、模板化的终极形态:Internal Developer Platform

很多公司做到最后都会走到一个方向:

IDP(Internal Developer Platform)

开发者不再接触:

Terraform
Helm
Kubernetes

而是只写:

service: order-service
language: go
database: mysql
cache: redis

平台自动生成:

Terraform
Helm
CI
监控
日志

一键部署。

这其实就是很多大厂在做的:

平台工程(Platform Engineering)。


最后说点我的真实感受

这些年做运维,我最大的感触其实是:

运维的终极目标是“消灭运维”。

不是裁员那种消灭。

而是:

让系统自己运行。

真正好的平台应该是这样的:

开发只管写代码:

git push

服务就自动上线。

不用申请服务器
不用写 YAML
不用找运维

目录
相关文章
|
3月前
|
人工智能 缓存 测试技术
Harness 效应:编排设计如何影响企业级 Agent 的 Token 成本
论文《The Harness Effect》指出:企业级Agent成本主要由编排层(Harness)决定,而非模型单价。Harness通过优化上下文组织、历史压缩、工具调用与重试机制,将单任务Token消耗降低38%(14.2k→8.8k),成本下降33%–61%,CPM提升68%。优化本质是将成本问题从“选模型”转向“精设计”。
328 0
Harness 效应:编排设计如何影响企业级 Agent 的 Token 成本
|
4月前
|
JSON 人工智能 缓存
Orchestrator 为什么比 Agentic Loop 快:LLM 决策与执行分离的架构解析
Orchestrator模式将LLM角色解耦:仅用两次调用——一次路由决策(定执行策略)、一次结果合成;中间执行由确定性代码完成,支持单Agent、并行扇出、顺序DAG三种模式,成本降70%,延迟减半,更适合高并发生产环境。
246 2
|
4月前
|
存储 Kubernetes 监控
阿里云容器服务Kubernetes版(ACK)对接使用完全指南
本文提供了一份完整的阿里云容器服务Kubernetes版(ACK)对接使用指南。首先解析ACK托管版、专有版与Serverless版的架构差异与选型策略,帮助用户根据业务场景做出合理决策。随后详细讲解通过控制台和Terraform创建ACK托管集群的完整流程,涵盖网络规划(Terway与Flannel对比、CIDR配置)、节点池管理等关键环节。在应用部署层面,深入介绍Deployment、StatefulSet等核心工作负载的YAML编排实践,并通过Service与ALB Ingress实现服务暴露与七层负载均衡。存储管理部分系统讲解基于CSI的云盘动态存储卷与ossfs 2.0的使用方法。可
|
3月前
|
数据挖掘 机器人 Shell
DeerFlow 放进企业里怎么落地?我会先跑三条线,而不是急着做万能 Agent
DeerFlow并非万能聊天机器人,而是面向企业“长任务”的可治理Agent平台。本文详解其三大落地场景:研究报告、数据分析与研发自动化,并强调权限管控、沙箱隔离与审计合规,主张小切口试点、稳边界推进。
299 0
|
3月前
|
Java API
deerflow2.0 -- harness
deerflow2.0 重点分析
423 0
|
4月前
|
人工智能 缓存 监控
构建企业级 AI Agent 工程化实践:从原型到生产环境的跨越
本文深入探讨企业级AI Agent从原型到生产的工程化实践,直面LLM概率性与业务确定性的根本矛盾,提出“LLM负责感知推理、代码保障逻辑执行”的混合架构。系统阐述可观测性、安全护栏、性能优化、数据管理四大工程支柱,并结合IT运维、金融合规等实战场景,提供可落地的LLMOps方法论。
|
4月前
|
运维 监控 Kubernetes
阿里云云原生DevOps:基于ACK构建企业级CI/CD流水线
企业上云后,如何高效地进行应用交付成为核心挑战。本文分享基于阿里云容器服务ACK和云效DevOps平台构建企业级CI/CD流水线的完整实践,涵盖镜像构建、自动部署、灰度发布、安全扫描和成本优化5个核心环节。以一个日活百万的在线教育平台为例,将发布频率从每周1次提升到每天10次,部署成功率从85%提升到99.5%,年节省服务器成本约48万元。
|
4月前
|
存储 弹性计算 Kubernetes
阿里云容器服务Kubernetes版ACK对接使用完全指南
本文系统阐述阿里云容器服务Kubernetes版(ACK)的对接使用全流程。首先解析ACK托管版、专有版与Serverless版的架构差异与选型策略,帮助用户根据业务场景做出合理决策。随后详细讲解通过控制台创建ACK托管集群的完整步骤,涵盖网络规划(Terway与Flannel对比、CIDR配置)、节点池管理等关键环节。在应用部署层面,深入介绍Deployment、StatefulSet等核心工作负载的YAML编排实践,并通过Service与ALB Ingress实现服务暴露与七层负载均衡。存储管理部分系统讲解基于CSI的云盘动态存储卷与NAS静态存储卷的使用方法。安全与权限方面,阐述RAM授
|
6月前
|
自然语言处理 安全 测试技术
大模型+超自动化:实在Agent从“句意理解”到“跨系统闭环执行”的技术链路
本文剖析实在Agent“六层闭环技术架构”,直击企业级智能体落地核心痛点——“认知-执行断层”。通过垂直大模型+全栈超自动化深度融合,实现从自然语言指令到跨系统业务闭环执行的端到端自主化,兼具国产化适配、强合规与高稳定性,为AI工程化提供可落地的技术范式。
|
4月前
|
Kubernetes Ubuntu 网络协议

热门文章

最新文章