name: 部署应用程序 description: 从Kubernetes到无服务器和边缘函数的部署模式。适用于部署应用程序、设置CI/CD或管理基础设施。涵盖Kubernetes(Helm、ArgoCD)、无服务器(Vercel、Lambda)、边缘(Cloudflare Workers、Deno)、IaC(Pulumi、OpenTofu、SST)和GitOps模式。
部署应用程序
从Kubernetes到无服务器和边缘函数的生产部署模式。弥合从应用程序组装到生产基础设施的差距。
目的
这个技能提供清晰的指导用于:
- 选择正确的部署策略(Kubernetes、无服务器、容器、边缘)
- 使用Pulumi或OpenTofu实现基础设施即代码
- 使用ArgoCD或Flux设置GitOps自动化
- 选择无服务器数据库(Neon、Turso、PlanetScale)
- 部署边缘函数(Cloudflare Workers、Deno Deploy)
何时使用此技能
在以下情况下使用此技能:
- 将应用程序部署到生产基础设施
- 设置CI/CD管道和GitOps工作流
- 在Kubernetes、无服务器或边缘部署之间选择
- 实施基础设施即代码(Pulumi、OpenTofu、SST)
- 从手动部署迁移到自动化基础设施
- 与“组装组件”集成以完成部署流程
部署策略决策树
工作负载类型?
├── 复杂微服务(10+服务)
│ └─ Kubernetes + ArgoCD/Flux(GitOps)
│ ├─ Helm 4.0用于打包
│ ├─ 服务网格:Linkerd(5-10%开销)或Istio(25-35%开销)
│ └─ 参见references/kubernetes-patterns.md
├── 可变流量/成本敏感
│ └─ 无服务器
│ ├─ 数据库:Neon/Turso(缩放至零)
│ ├─ 计算:Vercel、AWS Lambda、Cloud Functions
│ ├─ 边缘:Cloudflare Workers(<5ms冷启动)
│ └─ 参见references/serverless-dbs.md和references/edge-functions.md
├── 一致负载/可预测流量
│ └─ 容器(ECS、Cloud Run、Fly.io)
│ ├─ ECS Fargate:AWS原生,无服务器容器
│ ├─ Cloud Run:GCP,缩放至零容器
│ └─ Fly.io:全球边缘,多区域
├── 全局低延迟(<50ms)
│ └─ 边缘函数 + 边缘数据库
│ ├─ Cloudflare Workers + D1(SQLite)
│ ├─ Deno Deploy + Turso(libSQL)
│ └─ 参见references/edge-functions.md
└── 快速原型/初创MVP
└─ 托管平台即服务
├─ Vercel(Next.js,零配置)
├─ Railway(任何框架)
└─ Render(从Git自动部署)
IaC选择?
├─ TypeScript优先 → Pulumi(Apache 2.0,多云支持)
├─ HCL基础 → OpenTofu(CNCF,Terraform兼容)
└─ 无服务器TypeScript → SST v3(基于Pulumi)
核心概念
基础设施即代码(IaC)
使用代码定义基础设施,而非手动配置。
主要:Pulumi(TypeScript)
- Context7 ID:
/pulumi/docs(信任度:94.6/100,9,525片段) - TypeScript优先(与React/Next.js相同语言)
- 多云支持(AWS、GCP、Azure、Cloudflare)
- 参见references/pulumi-guide.md获取模式和示例
替代:OpenTofu(HCL)
- CNCF项目,Terraform兼容
- MPL-2.0许可证(开放治理)
- 直接替换Terraform
- 参见references/opentofu-guide.md获取迁移指南
无服务器:SST v3(TypeScript)
- 基于Pulumi
- 针对AWS Lambda、API Gateway优化
- 实时Lambda开发
GitOps部署
以Git为单一真实来源的声明式基础设施。
ArgoCD(推荐给平台团队):
- 丰富的Web UI
- 内置RBAC和多租户
- 自愈部署
- 参见references/gitops-argocd.md
Flux(推荐给DevOps自动化):
- Kubernetes原生
- CLI导向
- 架构更简单
- 参见references/gitops-argocd.md
服务网格
用于微服务通信、安全和可观测性的可选层。
何时使用服务网格:
- 多团队微服务(安全边界)
- 零信任网络(需要mTLS)
- 高级流量管理(金丝雀、蓝绿部署)
何时不使用:
- 简单单体或2-3服务(开销不合理)
- 无服务器架构(不兼容)
Linkerd(性能导向):
- 5-10%开销
- 基于Rust
- 简单、有主见
Istio(功能丰富):
- 25-35%开销
- C++(Envoy)
- 高级路由、可观测性
参见references/kubernetes-patterns.md获取服务网格模式。
快速启动工作流
工作流1:将Next.js部署到Vercel(零配置)
# 安装Vercel CLI
npm i -g vercel
# 链接项目
vercel link
# 部署到生产环境
vercel --prod
参见examples/nextjs-vercel/获取完整示例。
工作流2:使用ArgoCD部署到Kubernetes
- 创建Helm图表
- 将图表推送到Git仓库
- 创建ArgoCD应用
- ArgoCD自动同步
参见examples/k8s-argocd/获取完整GitOps设置。
工作流3:使用Pulumi部署无服务器应用
import * as pulumi from "@pulumi/pulumi";
import * as aws from "@pulumi/aws";
// 创建Lambda函数
const lambda = new aws.lambda.Function("api", {
runtime: "nodejs20.x",
handler: "index.handler",
role: role.arn,
code: new pulumi.asset.FileArchive("./dist"),
});
export const apiUrl = lambda.invokeArn;
参见examples/pulumi-aws/和references/pulumi-guide.md获取模式。
工作流4:将边缘函数部署到Cloudflare Workers
import { Hono } from 'hono'
const app = new Hono()
app.get('/api/hello', (c) => {
return c.json({ message: '从边缘来的你好!' })
})
export default app
使用Wrangler部署:
wrangler deploy
参见examples/cloudflare-workers-hono/和references/edge-functions.md。
与组装组件集成
在使用“组装组件”构建应用程序后,此技能提供部署模式:
前端(Next.js/Vite)→ 部署:
- 查看部署决策树
- 选择平台:Vercel(Next.js)、Cloudflare Pages(静态)或自定义(Pulumi)
- 设置环境变量
- 使用选择的方法部署
后端(FastAPI/Axum)→ 部署:
- 容器化应用程序(Dockerfile)
- 选择平台:ECS Fargate、Cloud Run或Kubernetes
- 设置IaC(Pulumi或OpenTofu)
- 使用GitOps(ArgoCD/Flux)或CI/CD部署
参见references/pulumi-guide.md获取集成示例。
参考文件
Kubernetes部署
- references/kubernetes-patterns.md - Helm 4.0、服务网格、自动缩放
- references/gitops-argocd.md - ArgoCD/Flux GitOps工作流
无服务器与边缘
- references/serverless-dbs.md - Neon、Turso、PlanetScale(缩放至零)
- references/edge-functions.md - Cloudflare Workers、Deno Deploy(<5ms冷启动)
基础设施即代码
- references/pulumi-guide.md - Pulumi TypeScript模式、组件模型
- references/opentofu-guide.md - OpenTofu/Terraform迁移
实用脚本
scripts/中的脚本在执行时不会加载到上下文(无令牌)。
生成Kubernetes清单:
python scripts/generate_k8s_manifests.py --app-name my-app --replicas 3
验证部署配置:
python scripts/validate_deployment.py --config deployment.yaml
参见脚本文件获取完整使用文档。
示例
examples/中的完整可运行示例:
- pulumi-aws/ - 使用Pulumi部署ECS Fargate
- k8s-argocd/ - Kubernetes + ArgoCD GitOps
- sst-serverless/ - SST v3无服务器TypeScript
每个示例包括:
- README.md包含设置说明
- 完整源代码
- 环境变量配置
- 部署命令
库推荐
基础设施即代码(2025)
主要:Pulumi
- Context7:
/pulumi/docs(信任度:94.6,9,525片段) - TypeScript优先,多云支持
- Apache 2.0许可证
替代:OpenTofu
- CNCF项目,MPL-2.0
- Terraform兼容
- HCL语法
无服务器:SST v3
- 基于Pulumi
- AWS Lambda优化
- TypeScript原生
无服务器数据库
Neon PostgreSQL:
- 数据库分支(类似Git)
- 缩放至零计算
- 完全PostgreSQL兼容
Turso SQLite:
- 边缘部署(200+位置)
- 亚毫秒级读取
- libSQL(SQLite分支)
PlanetScale MySQL:
- 非阻塞模式变更
- Vitess驱动
- 按行定价
参见references/serverless-dbs.md获取比较和集成。
边缘函数
Cloudflare Workers:
- <5ms冷启动(V8隔离)
- 200+边缘位置
- 每请求128MB内存
Deno Deploy:
- TypeScript原生
- Web标准API
- 全球边缘(<50ms延迟)
Hono框架:
- 在所有边缘运行时运行
- 14KB捆绑大小
- TypeScript优先
参见references/edge-functions.md获取模式。
最佳实践
安全
- 使用秘密管理(AWS Secrets Manager、Vault)
- 为服务间通信启用mTLS
- 实施最小权限IAM角色
- 扫描容器镜像的漏洞
成本优化
- 对可变流量使用无服务器数据库(缩放至零)
- 在Kubernetes中启用水平Pod自动缩放(HPA)
- 正确调整计算资源(CPU/内存)
- 对非关键工作负载使用Spot实例
性能
- 将部署靠近用户(对全球应用使用边缘函数)
- 对静态资产使用CDN(CloudFront、Cloudflare)
- 实施缓存策略(Redis、CloudFront)
- 监控无服务器的冷启动时间
可靠性
- 实施健康检查(Kubernetes存活/就绪探针)
- 设置自动缩放(HPA、Lambda并发)
- 对关键服务使用多区域部署
- 实施断路器与重试
故障排除
部署失败
Kubernetes Pod启动失败:
- 检查Pod日志:
kubectl logs <pod-name> - 描述Pod:
kubectl describe pod <pod-name> - 验证资源限制与请求
- 检查镜像拉取错误(imagePullSecrets)
无服务器冷启动太慢:
- 减少捆绑大小(树摇、代码分割)
- 使用预配置并发(AWS Lambda)
- 考虑边缘函数(Cloudflare Workers)
- 优化初始化代码
GitOps同步错误(ArgoCD/Flux):
- 验证Git仓库访问
- 检查清单有效性(
kubectl apply --dry-run) - 审查同步策略(修剪、自愈)
- 检查ArgoCD/Flux日志
性能问题
服务网格开销高:
- 考虑切换到Linkerd(5-10% vs Istio 25-35%开销)
- 禁用不必要功能
- 评估是否需要服务网格
数据库连接池耗尽:
- 增加连接池大小
- 使用无服务器数据库(Neon缩放至零)
- 实施连接池(PgBouncer)
参见references/文件获取详细故障排除指南。
迁移模式
从手动到IaC
- 清点现有基础设施
- 从非关键环境开始(开发、暂存)
- 使用Pulumi/OpenTofu将基础设施代码化
- 在生产前在暂存测试
- 逐步迁移(一次一个服务)
从Terraform到OpenTofu
# 安装OpenTofu
brew install opentofu
# 迁移状态
terraform state pull > terraform.tfstate.backup
tofu init -migrate-state
tofu plan
tofu apply
参见references/opentofu-guide.md获取完整迁移。
从EC2到容器
- 容器化应用程序(创建Dockerfile)
- 本地测试(Docker Compose)
- 部署到暂存(ECS/Cloud Run/Kubernetes)
- 监控性能与成本
- 切换生产流量(蓝绿部署)
从容器到无服务器
- 识别无状态服务
- 重构为无服务器友好模式
- 使用无服务器数据库(Neon/Turso)
- 部署到Lambda/Cloud Functions
- 监控冷启动与成本
后续步骤
部署应用程序后:
- 设置可观测性(指标、日志、追踪)
- 实施CI/CD管道(GitHub Actions、GitLab CI)
- 配置自动缩放与资源限制
- 设置灾难恢复与备份
- 为事件响应记录运行手册
附加资源
- Pulumi文档:https://www.pulumi.com/docs/
- OpenTofu文档:https://opentofu.org/docs/
- ArgoCD文档:https://argo-cd.readthedocs.io/
- Cloudflare Workers文档:https://developers.cloudflare.com/workers/
- Neon文档:https://neon.tech/docs/