基于k8s环境部署redis-cluster集群
初始化redis集群。
创建redis.yaml文件
apiVersion: apps/v1
kind: StatefulSet
metadata:
namespace: yozo
name: redis
labels:
app: redis
spec:
serviceName: redis-service
replicas: 6
selector:
matchLabels:
app: redis
appCluster: redis-cluster
template:
metadata:
labels:
app: redis
appCluster: redis-cluster
spec: #反亲和性配置
terminationGracePeriodSeconds: 20
affinity:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
podAffinityTerm:
labelSelector:
matchExpressions:
- key: app
operator: In
values:
- redis
topologyKey: kubernetes.io/hostname
# nodeName: k3s-master-common
securityContext:
runAsUser: 1099
runAsGroup: 1099
fsGroup: 1099
containers:
- name: yozo-redis
image: hub.yozosoft.com:4431/common/x86_64/redis:6.2.13_uuid
imagePullPolicy: IfNotPresent
ports:
- name: redis
containerPort: 6379
protocol: "TCP"
- name: cluster
containerPort: 16379
protocol: "TCP"
command: ["redis-server"]
args: ["/etc/redis.conf"]
volumeMounts:
- name: redis-data
mountPath: /data/redis/data
subPath: data/redis
- name: redis-conf
mountPath: /etc/redis.conf
subPath: redis.conf
volumes:
- name: redis-conf
configMap:
name: redis-config
restartPolicy: Always
volumeClaimTemplates:
- metadata:
name: redis-data
spec:
accessModes: [ "ReadWriteMany" ]
storageClassName: "sc-yozo-data"
resources:
requests:
storage: 500M---
apiVersion: v1
kind: Service
metadata:
name: redis-service
namespace: yozo
# labels:
# app: redis
spec:
ports:
- name: redis
port: 6379
targetPort: 6379
- name: redis-cluster
port: 16379
targetPort: 16379
clusterIP: None
selector:
app: redis
appCluster: redis-cluster---
apiVersion: v1
kind: ConfigMap
metadata:
namespace: yozo
name: redis-config
data:
redis.conf: |
bind 0.0.0.0
port 6379
masterauth 123456
requirepass 123456
dbfilename dump.rdb
dir /data/redis/data
cluster-enabled yes
cluster-config-file /data/redis/data/redis-cluster.conf
cluster-node-timeout 10000
slave-read-only yes
# ignore-warnings ARM64-COW-BUG
任意进入其中一个pod
kubectl exec -it redis-0 -nyozo sh
#初始化redis集群,ip为pod的ip
redis-cli --cluster create 10.42.0.62:6379 10.42.0.63:6379 10.42.1.236:6379 10.42.1.237:6379 10.42.2.223:6379 10.42.2.224:6379 --cluster-replicas 1 --cluster-yes -a 123456
#以集群方式连接
redis-cli -c -a 123456
#查看集群连接信息
cluster nodes
32c9cf1d03fa7d145d3345a96dab6ef3b2eb2681 10.42.2.172:6379@16379 slave 1348a85cca84b6bb14d12e36293cb1dac195b72c 0 1720096783000 3 connected
476ffa1939f26caee40cdfb3185d3f1b37b9301f 10.42.2.167:6379@16379 myself,master - 0 1720096786000 1 connected 0-5460
dd58c2f7d9eb140577dad4574bb57e52b35ccef9 10.42.0.36:6379@16379 master - 0 1720096786715 2 connected 5461-10922
5e466ee40fc264e08ffdee33ca8fb38b3b3b3fa6 10.42.1.226:6379@16379 slave dd58c2f7d9eb140577dad4574bb57e52b35ccef9 0 1720096785000 2 connected
5e8f98dd9eb29901ac9f7a42bd3066fb2fdd590c 10.42.0.37:6379@16379 slave 476ffa1939f26caee40cdfb3185d3f1b37b9301f 0 1720096784705 1 connected
1348a85cca84b6bb14d12e36293cb1dac195b72c 10.42.1.225:6379@16379 master - 0 1720096785708 3 connected 10923-16383#重启一个pod,集群ip会动态识别podip变化,但是重启的那个pod自己本身却不会识别到ip变化
#调整一下启动参数,使其动态获取ip
command: ["redis-server"]
args: ["/etc/redis.conf"]
args:
- /etc/redis.conf
- --cluster-announce-ip
- "$(POD_IP)"
env:
- name: POD_IP
valueFrom:
fieldRef:
fieldPath: status.podIP
cluster info
#测试添加一个key值
set 1 v1
#登录其他节点验证
get 1
创建一个service暴漏服务
apiVersion: v1
kind: Service
metadata:
name: redis-yozo
namespace: yozo
labels:
app: redis
spec:
ports:
- name: redis-port
protocol: "TCP"
port: 6379
targetPort: 6379
- name: redis-cluster
protocol: "TCP"
port: 16379
targetPort: 16379
type: LoadBalancer
selector:
app: redis
appCluster: redis-cluster
更多推荐
所有评论(0)