首次提交:初始化项目

This commit is contained in:
fei
2026-02-05 00:11:05 +08:00
commit 26eaf8110b
171 changed files with 17105 additions and 0 deletions

103
010-中间件/readme.md Normal file
View 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` 配置吗?**