大数跨境

对于 99% 的应用来说,Kubernetes 都是过度设计的(我们每天使用 Docker Compose 运行 50 万条日志)。

对于 99% 的应用来说,Kubernetes 都是过度设计的(我们每天使用 Docker Compose 运行 50 万条日志)。 索引目录
2026-02-03
0
导读:关注「索引目录」公众号,获取更多干货。

关注「索引目录」公众号,获取更多干货。

我们运行着 Logtide,这是一个功能齐全的可观测性平台,集成了日志管理、安全信息和事件管理 (SIEM)、实时流处理和分析功能,部署在 Docker Compose 上。我们每天处理 50 万条日志,服务数千用户,并保持着 99.8% 的正常运行时间

我们的基础设施?一台服务器,一个docker-compose.yml文件,零 Kubernetes 复杂性。

这就是为什么大多数应用程序不需要 Kubernetes,以及我们是如何使用看似枯燥的技术大规模运行生产工作负载的。

Kubernetes税

每项技术都有其复杂性代价。每次部署、每次调试、每次新人上手,你都要付出代价。

对于 Kubernetes 来说,这笔开销非常巨大

Kubernetes 的实际成本是多少

学习曲线:

  • 经验丰富的工程师需要 2-3 个月才能熟练掌握。
  • 了解 Pod、Service、Deployment、Ingress、ConfigMap、Secret 和持久卷
  • 网络模型、服务网格、CNI插件
  • RBAC、安全上下文、Pod 安全策略

运营成本:

  • etcd 集群管理
  • 控制平面更新
  • 证书轮换
  • 网络策略调试
  • 存储类配置
  • 监控堆栈(Prometheus、Grafana、Alertmanager)

基础设施成本:

  • 高可用性至少需要 3 个控制平面节点。
  • 工作节点(至少 2-3 个)
  • 负载均衡器
  • 托管 Kubernetes 服务费用(计算费用另加每月 70-150 美元)

最近的一项案例研究表明,一个团队每月花费 60 小时用于维护一个包含 5 个服务的应用程序的 Kubernetes 系统。这相当于1.5 个月的工程师时间,仅仅是为了维持系统的正常运行。

行业现状

CNCF 2025 年数据显示:

  • 80% 的 Kubernetes 用户来自员工人数超过 1000 人的公司。
  • 79%的生产问题源于配置变更
  • 大多数 Kubernetes 集群运行的服务少于 20 个。

翻译:Kubernetes 是一种企业级工具,却被初创公司盲目地奉为圭臬。

我们实际运行的动力是什么?

我们的整个技术栈:

version: '3.8'

services:
  postgres:
    image: timescale/timescaledb:latest-pg16
    volumes:
      - postgres_data:/var/lib/postgresql/data
    environment:
      POSTGRES_DB: logtide
      POSTGRES_USER: logtide
      POSTGRES_PASSWORD: ${DB_PASSWORD}
    deploy:
      resources:
        limits:
          memory: 4G
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U logtide"]
      interval: 10s
      timeout: 5s
      retries: 5

  backend:
    image: logtide/backend:latest
    depends_on:
      postgres:
        condition: service_healthy
    environment:
      DATABASE_URL: postgresql://logtide:${DB_PASSWORD}@postgres:5432/logtide
      NODE_ENV: production
    deploy:
      replicas: 2
      resources:
        limits:
          memory: 1G
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:3000/health"]
      interval: 30s
      timeout: 10s
      retries: 3

  frontend:
    image: logtide/frontend:latest
    depends_on:
      - backend
    deploy:
      resources:
        limits:
          memory: 512M

  nginx:
    image: nginx:alpine
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf:ro
      - ./certs:/etc/nginx/certs:ro
    depends_on:
      - frontend
      - backend

volumes:
  postgres_data:

就这些。60行。团队里的每个人都看得懂。

我们的生产数据

