需要提前创建longhorn sc 资源

yaml
# Redis StatefulSet 配置(开发/测试环境单副本)
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: redis
labels:
app.kubernetes.io/name: redis
spec:
serviceName: redis-headless
replicas: 1
# 标签选择器:匹配 Pod 模板标签
selector:
matchLabels:
app.kubernetes.io/name: redis
template:
metadata:
labels:
app.kubernetes.io/name: redis
spec:
securityContext:
fsGroup: 0
runAsUser: 0
runAsGroup: 0
containers:
- name: redis
# 镜像与版本
image: redis:8.4.0
imagePullPolicy: IfNotPresent
resources:
requests:
cpu: 200m
memory: 512Mi
limits:
cpu: 500m
memory: 1Gi
ports:
- containerPort: 6379
name: redis
protocol: TCP
# 环境变量配置(原 environment 直接迁移,生产环境建议用 Secret 存储密码)
env:
# 时区配置:统一集群时区
- name: TZ
value: "Asia/Shanghai"
# 数据目录挂载
volumeMounts:
- name: redis-data
mountPath: /data
# 子路径:避免存储目录权限冲突,隔离 Redis 数据文件
subPath: redis
- name: redis-config
mountPath: /etc/redis
readOnly: true
command: ["redis-server"]
args: ["/etc/redis/redis.conf"]
volumes:
- name: redis-config
configMap:
name: redis-config
# PVC 模板:为 StatefulSet 每个 Pod 自动创建专属持久化存储
volumeClaimTemplates:
- metadata:
name: redis-data
labels:
app.kubernetes.io/name: redis
spec:
# 访问模式:单节点读写
accessModes: ["ReadWriteOnce"]
# 存储类:使用 longhorn 分布式存储
storageClassName: "longhorn"
# 存储资源请求:根据数据量预估配置
resources:
requests:
storage: 5Gi
---
# Redis 无头服务(StatefulSet 必需,提供固定网络标识)
apiVersion: v1
kind: Service
metadata:
name: redis-headless
labels:
app.kubernetes.io/name: redis
spec:
# 无头服务标识:clusterIP=None
clusterIP: None
selector:
app.kubernetes.io/name: redis
ports:
- name: redis
port: 6379
targetPort: 6379
protocol: TCP
---
# Redis 外部访问服务(NodePort 类型,对应原端口映射 6379:6379)
apiVersion: v1
kind: Service
metadata:
name: redis-service
labels:
app.kubernetes.io/name: redis
spec:
# 关联 Redis Pod 标签
selector:
app.kubernetes.io/name: redis
# 服务类型:NodePort(开发/测试环境外部访问常用方式)
type: NodePort
ports:
- name: redis
# Service 集群内部端口
port: 6379
# 目标端口:映射至 Pod 暴露端口
targetPort: 6379
# 节点暴露端口:30000-32767 范围内,确保集群内唯一(此处沿用原端口 6379,需确认集群未占用)
nodePort: 6379
protocol: TCP
---
apiVersion: v1
kind: ConfigMap
metadata:
name: redis-config
labels:
app.kubernetes.io/name: redis
data:
redis.conf: |
bind 0.0.0.0
protected-mode no
daemonize no
pidfile /var/run/redis_6379.pid
logfile /data/redis_6379.log
requirepass lb781023
user harbor on >lb781023 allcommands allkeys