高级架构
Keep 架构由两个主要组件组成:
- Keep API - 基于 FastAPI 的后端服务器,处理业务逻辑和 API 端点。
- Keep Frontend - 基于 Next.js 的前端界面,用于用户交互。
- Websocket 服务器 - 用于实时更新而不刷新页面的 Soketi 服务器。
- 数据库服务器 - 用于存储和管理持久化数据的数据库。支持 SQLite、PostgreSQL、MySQL 和 SQL Server。
Kubernetes 架构
Keep 使用单个统一的 NGINX ingress 控制器将流量路由到所有组件(frontend、backend 和 websocket)。ingress 处理基于路径的路由:
默认情况下:
/路由到 Frontend(可通过global.ingress.frontendPrefix配置)/v2路由到 Backend(可通过global.ingress.backendPrefix配置)/websocket路由到 WebSocket(可通过global.ingress.websocketPrefix配置)
常规组件
TIP
Keep 使用 kubernetes secret manager 存储集成凭证等密钥。
| Kubernetes 资源 | 用途 | 必填/可选 | 来源 |
|---|---|---|---|
| ServiceAccount | 为 Pod 中运行的进程提供身份。主要用于 Keep API 访问 kubernetes secret manager | 必填 | serviceaccount.yaml |
| Role | 定义 ServiceAccount 管理密钥的权限 | 必填 | role-secret-manager.yaml |
| RoleBinding | 将 Role 与 ServiceAccount 关联 | 必填 | role-binding-secret-manager.yaml |
| Secret Deletion Job | 删除 Helm 版本时清理 Keep 相关的密钥 | 必填 | delete-secret-job.yaml |
Ingress 组件
| Kubernetes 资源 | 用途 | 必填/可选 | 来源 |
|---|---|---|---|
| Shared NGINX Ingress | 通过一个入口点路由所有外部流量 | 可选 | nginx-ingress.yaml |
Frontend 组件
| Kubernetes 资源 | 用途 | 必填/可选 | 来源 |
|---|---|---|---|
| Frontend Deployment | 管理 frontend 应用程序容器 | 必填 | frontend.yaml |
| Frontend Service | 在集群内暴露 frontend deployment | 必填 | frontend-service.yaml |
| Frontend Route (OpenShift) | 在 OpenShift 上将 frontend 服务暴露给外部流量 | 可选 | frontend-route.yaml |
| Frontend HorizontalPodAutoscaler | 自动扩展 frontend pod 数量 | 可选 | frontend-hpa.yaml |
Backend 组件
| Kubernetes 资源 | 用途 | 必填/可选 | 来源 |
|---|---|---|---|
| Backend Deployment | 管理 backend 应用程序容器 | 必填(如果 backend 启用) | backend.yaml |
| Backend Service | 在集群内暴露 backend deployment | 必填(如果 backend 启用) | backend-service.yaml |
| Backend Route (OpenShift) | 在 OpenShift 上将 backend 服务暴露给外部流量 | 可选 | backend-route.yaml |
| Backend HorizontalPodAutoscaler | 自动扩展 backend pod 数量 | 可选 | backend-hpa.yaml |
数据库组件
TIP
数据库组件是可选的。您可以使用您自己的数据库启动 Keep。
| Kubernetes 资源 | 用途 | 必填/可选 | 来源 |
|---|---|---|---|
| Database Deployment | 管理数据库容器(例如 MySQL 或 Postgres) | 可选 | db.yaml |
| Database Service | 在集群内暴露数据库 deployment | 必填(如果 deployment 启用) | db-service.yaml |
| Database PersistentVolume | 为数据库提供持久化存储 | 可选 | db-pv.yaml |
| Database PersistentVolumeClaim | 为数据库声明持久化存储 | 可选 | db-pvc.yaml |
WebSocket 组件
TIP
WebSocket 组件是可选的。您可以使用您自己的 Pusher 兼容 WebSocket 服务器启动 Keep。
| Kubernetes 资源 | 用途 | 必填/可选 | 来源 |
|---|---|---|---|
| WebSocket Deployment | 管理 WebSocket 服务器容器(Soketi) | 可选 | websocket-server.yaml |
| WebSocket Service | 在集群内暴露 WebSocket deployment | 必填(如果 WebSocket 启用) | websocket-server-service.yaml |
| WebSocket Route (OpenShift) | 在 OpenShift 上将 WebSocket 服务暴露给外部流量 | 可选 | websocket-server-route.yaml |
| WebSocket HorizontalPodAutoscaler | 自动扩展 WebSocket 服务器 pod 数量 | 可选 | websocket-server-hpa.yaml |
这些表格提供了 Keep 架构中使用的 Kubernetes 资源的全面概述,按组件类型组织。每个表格描述了每个资源的用途,指示它是必填还是可选,并提供了指向 Keep Helm charts GitHub 仓库中源模板的直接链接。
Kubernetes 配置
TIP
本节仅涵盖 kubernetes 特定的配置。要了解 Keep 特定的配置(由环境变量控制),请参阅 Keep 配置
这些组件中的每一个都可以通过 Helm chart 中的 values.yaml 文件进行自定义。
以下是每个组件可以调整的关键配置。
1. Frontend 配置
yaml
frontend:
enabled: true # 启用或禁用 frontend deployment。
replicaCount: 1 # Frontend 副本数量。
image:
repository: us-central1-docker.pkg.dev/keephq/keep/keep-ui
pullPolicy: Always # 镜像拉取策略(Always、IfNotPresent)。
tag: latest
serviceAccount:
create: true # 创建新的服务账户。
name: "" # 服务账户名称(空为默认)。
podAnnotations: {} # Frontend pod 的注解。
podSecurityContext: {} # Frontend pod 的安全上下文。
securityContext: {} # 容器的安全上下文。
service:
type: ClusterIP # 服务类型(ClusterIP、NodePort、LoadBalancer)。
port: 3000 # Frontend 服务暴露的端口。2. Backend 配置
yaml
backend:
enabled: true # 启用或禁用 backend deployment。
replicaCount: 1 # Backend 副本数量。
image:
repository: us-central1-docker.pkg.dev/keephq/keep/keep-api
pullPolicy: Always # 镜像拉取策略(Always、IfNotPresent)。
serviceAccount:
create: true # 创建新的服务账户。
name: "" # 服务账户名称(空为默认)。
podAnnotations: {} # Backend pod 的注解。
podSecurityContext: {} # Backend pod 的安全上下文。
securityContext: {} # 容器的安全上下文。
service:
type: ClusterIP # 服务类型(ClusterIP、NodePort、LoadBalancer)。
port: 8080 # Backend API 暴露的端口。3. WebSocket 服务器配置
Keep 使用 Soketi 作为其 websocket 服务器。要了解如何配置它,请参阅 Soketi 文档。
4. 数据库配置
Keep 支持大量数据库(例如 postgresql、mysql、sqlite 等)。在此描述如何将它们全部部署到 k8s 超出了范围。如果您有具体问题 - 联系我们,我们将很乐意提供帮助。