服务器规格:

  • Hetzner CX33:4 个虚拟 CPU,8GB 内存
  • 160GB NVMe 存储
  • 费用:每月 12.50 欧元(约 14 美元)

交通:

  • 每天摄入50万条日志
  • 平均每秒约 6 个对数单位,峰值每秒 50 个对数单位
  • 1000 多个并发 SSE 连接用于实时跟踪
  • 15GB 压缩存储空间(TimescaleDB 压缩)

表现:

  • P50 日志摄取:45毫秒
  • P95 日志摄取:120毫秒
  • 实时流媒体延迟:<50毫秒
  • 搜索查询:50-200毫秒

可靠性:

  • 三个月内正常运行时间达 99.8%。
  • 零停机部署
  • 部署时间:30 秒
  • 恢复时间:2 分钟(重启所有服务)

成本比较:

  • 我们的方案:每月 14 美元
  • 同等托管的 Kubernetes 服务:每月 150-300 美元(EKS/GKE/AKS 基础服务 + 节点)
  • 每年
    节省: 1,632-3,432 美元

我们实际使用的产品特性

零停机部署

#!/bin/bash
# deploy.sh

echo "Pulling latest images..."
docker compose pull

echo "Updating backend (rolling)..."
docker compose up -d --no-deps --scale backend=3 backend
sleep 10
docker compose up -d --no-deps --scale backend=2 backend

echo "Updating frontend..."
docker compose up -d --no-deps frontend

echo "Reloading nginx..."
docker compose exec nginx nginx -s reload

echo "Deploy complete!"

无需 Kubernetes 滚动更新,无需副本集,只需 Docker Compose 和一个 10 行的 bash 脚本。

健康检查和自动重启

Docker Compose 可以处理这个问题:

healthcheck:
  test: ["CMD-SHELL", "pg_isready"]
  interval: 10s
  retries: 5

restart: unless-stopped

容器崩溃了?Docker 会重启它。健康检查失败了?Docker 会将其标记为不健康并停止路由流量。

资源限制

deploy:
  resources:
    limits:
      memory: 4G
      cpus: '2'
    reservations:
      memory: 2G

无需设置K8s资源配额或限制范围。

秘密管理

# .env file (git-ignored)
DB_PASSWORD=xxx
JWT_SECRET=xxx
SMTP_PASSWORD=xxx

结合正确的文件权限:

chmod 600 .env

它是 HashiCorp Vault 吗?不是。它能用吗?能。

生产环境中,我们使用 CI/CD 系统注入的环境变量。对于真正敏感的数据(例如 TLS 证书),我们使用 LUKS 加密卷。

监测

我们在同一个 Docker Compose 堆栈中自行托管 Prometheus 和 Grafana:

prometheus:
  image: prom/prometheus
  volumes:
    - ./prometheus.yml:/etc/prometheus/prometheus.yml
    - prometheus_data:/prometheus

grafana:
  image: grafana/grafana
  volumes:
    - grafana_data:/var/lib/grafana
  depends_on:
    - prometheus

总共新增 15 行代码。未使用 Kubernetes Operator。未使用 Helm Chart。

备份

#!/bin/bash
# backup.sh

docker compose exec -T postgres pg_dump -U logtide logtide | \
  gzip > /backups/logtide-$(date +%Y%m%d).sql.gz

# Upload to S3
aws s3 cp /backups/logtide-$(date +%Y%m%d).sql.gz \
  s3://logtide-backups/

# Keep last 30 days locally
find /backups -name "logtide-*.sql.gz" -mtime +30 -delete

通过 cron 运行,完美运行。无需 Velero,也无需 Kubernetes 备份操作员。

我们何时真正需要 Kubernetes

我们对此毫不隐瞒。我们将在以下情况下迁移到 Kubernetes:

1. 多区域合作变得至关重要

Docker Compose 是单主机的。如果我们需要真正的多区域故障转移和自动流量路由,就需要使用 Kubernetes。

