Files
knowledge-base/4 - Resources/OpenBB Invest API - K8s Infrastructure.md
Yaojia Wang ad79665527 Sync
2026-03-14 20:23:32 +01:00

3.9 KiB
Raw Permalink Blame History

created, type, tags, source
created type tags source
2026-03-09 resource
kubernetes
infrastructure
devops
drone-ci
argocd
docker-registry
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 不需要配置(有 taintpod 不会调度到上面)。

Drone CI

  • 命名空间: drone
  • Server: 容器端口 80Service 端口 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

部署流程

  1. git push 到 Giteamain/develop 分支)
  2. Gitea webhook 触发 Drone CI
  3. Drone/kaniko 构建 Docker 镜像并推送到 192.168.68.11:30500
  4. ArgoCD 检测 k8s/base/ 中的 manifest 变化并自动同步
  5. k8s 从 registry 拉取镜像并部署

invest-api K8s Manifests (k8s/base/)

  • 命名空间: invest-api
  • Deployment: 镜像 192.168.68.11:30500/invest-api:latest100m-500m CPU256Mi-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.yml trigger 中添加 custom event。
  • kubeconfig 传输损坏: 通过聊天传输 RSA 私钥会被截断/损坏,需要通过 SSH 直接传输文件。