k8s部署redis一主一从
时间: 2025-07-12 19:25:44 浏览: 13
### 部署 Redis 主从架构于 Kubernetes 上
#### 准备工作
为了在 Kubernetes 中成功部署 Redis 实现一主两从的架构,需确认已安装 Kubernetes 集群以及 Containerd 容器运行时环境[^4]。
#### 创建命名空间
建议创建专用命名空间来管理所有的 Redis 资源。这有助于保持项目整洁有序。
```bash
kubectl create namespace redis-cluster
```
#### 编写配置文件
编写 YAML 文件用于描述 Pod 和 Service 的规格说明。下面是一个简单的例子:
##### 1. Redis Master Deployment
```yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: redis-master
labels:
app: redis
spec:
replicas: 1
selector:
matchLabels:
app: redis
role: master
template:
metadata:
labels:
app: redis
role: master
spec:
containers:
- name: master
image: redis:latest
ports:
- containerPort: 6379
---
apiVersion: v1
kind: Service
metadata:
name: redis-master-headless
spec:
clusterIP: None
selector:
app: redis
role: master
ports:
- port: 6379
```
##### 2. Redis Slave StatefulSet
由于 Redis 副本通常依赖静态 IP 地址通信,因此推荐使用 `StatefulSet` 来代替普通的 `Deployment` 或者 `ReplicaSet`.
```yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: redis-slave
spec:
serviceName: "redis-slave"
replicas: 2
selector:
matchLabels:
app: redis
role: slave
template:
metadata:
labels:
app: redis
role: slave
spec:
initContainers:
- name: bootstrap-redis-config
image: busybox
command: ['sh', '-c', 'echo "slaveof redis-master-headless.default.svc.cluster.local 6379" >> /data/redis.conf']
volumeMounts:
- mountPath: "/data"
name: data
containers:
- name: slave
image: redis:alpine
args: ["--appendonly", "yes"]
env:
- name: REDIS_MASTER_HOST
value: "redis-master-headless"
- name: REDIS_MASTER_PORT
value: "6379"
ports:
- containerPort: 6379
volumeMounts:
- mountPath: "/data"
name: data
volumes:
- name: data
emptyDir: {}
---
apiVersion: v1
kind: Service
metadata:
name: redis-slave-headless
spec:
clusterIP: None
selector:
app: redis
role: slave
ports:
- port: 6379
```
上述配置中包含了两个部分:一个是作为主服务器的角色;另一个是以状态集形式存在的副本角色,并通过初始化容器设置其成为特定主机名下的客户端.
#### 应用配置到 K8S 环境
保存以上内容至 `.yaml` 文件后执行命令应用这些资源定义:
```bash
kubectl apply -f path/to/your/file.yaml --namespace=redis-cluster
```
#### 测试连接性
可以通过进入任意一个 pod 内部测试与其他成员之间的连通情况:
```bash
kubectl exec -it $(kubectl get pods | grep redis-master | awk '{print $1}') -- bash
redis-cli ping
exit
```
如果一切正常,则表示已经成功搭建了一个基于 Kubernetes 平台的一主多从结构化的 Redis 数据库实例.
阅读全文
相关推荐



















