一、该搭建方式属于半自动搭建集群模式的redis,有个手动操作的过程
使用以下yaml文件,在k8s集群中执行kubectl apply -f redis.yaml 需要添加nodeselector的需要自行添加,需要修改密码和端口的可以直接修改configmap中的内容。
---
apiVersion: v1
kind: Service
metadata:
name: redis
labels:
app: redis
spec:
selector:
app: redis
appCluster: redis-cluster
ports:
- name: redis
port: 6379
clusterIP: None
---
apiVersion: v1
kind: ConfigMap
metadata:
name: redis-conf
data:
redis.conf: |
appendonly yes
cluster-enabled yes
cluster-config-file /var/lib/redis/nodes.conf
cluster-node-timeout 5000
dir /var/lib/redis
requirepass 123456
port 6379
---
apiVersion: v1
kind: Service
metadata:
name: redis-access
labels:
app: redis
spec:
selector:
app: redis
appCluster: redis-cluster
ports:
- name: redis-access
protocol: TCP
port: 6379
targetPort: 6379
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: redis
spec:
serviceName: redis
replicas: 6
selector:
matchLabels:
app: redis
appCluster: redis-cluster
template:
metadata:
labels:
app: redis
appCluster: redis-cluster
spec:
terminationGracePeriodSeconds: 20
imagePullSecrets:
- name: default
affinity:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
podAffinityTerm:
labelSelector:
matchExpressions:
- key: app
operator: In
values:
- redis
topologyKey: kubernetes.io/hostname
containers:
- name: redis
image: hub.yun.vali.com.cn/charts/redis-redis:5.0.10
command:
- "redis-server"
args:
- "/etc/redis/redis.conf"
- "--protected-mode"
- "no"
resources:
requests:
cpu: "100m"
memory: "200Mi"
ports:
- containerPort: 6379
name: redis
protocol: TCP
- containerPort: 16379
name: cluster
protocol: TCP
volumeMounts:
- name: conf
mountPath: /etc/redis
- name: data
mountPath: /var/lib/redis
volumes:
- name: conf
configMap:
name: redis-conf
items:
- key: redis.conf
path: redis.conf
- name: data
emptyDir: {}
拿到所有的pod的ip地址,登录任何一个pod中执行下面的命令,创建集群模式的redis
其中的密码和端口是在上面的configmap设置的,可以按需修改。ip地址都是pod的ip地址
redis-cli --cluster create 192.168.5.159:6379 192.168.3.209:6379 192.168.5.160:6379 192.168.3.210:6379 192.168.5.161:6379 192.168.3.211:6379 --cluster-replicas 1 -a 123456
kubectl exec -it redis-0 -n vali-service sh
验证集群状态。登录任意一个redis pod执行以下命令,
# redis-cli -c -p 6379 -a 123456
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
查看集群信息
127.0.0.1:6379> cluster info
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:3
cluster_current_epoch:6
cluster_my_epoch:1
cluster_stats_messages_ping_sent:418
cluster_stats_messages_pong_sent:427
cluster_stats_messages_sent:845
cluster_stats_messages_ping_received:422
cluster_stats_messages_pong_received:418
cluster_stats_messages_meet_received:5
cluster_stats_messages_received:845
基操:
127.0.0.1:6379> set hello world
OK
127.0.0.1:6379> set pingsan tech
-> Redirected to slot [9276] located at 192.168.3.209:6379
OK
192.168.3.209:6379> get hello #这里发生了节点ip切换,是正常的
-> Redirected to slot [866] located at 192.168.5.159:6379
"world"
192.168.5.159:6379> #这里发生了节点ip切换,是正常的
经过以上步骤,集群模式的redis就搭建好了,应用客户端可直接通过service “redis-access”进行访问
kubectl get svc -n vali-service |grep redis