目前的权宜之计:在每个区域运行独立的 Docker Compose 堆栈,并启用 DNS 故障转移。目前有效。

2. 我们需要超过 10 台服务器

管理跨 10 台以上主机的 Docker Compose 非常繁琐。在这种规模下,Kubernetes 编排更胜一筹。

目前情况:我们只有一台服务器。在需要 Docker Swarm 或 K8s 之前,我们或许可以扩展到 3-5 台服务器。

3. 复杂的微服务网络

如果我们将服务拆分成 50 多个,并且每个服务都有复杂的服务网格要求,那么 K8s 就胜出。

当前架构:4 个服务。简单的 nginx 路由。无需 Istio 或 Linkerd。

4. 我们聘请了一支专门的平台团队

Kubernetes 需要专人负责。如果我们发展到能够负担得起 2-3 人平台工程团队的规模,那么 Kubernetes 就很有意义了。

目前团队只有2名工程师。我们负担不起Kubernetes的维护费用。

真正的问题

采用 Kubernetes 之前,请先问自己:

我们是否面临 Kubernetes 能够解决的问题?

  • 运行100多项服务?(否)
  • 需要跨数据中心编排吗?(不需要)
  • 公司有5名以上的平台工程师吗?(没有)
  • 需要复杂的流量拆分吗?(不需要)
  • 每月在基础设施上花费超过 5 万美元?(否)

如果你对以上大多数问题的回答是“否”,那么你不需要 Kubernetes。

真正重要的是什么

良好的基础设施具备三个特点:

1. 它消失了

你部署代码,它就能运行。你不需要每天都考虑基础设施的问题。

有了 Kubernetes,基础设施成了我们的全职工作。有了 Docker Compose,我们git push就能继续前进。

2. 人人都明白。

凌晨两点设备坏了,团队里有人能修好吗?

使用 Docker Compose:是的。它只是容器和 bash 脚本。

使用 Kubernetes 的话:不行。你需要一个“Kubernetes 专家”。

3. 它与你的比例尺成正比。

基础设施的复杂程度应该与你的实际规模相匹配,而不是与你设想的未来规模相匹配。

我们用一台服务器服务成千上万的用户,为什么要为数百万用户设计服务器架构呢?

我们实际的扩展路径

今天(每天 50 万条日志):

  • 1 台服务器
  • Docker Compose
  • 每月14美元

每天 500 万条日志:

  • 3 台服务器(1 台主服务器,2 台只读副本服务器)
  • 仍然是 Docker Compose
  • 手动故障转移
  • 每月 50 美元

每天记录 5000 万条日志:

  • 10台以上服务器
  • 可以考虑使用
    Kubernetes 或 Docker Swarm。
  • 需要妥善安排
  • 每月 500 美元以上

关键见解:我们距离真正需要 Kubernetes 还差三个数量级。

我们实际构建的技术栈

后端: Fastify(Node.js)- 2 个副本

前端: SvelteKit 5 - 静态文件由 nginx 提供服务

数据库: PostgreSQL,带有 TimescaleDB 扩展

实时: PostgreSQL LISTEN/NOTIFY + 服务器发送事件

搜索: PostgreSQL 全文搜索 + GIN 索引

缓存: PostgreSQL 非日志表(可选 Redis)

队列: PostgreSQL,已启用 SKIP 锁定

发布/订阅: PostgreSQL 监听/通知

分析: TimescaleDB 连续聚合

看出规律了吗?PostgreSQL 几乎包办一切。

一个数据库,一个连接字符串,零微服务复杂性。

为什么这种方法有效

1. Postgres 功能非常强大

借助扩展(TimescaleDB、pg_cron、pgvector),Postgres 可以处理:

  • 时间序列数据(TimescaleDB)
  • 全文检索
  • JSON 文档
  • 作业队列
  • 发布/订阅
  • 地理空间数据(PostGIS)

