Files
LokiStack/kubernetes/deployment.yaml
T
opsx 3c9388658b refactor: 资源名 opsx-loki/opsxloki → lokistack(线上已迁移完成)
【已在线完成,零数据丢失】
K8s ns=log 资源全部改名:
  Deployment  opsx-loki          → lokistack
  Service     opsx-loki          → lokistack
  Service     opsx-loki-nodeport → lokistack-nodeport
  PVC         opsxloki-data      → lokistack-data
  Secret      opsxloki-secrets   → lokistack-secrets
  Label       app: opsx-loki     → app: lokistack
  Ingress     log.astx.club 后端  → lokistack-nodeport:8080
  镜像        lghost/opsxloki     → lghost/lokistack
  docker-compose 卷/容器名同步更名

【保留不变(改了会出事)】
  namespace: log
  数据文件名 opsxloki.json(代码硬编码)
  容器内路径 /app/data

【迁移过程】
  1. 备份 PVC 数据(32KB) + Secret 原值 + 旧 yaml → /root/lokistack-migration-backup-20261026-171141
  2. scale 旧 Deployment → 0,等 Pod 消失
  3. 复制 Secret(JWT sha256 校验一致)
  4. 新建 PVC lokistack-data(Bound 30Gi cbs)
  5. 临时 Pod 恢复数据(chown 1000:1000,opsxloki.json 保留 0600)
  6. apply 新 Deployment → 1/1 Running
  7. 修复 Ingress 后端(TKE qcloud 要求 NodePort)→ CLB 恢复 200
  8. 删除旧 Deployment / 失效 Service

【验证】
  lokistack 1/1,0 重启,镜像 lghost/lokistack:latest(statically linked)
  /api/v1/health → {"status":"ok","version":"2.0.0"}
  /app/data/opsxloki.json 610B 完整(admin 用户 + 配置)
  http://log.astx.club/ → HTTP 200
  镜像加固:admin123=0、/app/backend/=0、initial-admin-password.txt 存在

【回滚兜底(建议 7 天后删)】
  pvc/opsxloki-data、secret/opsxloki-secrets

【文档】
  README 新增「从 opsx-loki 升级」章节:
  K8s 七步迁移脚本 + docker-compose 卷迁移命令
2026-10-26 17:16:15 +00:00

98 lines
3.0 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# lokistack 平台本体
#
# 关键约束:
# 1) replicas 必须为 1:JSON DB 为单写者,多副本会互相覆盖。
# 2) strategy 必须为 Recreate:RollingUpdate 期间会同时存在两个 Pod 挂同一个
# RWO PVC,两个进程同时写 opsxloki.json 会导致数据丢失。
# 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:
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
livenessProbe:
httpGet:
path: /api/v1/health
port: http
initialDelaySeconds: 30
periodSeconds: 20
failureThreshold: 5
resources:
requests:
cpu: 200m
memory: 256Mi
limits:
cpu: "1"
memory: 1Gi
volumes:
- name: data
persistentVolumeClaim:
claimName: lokistack-data
# - name: kubeconfig
# secret:
# secretName: lokistack-kubeconfig