Files
k3s/010-中间件/readme.md
2026-02-05 00:11:05 +08:00

103 lines
3.2 KiB
Markdown
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.
note
kubectl apply -f /home/fei/k3s/010-中间件/001-redis/redis-pvc.yaml
既然你的基础设施已经有了 **PG16、S3、Longhorn 和 Helm**,那么 Redis 的规划应该朝着“标准生产环境”看齐。
我们将 Redis 放在一个新的分类文件夹下,与基础设施解耦。
---
## 1. 目录结构规划
建议在你的 `k3s` 根目录下创建 `010-中间件`,专门存放这类有状态的服务:
```text
/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。
```yaml
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 Chart`helm repo add bitnami https://charts.bitnami.com/bitnami`
* 在你的 `001-redis` 文件夹下创建一个 `my-values.yaml`
3. **关联 Longhorn**`my-values.yaml` 中设置 `global.storageClass: longhorn`
4. **关联 S3 (可选)** 如果你想把 Redis 的 RDB 定期传到 S3可以写一个简单的 `CronJob`
**你需要我为你提供一份完整的、可直接在 `001-redis` 文件夹下运行的 `helm install` 命令和对应的 `values.yaml` 配置吗?**