2. 枯燥的技术是可靠的

Docker Compose 自 2014 年就已存在,它成熟稳定,文档也十分出色。

Kubernetes 每三个月更新一次。你的部署清单会失效。你的 Helm Chart 需要更新。

3. 简单的系统是可以调试的。

日志不显示时:

  • 检查 Docker Compose 日志:docker compose logs -f backend
  • 检查数据库psql并运行查询
  • 检查 nginx:docker compose exec nginx cat /var/log/nginx/error.log

无需进行 kubectl 上下文切换。无需进行 pod 网络调试。无需解决 CNI 插件问题。

4. 限制激发创造力

由于必须将所有内容都放在一台服务器上,我们不得不这样做:

  • 使用 TimescaleDB 压缩(节省 90% 的空间)
  • 正确优化查询
  • 使用Postgres构建高效的实时功能
  • 真正了解我们的性能特征

如果 Kubernetes 资源无限,我们就会用硬件来解决问题,而不是解决问题。

我们学到了什么

企业最佳实践往往并不适用于你。

谷歌之所以运行 Kubernetes,是因为他们拥有 5 万名工程师和数百万个容器。

你不是谷歌。

简洁是一种特点

最好的基础设施就是你无需操心的基础设施。

过早优化也延伸到了基础设施领域。

不要在只有 100 个用户的情况下,按照 1000 万用户的标准来开发。

平庸的选择往往才是正确的。

Docker Compose很无聊。PostgreSQL很无聊。nginx很无聊。

无聊意味着:成熟、稳定、有据可查、广为人知。

技术债务是真实存在的。

你增加的每一项基础设施都会产生债务。你将通过以下方式永远支付利息:

  • 维护
  • 升级
  • 监测
  • 文档
  • 培训新团队成员

谨慎选择。

从简单的开始

如果您正在构建一个新应用程序:

第一天:单台服务器上使用 Docker Compose,
100 个用户:仍然使用 Docker Compose;
1000 个用户:仍然使用 Docker Compose,可能需要添加监控;
10000 个用户:添加只读副本,仍然使用 Docker Compose;
100000 个用户:现在考虑采用合适的编排方式。

大多数公司用户数量永远达不到10万。不要过早地为永远无法达到的规模进行优化。

我们的建议

如果符合以下情况,请使用 Docker Compose:

  • 您拥有的服务少于 20 项
  • 您可以在少于 5 台服务器上运行
  • 团队规模:工程师少于10人
  • 你更看重简洁而非功能。
  • 您没有管理多区域部署。

如果符合以下情况,请考虑使用 Kubernetes:

  • 您拥有超过 50 项服务
  • 你需要超过 10 台服务器
  • 你们有专门的平台工程师。
  • 复杂的网络需求
  • 多区域合作至关重要
  • 企业合规性要求它

对于其他人来说:Docker Compose 就足够了。

自己动手试试

Logtide 完全基于 Docker Compose 运行。我们是开源软件(AGPLv3)。

2分钟即可开始:

git clone https://github.com/logtide-dev/logtide
cd logtide
cp .env.example .env
docker compose up -d

无需 Kubernetes,无需复杂技术,只需运行软件即可。

生产就绪的日志管理、SIEM 和可观测性,适用于枯燥的技术。


每天 50 万条日志。一台服务器。零 Kubernetes 配置。

有时候,最好的解决方案往往是最简单的。

关注「索引目录」公众号,获取更多干货。


【声明】内容源于网络
0
0
索引目录
索引目录是一家专注于医疗、技术开发、物联网应用等领域的创新型公司。我们致力于为客户提供高质量的服务和解决方案,推动技术与行业发展。
内容 444
粉丝 0
索引目录 索引目录是一家专注于医疗、技术开发、物联网应用等领域的创新型公司。我们致力于为客户提供高质量的服务和解决方案,推动技术与行业发展。
总阅读12
粉丝0
内容444