首次提交:初始化项目
This commit is contained in:
103
010-中间件/readme.md
Normal file
103
010-中间件/readme.md
Normal file
@@ -0,0 +1,103 @@
|
||||
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` 配置吗?**
|
||||
Reference in New Issue
Block a user