BrunoGao 1ae6eb6416 feat(health): stage Contabo production migration (#360)
Adds a manual-only Contabo canary path, Traefik overlays, fail-closed migration gates, and contract tests.

Refs lingjingwanxiang/ljwx-health#390
Refs lingjingwanxiang/ljwx-health#395
2026-08-02 17:20:07 +08:00

ljwx-deploy

GitOps 配置仓库,使用 ArgoCD 管理 Kubernetes 集群。

Start Here

  • 新进程/新项目/老项目统一接入入口:docs/START-HERE-GITOPS-ONBOARDING.md
  • LJWX 业务部署权威流程:docs/ljwx-business-deployment-flow.md
  • 自动扫描当前仓库是否已接入:bash scripts/ops/scan-gitops-context.sh --repo "$PWD"

Platform Blueprint

  • 平台装配蓝图入口:docs/platform/README.md
  • 平台配置与契约:platform/
  • 集成版本清单:release/platform-version.yaml
  • 平台 runbooks:runbooks/
  • 新集群初始化脚本骨架:scripts/bootstrap/cluster-init.sh

Bid-MVP Factory Control Plane

  • 运行验证:bash scripts/verify.sh
  • Harbor 复制:docs/harbor-replication-ghcr.md
  • Controller/Argo 运维:docs/ops-runbook.md
  • GitOps v2 设计入口:docs/gitops-v2/README.md
  • 生产集群 Bootstrap(仅生产集群执行):argocd-apps/02-cluster-prod-bootstrap.yaml
  • 生产镜像拉取凭据自动同步:cluster-prod/registry-pull-secret-sync-*.yaml
  • 回滚演练:docs/rollback-drill.md
  • Grafana 可观测看板 + TLS(GitOps):apps/ljwx-platform-observability/
  • Public ingress + Let's Encrypt(Traefik HTTP01,GitOps):argocd-apps/03-cert-manager-dev.yaml、argocd-apps/04-cert-manager-config-dev.yaml、apps/cert-manager-config/
  • 双 k3s 同代码部署规范:docs/dual-k3s-deployment.md
  • CronJob secret 示例:cluster/deploy-promoter-secret.example.yaml
  • 模板化批量接入:docs/onboarding-automation.md
  • 服务仓 enqueue 工作流片段:docs/service-repo-workflow-snippet.md
  • Argo dev 自动同步说明:docs/argocd-dev-autosync.md

目录结构

  • infra/ - 基础设施组件(Gitea Runner 等)
  • argocd-apps/ - ArgoCD Application 定义
  • apps/ - 应用配置
  • cluster/ - 本地/dev 集群级别配置
  • cluster-prod/ - 生产集群级别配置(prod app + prod promoter + registry secret sync)
  • platform/ - 平台装配、契约、路由、知识治理配置
  • runbooks/ - 平台级操作手册

生产发布闭环(当前口径)

  1. 服务仓在 GitHub / Runner 构建,并把候选镜像 push 到 profile 指定的 candidate registry;当前标准优先 GHCR。
  2. 服务仓上传 ReleaseBundle artifact,并向 ljwx-release-state 发 repository_dispatch。
  3. ljwx-release-state 生成 Event -> ReleaseBundle -> ReleaseRequest -> DeployResolution。
  4. deploy-controller-v2 从 ljwx-release-state 拉取 resolution,并作为 ljwx-deploy 的唯一写入者更新 overlay。
  5. 如目标为 prod,controller 按 release/services*.yaml 的 deployImage 和 resolution 的 copyRequired 决定是否复制镜像;deployImage 为 GHCR 且 copyRequired=false 时不经过本地 Harbor。
  6. controller 把 ReleaseResult 回写到 ljwx-release-state;legacy promoter/smoke CronJob 已 suspend,不再作为默认发布入口。

组件

Gitea Runner (act_runner)

  • 支持 Gitea Actions 的弹性 runner
  • 自动伸缩: min 1, max 5 (基于 CPU/Memory)
  • 适合轻量校验、部署编排和运维任务;不再作为标准重 CI 主力
  • Harbor registry: https://harbor.omniverseai.net

配置说明

Runner labels:

  • ubuntu-latest - Ubuntu 22.04 环境
  • ubuntu-22.04 - 明确指定版本
  • docker - 支持 Docker 操作
  • self-hosted - 自托管标识

弹性伸缩策略:

  • 最小副本: 1
  • 最大副本: 5
  • CPU 阈值: 70%
  • Memory 阈值: 80%
  • 扩容: 30秒内最多翻倍或增加2个
  • 缩容: 5分钟稳定期,每分钟最多减少50%

使用方法

1. 获取 Gitea Runner Token

在 Gitea 管理界面:

  1. 访问: http://192.168.1.83:33000/admin/actions/runners
  2. 点击"创建新的 Runner"
  3. 复制生成的 Registration Token

2. 创建 Runner Token Secret

kubectl -n gitea-runner create secret generic runner-token \
  --from-literal=token=YOUR_REGISTRATION_TOKEN

3. 部署 Runner

ArgoCD 会自动同步并部署 runner。

4. 在仓库中使用

创建 .gitea/workflows/ci.yml:

name: CI

on:
  push:
    branches: [ main ]

jobs:
  build:
    runs-on: ubuntu-latest  # 或 docker, self-hosted

    steps:
      - uses: actions/checkout@v4

      - name: 构建镜像
        run: |
          docker build -t myapp:${{ gitea.sha }} .
          docker push harbor.omniverseai.net/myproject/myapp:${{ gitea.sha }}

监控

# 查看 runner pods
kubectl -n gitea-runner get pods -w

# 查看 HPA 状态
kubectl -n gitea-runner get hpa

# 查看 runner 日志
kubectl -n gitea-runner logs -l app=gitea-runner -f

故障排查

Runner 未注册

检查 token 是否正确:

kubectl -n gitea-runner get secret runner-token -o jsonpath='{.data.token}' | base64 -d

Runner 无法连接 Gitea

检查网络连通性:

kubectl -n gitea-runner run test --rm -it --image=curlimages/curl -- \
  curl http://192.168.1.83:33000

Docker 权限问题

Runner 使用宿主机 Docker socket,确保有权限访问。

Test stability

S
Description
No description provided
Readme
25 MiB
Languages
Python 71.5%
Shell 23.4%
JavaScript 4.5%
HTML 0.3%
CSS 0.3%