在Kubernetes 1.26.14中部署Redis单实例/集群的步骤如下(结合NFS持久化存储与认证配置):
一、部署Redis单实例(StatefulSet模式)
1. 创建配置文件 redis-statefulset.yaml
yaml
# ConfigMap存储Redis配置
apiVersion: v1
kind: ConfigMap
metadata:
name: redis-config
data:
redis.conf: |
bind 0.0.0.0
port 6379
requirepass your_secure_password # 替换为实际密码
appendonly yes
dir /data
---
# 密码Secret
apiVersion: v1
kind: Secret
metadata:
name: redis-secret
type: Opaque
data:
password: eW91cl9zZWN1cmVfcGFzc3dvcmQ= # base64编码密码
---
# StatefulSet定义
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: redis
spec:
serviceName: redis-headless
replicas: 1 # 单实例
selector:
matchLabels:
app: redis
template:
metadata:
labels:
app: redis
spec:
containers:
- name: redis
image: redis:7.0.12
command: ["redis-server", "/etc/redis/redis.conf"]
ports:
- containerPort: 6379
volumeMounts:
- name: config
mountPath: /etc/redis
- name: data
mountPath: /data
env:
- name: REDIS_PASSWORD # 从Secret注入密码
valueFrom:
secretKeyRef:
name: redis-secret
key: password
volumes:
- name: config
configMap:
name: redis-config
volumeClaimTemplates: # 动态PVC
- metadata:
name: data
spec:
accessModes: [ "ReadWriteOnce" ]
storageClassName: "nfs-redis" # 需提前创建NFS StorageClass
resources:
requests:
storage: 5Gi
---
# Headless Service(内部DNS)
apiVersion: v1
kind: Service
metadata:
name: redis-headless
spec:
clusterIP: None
selector:
app: redis
ports:
- port: 6379
name: redis
---
# NodePort Service(外部访问)
apiVersion: v1
kind: Service
metadata:
name: redis-external
spec:
type: NodePort
selector:
app: redis
ports:
- port: 6379
targetPort: 6379
nodePort: 31000 # 自定义端口范围30000-32767
2. 部署资源
bash
kubectl apply -f redis-statefulset.yaml
二、部署Redis集群(6节点3主3从)
1. 调整StatefulSet配置
yaml
# 修改StatefulSet部分
spec:
replicas: 6 # 6节点
template:
spec:
containers:
- env:
- name: REDIS_CLUSTER_ENABLED # 启用集群模式
value: "yes"
# 其他部分与单实例相同
2. 初始化集群
bash
# 进入任意Redis Pod执行集群初始化
kubectl exec -it redis-0 -- redis-cli -a your_password \
--cluster create \
$(kubectl get pods -l app=redis -o jsonpath='{range.items[*]}{.status.podIP}:6379 ') \
--cluster-replicas 1
三、关键配置说明
-
持久化存储
- 使用NFS动态供给(需提前部署StorageClass)
volumeClaimTemplates
自动创建PVC,数据目录/data
持久化
-
安全认证
- 通过Secret管理密码,避免明文暴露
requirepass
配置强制认证访问
-
服务暴露
- Headless Service提供内部DNS解析(
redis-0.redis-headless
) - NodePort Service允许外部通过节点IP:31000访问
- Headless Service提供内部DNS解析(
-
集群模式扩展
- 6节点部署时需手动初始化集群(
redis-cli --cluster create
) - 生产环境建议使用哨兵模式(Sentinel)实现高可用
- 6节点部署时需手动初始化集群(
四、验证部署
bash
# 检查资源状态
kubectl get statefulset,pvc,svc -l app=redis
# 测试单实例连接
kubectl exec -it redis-0 -- redis-cli -a your_password ping
# 查看集群状态(集群模式)
kubectl exec -it redis-0 -- redis-cli -a your_password cluster nodes