Kubernetes部署Redis集群——三主三从模式
一、Dockerfile的编写
在虚拟中安装一个redis
FROM redis:5.0.14
ADD logs /opt/redis/logs
ADD data /opt/redis/data
ADD bin/redis.conf /etc/redis/redis.conf
二、YAML文件的编写
创建 PersistentVolume
创建六个PV,持久化redis的数据
apiVersion: v1
kind: PersistentVolume
metadata:
name: nfs-pv0
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteOnce
nfs:
server: 192.168.1.236
path: /data/redis/cluster0
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: nfs-pv1
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteOnce
nfs:
server: 192.168.1.236
path: /data/redis/cluster1
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: nfs-pv2
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteOnce
nfs:
server: 192.168.1.236
path: /data/redis/cluster2
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: nfs-pv3
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteOnce
nfs:
server: 192.168.1.236
path: /data/redis/cluster3
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: nfs-pv4
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteOnce
nfs:
server: 192.168.1.236
path: /data/redis/cluster4
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: nfs-pv5
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteOnce
nfs:
server: 192.168.1.236
path: /data/redis/cluster5
创建PVC
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: data-redis-0
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: data-redis-1
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: data-redis-2
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: data-redis-3
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: data-redis-4
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: data-redis-5
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
Config Yaml
update-ip.sh 是用于Pod停掉后,将nodes.conf中的旧的Ip替换为新的IP,从而达到不会因为IP变化导致集群无法正常使用
apiVersion: v1
data:
update-ip.sh: "#!/bin/sh\n CLUSTER_CONFIG=\"/data/nodes.conf\"\n echo \"POD_IP
is ${POD_IP}\"\n if [ -f ${CLUSTER_CONFIG} ]; then\n if [ -z \"${POD_IP}\"
]; then \n echo \"Unable to determine Pod IP address!\"\n exit 1\n
\ fi\n echo \"Updating my IP to ${POD_IP} in ${CLUSTER_CONFIG}\"\n sed
-i.bak -e \"/myself/ s/[0-9]\\{1,3\\}\\.[0-9]\\{1,3\\}\\.[0-9]\\{1,3\\}\\.[0-9]\\{1,3\\}/${POD_IP}/\"
${CLUSTER_CONFIG} \n fi\n exec \"$@\""
redis.conf: |-
appendonly yes
cluster-enabled yes
cluster-config-file /data/nodes.conf
cluster-require-full-coverage no
cluster-migration-barrier 1
cluster-node-timeout 15000
protected-mode no
port 6379
requirepass datablau
masterauth datablau
kind: ConfigMap
metadata:
name: redis-conf
Redis Yaml
apiVersion: v1
kind: Service
metadata:
name: redis
namespace: sp-bdg
labels:
app: redis
spec:
selector:
app: redis
appCluster: redis-cluster
ports:
- name: redis
port: 6379
clusterIP: None
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: redis
namespace: sp-bdg
spec:
serviceName: redis
replicas: 6
selector:
matchLabels:
app: redis
appCluster: redis-cluster
updateStrategy:
type: RollingUpdate
podManagementPolicy: Parallel
template:
metadata:
labels:
app: redis
appCluster: redis-cluster
spec:
terminationGracePeriodSeconds: 20
containers:
- name: redis
resources:
limits:
cpu: "2"
memory: 8Gi
requests:
cpu: "1"
memory: 4Gi
image: redis:5.0.14
command: ["/conf/update-ip.sh", "redis-server", "/conf/redis.conf"]
env:
- name: TZ
value: "Asia/Shanghai"
- name: POD_IP
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: status.podIP
ports:
- containerPort: 6379
name: redis
protocol: TCP
- containerPort: 16379
name: cluster
protocol: TCP
volumeMounts:
- name: conf
mountPath: /conf
- name: data
mountPath: /data
volumes:
- configMap:
defaultMode: 0755
name: redis-conf
name: conf
volumeClaimTemplates:
- metadata:
name: data
namespace: sp-bdg
spec:
accessModes: [ "ReadWriteOnce" ]
storageClassName: dtc-local-storage
resources:
requests:
storage: 1Gi