# lokistack 平台本体 # # 关键约束: # 1) replicas 必须为 1:JSON DB 为单写者,多副本会互相覆盖。 # 2) strategy 必须为 Recreate:RollingUpdate 期间会同时存在两个 Pod 挂同一个 # RWO PVC,两个进程同时写数据文件会导致数据丢失。 # 3) /app/data 必须挂 PVC,否则重启后 DB / kubeconfig / known_hosts 全丢。 apiVersion: apps/v1 kind: Deployment metadata: name: lokistack namespace: log labels: app: lokistack spec: replicas: 1 strategy: type: Recreate selector: matchLabels: app: lokistack template: metadata: labels: app: lokistack spec: # 优雅停机:平台收到 SIGTERM 后要先停 HTTP、等告警引擎结束、 # 再把 JSON DB 完整落盘。给 30s 窗口,避免 kubelet 直接 SIGKILL # 导致数据文件被截断(JSON 全量写盘,写一半就丢全库)。 terminationGracePeriodSeconds: 30 securityContext: runAsUser: 1000 runAsGroup: 1000 fsGroup: 1000 containers: - name: lokistack image: lghost/lokistack:latest imagePullPolicy: Always ports: - name: http containerPort: 8080 env: # 可选:指定 admin 初始密码。不设置则自动生成 16 位随机密码, # 写入 PVC 的 initial-admin-password.txt 并打印到首次启动日志。 # 获取:kubectl -n log exec deploy/lokistack -- cat /app/data/initial-admin-password.txt # 自定义: # - name: ADMIN_INIT_PASSWORD # valueFrom: # secretKeyRef: # name: lokistack-secrets # key: ADMIN_INIT_PASSWORD # optional: true - name: DATA_DIR value: /app/data - name: JWT_SECRET valueFrom: secretKeyRef: name: lokistack-secrets key: JWT_SECRET - name: ENCRYPTION_KEY valueFrom: secretKeyRef: name: lokistack-secrets key: ENCRYPTION_KEY # 可选:挂载本地集群 kubeconfig 时启用 # - name: KUBECONFIG # value: /home/lokistack/.kube/config volumeMounts: - name: data mountPath: /app/data # 可选:本地集群 kubeconfig(in-cluster 管理本集群时用) # - name: kubeconfig # mountPath: /home/lokistack/.kube # readOnly: true readinessProbe: httpGet: path: /api/v1/health port: http initialDelaySeconds: 5 periodSeconds: 10 timeoutSeconds: 5 failureThreshold: 3 livenessProbe: httpGet: path: /api/v1/health port: http # DB 全量落盘(尤其审计表变大后)可能占用几秒, # liveness 必须留足窗口,否则写盘中被 kubelet 杀掉 = 数据损坏 initialDelaySeconds: 30 periodSeconds: 20 timeoutSeconds: 10 failureThreshold: 5 # 资源配置依据(实测):平台要扛 JSON DB 全量读写、 # 每分钟一轮告警评估、以及批量发布时的并发 API。 # 原先 1C/1Gi 在批量操作时会顶到 OOM(Loki 侧就因此被 OOMKilled 过)。 resources: requests: cpu: 500m memory: 512Mi limits: cpu: "4" memory: 4Gi volumes: - name: data persistentVolumeClaim: claimName: lokistack-data # - name: kubeconfig # secret: # secretName: lokistack-kubeconfig