跳转至

云原生概览

KanjiIQ遵循云原生原则设计,可在任何符合Kubernetes标准的平台上移植。应用使用标准Kubernetes API,不包含任何专有云提供商扩展。

十二要素应用对齐

要素 KanjiIQ实现
I. 代码库 单一Git仓库(Forgejo),纳入版本控制
II. 依赖 pubspec.yaml(Dart)和requirements-docs.txt(Python)中显式声明
III. 配置 通过Kubernetes Secrets和ConfigMaps注入的环境变量
IV. 后端服务 PostgreSQL通过DATABASE_URL访问——无需代码更改即可替换
V. 构建、发布、运行 多阶段Docker构建 → 标记镜像 → Kubernetes滚动更新
VI. 进程 无状态应用容器;状态存储在PostgreSQL中
VII. 端口绑定 服务自包含:前端:80,后端:8080
VIII. 并发 通过Kubernetes副本实现水平扩展
IX. 易处理 快速启动、优雅关闭、健康探针
X. 开发/生产等价 预发布命名空间镜像生产清单
XI. 日志 标准输出/标准错误(Kubernetes捕获到节点文件系统)
XII. 管理进程 数据库迁移作为一次性命令运行

是什么让KanjiIQ成为云原生?

仅使用标准Kubernetes API

所有资源使用标准的apps/v1v1networking.k8s.io/v1 API组:

  • Deployment(非云特定的托管服务)
  • Service(ClusterIP——在任何地方都适用)
  • Ingress(标准网络API)
  • PersistentVolumeClaim(云无关的存储请求)
  • Secret(标准配置管理)

唯一的非标准CRD是Traefik Middlewares——可以在任何平台上用等效的Ingress控制器功能替代。

全面容器化

每个组件都有生产就绪的Dockerfile:

组件 Dockerfile 基础镜像
前端 Dockerfile.frontend nginx:alpine
后端 Dockerfile.backend dart:stable
文档 Dockerfile.docs nginx:alpine

所有镜像:

  • 使用多阶段构建(小体积生产镜像)
  • 以非root用户运行(UID 1000)
  • 包含健康检查
  • 推送到容器仓库(可移植到任何仓库)

基础设施即代码

100%的基础设施定义在版本控制的YAML中:

k8s/
├── 00-namespace.yaml
├── 01-secrets.yaml (template)
├── 02-postgres-pvc.yaml
├── 03-postgres-deployment.yaml
├── 05-deployment.yaml
├── 06-service.yaml
├── 07-ingress.yaml
├── 08-security-middlewares.yaml
└── ...

从零开始重建整个环境只需要:

kubectl apply -f k8s/

可移植性评估

组件 可移植性 备注
应用Deployments 完全可移植 标准k8s清单
Services 完全可移植 ClusterIP在任何地方都适用
Ingress 大部分可移植 可能需要更改ingress class
PVC 完全可移植 云提供商自动供应存储
Secrets 完全可移植 所有云上API相同
Traefik Middlewares 需要适配 替换为云原生替代方案
容器镜像 完全可移植 推送到任何OCI仓库
CI/CD 需要适配 Forgejo Actions → GitHub Actions / Cloud Build

详见可移植性了解迁移到AWS和GCP的详细指南。