apiVersion: apps/v1
kind: Deployment
metadata:
name: ai-backup-api
namespace: personal-cloud
labels:
app: ai-backup-api
spec:
replicas: 1
selector:
matchLabels:
app: ai-backup-api
template:
metadata:
labels:
app: ai-backup-api
application: ai-backup
spec:
schedulerName: yunikorn
containers:
- name: api
image: your-dockerhub-user/ai-backup-api:0.1.0
ports:
- containerPort: 8000
envFrom:
- configMapRef:
name: ai-backup-config
resources:
requests:
cpu: "100m"
memory: "128Mi"
limits:
cpu: "500m"
memory: "512Mi"
volumeMounts:
- name: conversation-data
mountPath: /data
volumes:
- name: conversation-data
emptyDir: {}
apiVersion: batch/v1
kind: CronJob
metadata:
name: ai-backup-indexer
namespace: personal-cloud
spec:
schedule: "*/30 * * * *"
concurrencyPolicy: Forbid
successfulJobsHistoryLimit: 2
failedJobsHistoryLimit: 3
jobTemplate:
spec:
template:
metadata:
labels:
application: ai-backup-indexer
spec:
schedulerName: yunikorn
restartPolicy: OnFailure
containers:
- name: indexer
image: your-dockerhub-user/ai-backup-indexer:0.1.0
command:
- python
- /app/index.py
resources:
requests:
cpu: "50m"
memory: "64Mi"
limits:
cpu: "300m"
memory: "256Mi"
volumeMounts:
- name: conversation-data
mountPath: /data
volumes:
- name: conversation-data
emptyDir: {}
這個範例的功能可以是:
- 接收瀏覽器貼上的 AI 對話。
- 產生 Markdown 與 JSON 兩種格式。
- 使用標籤保存來源,例如 `duck-ai`、`chatgpt`、`youtube`。
- 建立標題、日期與關鍵字索引。
- 透過瀏覽器搜尋過去的對話。
- 未來再將 `emptyDir` 改成 PersistentVolume,避免 Pod 重建後資料消失。
`ConfigMap` 適合保存非機密設定,例如儲存路徑、服務模式與預設格式;Kubernetes 可以把 ConfigMap 內容注入環境變數或掛載成檔案。 [kubernetes](https://kubernetes.io/docs/concepts/configuration/configmap/)
## 其他四個服務怎麼設計
### 1. 部落格流量分析
架構可以是:
```text
Web access log
↓
Python parser
↓
DuckDB
↓
FastAPI
↓
簡易儀表板