- 创建namespace
sudo kubectl create namespace redis-cluster
- 创建configmap
apiVersion: v1
kind: ConfigMap
metadata:
name: redis-conf
namespace: redis-cluster
data:
redis.conf: |
appendonly yes
cluster-enabled yes
cluster-config-file /var/lib/redis/nodes.conf
dir /var/lib/redis
port 6379
- 创建PV
apiVersion: v1
kind: PersistentVolume
metadata:
name: nfspv0
spec:
storageClassName: redis-storage-class
capacity:
storage: 1Gi
accessModes:
- ReadWriteOnce
nfs:
path: "/redis0"
server: 192.168.43.205
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: nfspv1
spec:
storageClassName: redis-storage-class
capacity:
storage: 1Gi
accessModes:
- ReadWriteOnce
nfs:
path: "/redis1"
server: 192.168.43.205
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: nfspv2
spec:
storageClassName: redis-storage-class
capacity:
storage: 1Gi
accessModes:
- ReadWriteOnce
nfs:
path: "/redis2"
server: 192.168.43.205
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: nfspv3
spec:
storageClassName: redis-storage-class
capacity:
storage: 1Gi
accessModes:
- ReadWriteOnce
nfs:
path: "/redis3"
server: 192.168.43.205
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: nfspv4
spec:
storageClassName: redis-storage-class
capacity:
storage: 1Gi
accessModes:
- ReadWriteOnce
nfs:
path: "/redis4"
server: 192.168.43.205
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: nfspv5
spec:
storageClassName: redis-storage-class
capacity:
storage: 1Gi
accessModes:
- ReadWriteOnce
nfs:
path: "/redis5"
server: 192.168.43.205
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: nfspv6
spec:
storageClassName: redis-storage-class
capacity:
storage: 1Gi
accessModes:
- ReadWriteOnce
nfs:
path: "/redis6"
server: 192.168.43.205
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: nfspv7
spec:
storageClassName: redis-storage-class
capacity:
storage: 1Gi
accessModes:
- ReadWriteOnce
nfs:
path: "/redis7"
server: 192.168.43.205
- 创建head-less service
StatefulSet需建立headlessService
apiVersion: v1
kind: Service
metadata:
name: redis-headless-server
namespace: redis-cluster
labels:
app: redis-cluster-app
spec:
ports:
- name: redis-port
port: 6379
clusterIP: None
selector:
app: redis-cluster-app
- 创建statefulset
–cluster-announce-ip $(MY_POD_IP) 可在pod重启集群自动恢复时带入新ip
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: redis-app
namespace: redis-cluster
spec:
selector:
matchLabels:
app: redis-cluster-app
serviceName: "redis-cluster-app"
replicas: 6
template:
metadata:
labels:
app: redis-cluster-app
spec:
containers:
- name: redis
image: "redis:6.0.6"
command:
- "redis-server"
args:
- "/etc/redis/redis.conf"
- "--protected-mode"
- "no"
- "--cluster-announce-ip"
- " $(MY_POD_IP)"
ports:
- name: redis
containerPort: 6379
protocol: "TCP"
- name: cluster
containerPort: 16379
protocol: "TCP"
volumeMounts:
- name: "redis-conf"
mountPath: "/etc/redis"
- name: "redis-data"
mountPath: "/var/lib/redis"
env:
- name: MY_POD_IP
valueFrom:
fieldRef:
fieldPath: status.podIP
volumes:
- name: "redis-conf"
configMap:
name: "redis-conf"
items:
- key: "redis.conf"
path: "redis.conf"
volumeClaimTemplates:
- metadata:
name: redis-data
spec:
accessModes: [ "ReadWriteOnce" ]
storageClassName: "redis-storage-class"
resources:
requests:
storage: 1Gi
- 创建redis cluster
kubectl get pods -l app=redis-cluster-app -o jsonpath='{range.items[*]}{.status.podIP}:6379 ' -n redis-cluster #取得redis pod ip
kubectl -n redis-cluster exec -it redis-app-0 -- redis-cli --cluster create --cluster-replicas 1 \
$(kubectl get pods -l app=redis-cluster-app -o jsonpath='{range.items[*]}{.status.podIP}:6379 ' -n redis-cluster )
7 创建service
apiVersion: v1
kind: Service
metadata:
name: redis-service
namespace: redis-cluster
labels:
app: redis-cluster-app
spec:
ports:
- name: redis-port
protocol: "TCP"
port: 6379
targetPort: 6379
selector:
app: redis-cluster-app
参考
https://www.tpisoftware.com/tpu/articleDetails/2011