Files

note kubectl apply -f /home/fei/k3s/010-中间件/001-redis/redis-pvc.yaml

既然你的基础设施已经有了 PG16、S3、Longhorn 和 Helm,那么 Redis 的规划应该朝着“标准生产环境”看齐。

我们将 Redis 放在一个新的分类文件夹下,与基础设施解耦。


1. 目录结构规划

建议在你的 k3s 根目录下创建 010-中间件,专门存放这类有状态的服务:

/home/fei/k3s/
├── 009-基础设施/
│   ├── 002-s3/
│   ├── 003-helm/
│   └── 004-longhorn/
└── 010-中间件/
    └── 001-redis/
        ├── kustomization.yaml (或 deploy.sh)
        ├── pvc.yaml          (声明 Longhorn 存储)
        ├── redis-conf.yaml   (配置密码和持久化)
        └── deployment.yaml   (或 statefulset.yaml)


2. 核心部署方案StatefulSet vs Deployment

对于 Redis 独立 Pod

  • 不要用 Deployment 它是为无状态设计的Pod 名字随机,且多个副本会争抢同一个存储。
  • 推荐使用 StatefulSet 专门用于数据库。Pod 名字固定(如 redis-0),且能完美绑定 Longhorn 的磁盘。

3. 关键配置清单 (YAML 逻辑)

A. 存储规划 (pvc.yaml)

利用 Longhorn 提供的动态供应,不需要手动创建 PV。

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: redis-data
  namespace: middleware
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: longhorn # 指向你刚装好的 Longhorn
  resources:
    requests:
      storage: 5Gi # Redis 主要是内存存储5G 足够放持久化文件了

B. 配置规划 (redis-conf.yaml)

为了安全和持久化,通过 ConfigMap 管理配置:

  • 密码: 必须设置 requirepass
  • 持久化: 开启 appendonly yes (AOF),每秒同步一次,保证数据在 Longhorn 上的安全。

4. 性能与资源限制 (Resources)

在 Kubernetes 中跑 Redis最忌讳不设限制。如果 Redis 内存泄露,会撑爆整个 K3s 节点。

  • Memory Limit 必须设置。例如给 2GB 内存。
  • maxmemory Redis 内部配置应略小于 Pod 限制(如 1.5GB),防止被系统 OOM Kill。

5. 进阶:如何监控?

既然你已经有了这些基础设施,建议 Redis 规划中预留 Prometheus Exporter 的位置。

  • 在 Redis Pod 旁边加一个辅助容器Sidecar专门把 Redis 的运行状态(命中率、内存占用、连接数)转为监控指标。

6. 你的执行清单 (Action Plan)

  1. 创建命名空间: kubectl create ns middleware
  2. 编写 values.yaml 虽然可以用原生 YAML但我建议你继续用 Helm 模式。
  • 使用 Bitnami 的 Redis Charthelm repo add bitnami https://charts.bitnami.com/bitnami
  • 在你的 001-redis 文件夹下创建一个 my-values.yaml
  1. 关联 Longhornmy-values.yaml 中设置 global.storageClass: longhorn
  2. 关联 S3 (可选) 如果你想把 Redis 的 RDB 定期传到 S3可以写一个简单的 CronJob

你需要我为你提供一份完整的、可直接在 001-redis 文件夹下运行的 helm install 命令和对应的 values.yaml 配置吗?