3.9 KiB
3.9 KiB
created, type, tags, source
| created | type | tags | source | ||||||
|---|---|---|---|---|---|---|---|---|---|
| 2026-03-09 | resource |
|
openbb-invest-api 项目部署实践 |
OpenBB Invest API - K8s 基础设施
概述
OpenBB Invest API 的完整 Kubernetes 部署架构,包含集群信息、CI/CD 流水线和 GitOps 配置。
集群
| 节点 | 角色 | IP |
|---|---|---|
| k8s-cp1 | control-plane | 192.168.68.11 |
| k8s-w1 | worker | 192.168.68.21 |
| k8s-w2 | worker | 192.168.68.22 |
- Kubernetes v1.35.0
- 容器运行时: containerd 1.7.28
- 负载均衡: MetalLB
- Ingress: ingress-nginx
- 存储: Proxmox CSI
- 证书管理: cert-manager
kubeconfig
- 位置:
C:\Users\yaoji\.kube\config - 认证: 证书认证 (admin 用户)
- API server:
https://192.168.68.11:6443
Docker Registry
- 命名空间:
registry - 镜像:
registry:2 - 服务: NodePort 30500
- 持久卷: 10Gi
- 访问地址:
http://192.168.68.11:30500 - 基础设施仓库:
C:\Users\yaoji\git\ColaCoder\k8s-infra\registry\
Worker 节点 containerd 配置
两个 worker 节点的 /etc/containerd/config.toml:
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."192.168.68.11:30500"]
endpoint = ["http://192.168.68.11:30500"]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."registry.registry.svc.cluster.local:5000"]
endpoint = ["http://registry.registry.svc.cluster.local:5000"]
Control plane 不需要配置(有 taint,pod 不会调度到上面)。
Drone CI
- 命名空间:
drone - Server: 容器端口 80,Service 端口 8080
- Runner: Kubernetes runner(容量 4)
- Ingress:
drone.k8s.home
Runner ConfigMap
| 键 | 值 |
|---|---|
| DRONE_RPC_HOST | drone.drone.svc.cluster.local:8080 |
| DRONE_RPC_PROTO | http |
| DRONE_NAMESPACE_DEFAULT | drone |
流水线 (.drone.yml)
使用 kaniko 构建(k8s runner 不支持 privileged 模式):
kind: pipeline
type: kubernetes
name: build-and-push
trigger:
branch: [main, develop]
event: [push, custom]
steps:
- name: build-and-push
image: gcr.io/kaniko-project/executor:debug
commands:
- /kaniko/executor
--context=/drone/src
--dockerfile=Dockerfile
--destination=192.168.68.11:30500/invest-api:${DRONE_COMMIT_SHA:0:8}
--destination=192.168.68.11:30500/invest-api:latest
--insecure --skip-tls-verify
ArgoCD
- 命名空间:
argocd - Application:
invest-api - 源仓库:
https://git.colacoder.com/kai/openbb-invest-api.git,路径k8s/base - 目标分支:
main,命名空间invest-api - 同步策略: 自动(prune + selfHeal + CreateNamespace)
Gitea
- URL:
https://git.colacoder.com - 仓库:
kai/openbb-invest-api - SSH:
ssh://git@git.colacoder.com:2200/kai/openbb-invest-api.git
部署流程
git push到 Gitea(main/develop 分支)- Gitea webhook 触发 Drone CI
- Drone/kaniko 构建 Docker 镜像并推送到
192.168.68.11:30500 - ArgoCD 检测
k8s/base/中的 manifest 变化并自动同步 - k8s 从 registry 拉取镜像并部署
invest-api K8s Manifests (k8s/base/)
- 命名空间:
invest-api - Deployment: 镜像
192.168.68.11:30500/invest-api:latest,100m-500m CPU,256Mi-512Mi 内存,健康检查/health:8000 - Service: ClusterIP 端口 8000
- Secret:
invest-api-secrets(可选,用于 API 密钥)
本地 Docker Desktop
C:\Users\yaoji\.docker\daemon.json:
{"insecure-registries": ["192.168.68.11:30500"]}
踩坑记录
- Drone Runner RPC 连接超时: Runner 默认连接端口 80,但 Service 暴露的是 8080。通过 patch configmap 添加
:8080修复。 - Drone 手动触发无反应: UI 手动触发发送的 event 是
custom,需要在.drone.ymltrigger 中添加customevent。 - kubeconfig 传输损坏: 通过聊天传输 RSA 私钥会被截断/损坏,需要通过 SSH 直接传输文件。