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 卷迁移命令
This commit is contained in:
1 parent
b65dcc9677
commit
3c9388658b
13 files changed
+230
-152
No files matched your search
@@ -21,6 +21,84 @@
|
||||
|
||||
---
|
||||
|
||||
---
|
||||
|
||||
## 从 opsx-loki 升级(资源更名说明)
|
||||
|
||||
本版本把所有资源名从 `opsx-loki` / `opsxloki` 统一改为 **`lokistack`**,包括镜像、Deployment、
|
||||
Service、PVC、Secret、docker-compose 卷名。
|
||||
|
||||
### Kubernetes 用户
|
||||
|
||||
资源名已变,**不能直接 `kubectl apply` 覆盖**(会新建空 PVC)。按下面顺序迁移,**零数据丢失**:
|
||||
|
||||
```bash
|
||||
# 0) 先备份(数据只有几十 KB)
|
||||
kubectl -n log exec deploy/opsx-loki -- tar czf - -C /app/data . > /tmp/data.tar.gz
|
||||
kubectl -n log get secret opsxloki-secrets -o yaml > /tmp/secret-old.yaml
|
||||
kubectl -n log get pvc opsxloki-data -o yaml > /tmp/pvc-old.yaml
|
||||
|
||||
# 1) 停旧服务(Recreate + RWO,必须停)
|
||||
kubectl -n log scale deploy opsx-loki --replicas=0
|
||||
kubectl -n log wait --for=delete pod -l app=opsx-loki --timeout=120s
|
||||
|
||||
# 2) 复制 Secret(值不变,密钥才不会失效)
|
||||
kubectl -n log get secret opsxloki-secrets -o yaml \
|
||||
| sed 's/name: opsxloki-secrets/name: lokistack-secrets/' \
|
||||
| kubectl apply -f -
|
||||
|
||||
# 3) 只建新 PVC
|
||||
kubectl apply -f kubernetes/pvc.yaml
|
||||
kubectl -n log wait --for=jsonpath='{.status.phase}'=Bound pvc/lokistack-data --timeout=180s
|
||||
|
||||
# 4) 恢复数据到新 PVC(起临时 Pod 挂载)
|
||||
kubectl -n log run restore --image=alpine:3.20 --restart=Never \
|
||||
--overrides='{"spec":{"containers":[{"name":"r","image":"alpine:3.20","command":["sleep","600"],"volumeMounts":[{"name":"d","mountPath":"/data"}]}],"volumes":[{"name":"d","persistentVolumeClaim":{"claimName":"lokistack-data"}}]}}'
|
||||
kubectl -n log wait --for=condition=Ready pod/restore --timeout=120s
|
||||
kubectl -n log cp /tmp/data.tar.gz restore:/tmp/
|
||||
kubectl -n log exec restore -- sh -c 'cd /data && tar xzf /tmp/data.tar.gz && chown -R 1000:1000 /data'
|
||||
kubectl -n log delete po restore
|
||||
|
||||
# 5) 启动新服务
|
||||
kubectl apply -f kubernetes/deployment.yaml -f kubernetes/service.yaml -f kubernetes/service-nodeport.yaml
|
||||
kubectl -n log rollout status deploy/lokistack --timeout=240s
|
||||
|
||||
# 6) 若有 Ingress,改后端(TKE qcloud 要 NodePort)
|
||||
kubectl -n log patch ingress <你的ingress名> --type=json \
|
||||
-p='[{"op":"replace","path":"/spec/rules/0/http/paths/0/backend/service/name","value":"lokistack-nodeport"}]'
|
||||
|
||||
# 7) 确认服务正常后再删旧资源
|
||||
kubectl -n log delete deploy opsx-loki
|
||||
kubectl -n log delete svc opsx-loki opsx-loki-nodeport
|
||||
# 旧 PVC / Secret 建议保留 7 天做回滚兜底
|
||||
# kubectl -n log delete pvc opsxloki-data
|
||||
# kubectl -n log delete secret opsxloki-secrets
|
||||
```
|
||||
|
||||
### Docker Compose 用户
|
||||
|
||||
卷名 `opsxloki-data` → `lokistack-data`。**旧数据不会自动迁移**,需要手动拷:
|
||||
|
||||
```bash
|
||||
# 停服务
|
||||
docker compose down
|
||||
|
||||
# 创建新卷并迁移数据
|
||||
docker volume create lokistack-data
|
||||
docker run --rm -v opsxloki-data:/from -v lokistack-data:/to alpine \
|
||||
sh -c 'cp -av /from/. /to/ && chown -R 1000:1000 /to'
|
||||
|
||||
# 重新启动(会用新卷)
|
||||
docker compose up -d
|
||||
|
||||
# 验证数据在
|
||||
docker compose exec lokistack cat /app/data/opsxloki.json | head -c 100
|
||||
```
|
||||
|
||||
> **注意**:数据文件名仍叫 `opsxloki.json`(代码里硬编码,不改),只是目录/卷名变了。
|
||||
|
||||
---
|
||||
|
||||
## 快速开始
|
||||
|
||||
### 前置条件
|
||||
|
||||
Reference in new issue
Block a user