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)
- 创建命名空间:
kubectl create ns middleware。 - 编写 values.yaml: 虽然可以用原生 YAML,但我建议你继续用 Helm 模式。
- 使用 Bitnami 的 Redis Chart:
helm repo add bitnami https://charts.bitnami.com/bitnami。 - 在你的
001-redis文件夹下创建一个my-values.yaml。
- 关联 Longhorn: 在
my-values.yaml中设置global.storageClass: longhorn。 - 关联 S3 (可选): 如果你想把 Redis 的 RDB 定期传到 S3,可以写一个简单的
CronJob。
你需要我为你提供一份完整的、可直接在 001-redis 文件夹下运行的 helm install 命令和对应的 values.yaml 配置吗?