kubernetes生产实践之redis-cluster

方案一自定义yaml文件安装rediscluster背景

在Kubernetes中部署Redis集群面临挑战,因为每个Redis实例都依赖于一个配置文件,该文件可以跟踪其他集群实例及其角色。为此,需要结合使用KubernetesStatefulSets和PersistentVolumes实现。
rediscluster架构示意图:


创建StatefulSetyaml文件
---apiVersion:v1kind:ConfigMapmetadata:name:redis-clusterdata::|apiVersion:apps/v1kind:StatefulSetmetadata:name:redis-clusterspec:serviceName:redis-clusterreplicas:6selector:matchLabels:app:redis-clustertemplate:metadata:labels:app:redis-clusterspec:containers:-name:redisimage:redis:6.2.1-alpineports:-containerPort:6379name:client-containerPort:16379name:gossipcommand:["/conf/","redis-server","/conf/"]env:-name:POD_IPvalueFrom:fieldRef:fieldPath::-name:confmountPath:/confreadOnly:false-name:datamountPath:/datareadOnly:falsevolumes:-name:confconfigMap:name:redis-clusterdefaultMode:0755volumeClaimTemplates:-metadata:name:dataspec:accessModes:["ReadWriteOnce"]resources:requests:storage:100GistorageClassName:rbd

注释:

cluster-migration-barrier那些分配后仍然剩余migrationbarrier个从节点的主节点才会触发节点分配,而不是分配前有migrationbarrier个从节点的主节点就会触发节点分配,默认是1,生产环境建议维持默认值protected-modeno参数是为了禁止外网访问redis,如果启用了,则只能够通过lookbackip(127.0.0.1)访问Redis,如果外网访问redis,会报出异常。apiVersion:/v1beta1控制器这里使用kruise提供的AdvancedStatefulSet,如果集群没有安装kruise,可以使用apps/v1
安装redis-cluster
[root@qd01-stop-k8s-master001redis]kubectlgetpo-nopNAMEREADYSTATUSRESTARTSAGEredis-cluster-01/1Running03m26sredis-cluster-11/1Running03m14sredis-cluster-21/1Running02m54sredis-cluster-31/1Running02m23sredis-cluster-41/1Running02m14sredis-cluster-51/1Running0114s
创建redis-clusterservice
---apiVersion:v1kind:Servicemetadata:name:redis-clusternamespace:opspec:type:ClusterIPports:-port:6379targetPort:6379name:client-port:16379targetPort:16379name:gossipselector:app:redis-cluster
[root@qd01-stop-k8s-master001redis]kubectlgetsvc-nopNAMETYPECLUSTER-IPEXTERNAL-IPPORT(S)/TCP,16379/TCP9s测试能后连通[root@qd01-stop-k8s-master001redis]kubectl-nopexec-itredis-cluster-0--redis-cli--clustercreate--cluster-replicas1$(kubectl-nopgetpods-lapp=redis-cluster-ojsonpath='{[*]}{.}:6379{}')Performinghashslotsallocationon6nodesMaster[0]-Slots0-5460Master[1]-Slots5461-10922Master[2]-:6379:6379:6379:6379:6379:6379M::6379slots:[0-5460](5461slots)masterM:09543217:6379slots:[5461-10922](5462slots)masterM:5389:6379slots:[10923-16383](5461slots)masterS::6379replicates5389ace495b68eeac85370d6783648dff68f2fb6S:0113:6379replicatesb47b27a3dbddf3fc1370cbe14ae753f4fce20b04S::6379replicates09543217c903350e963fc4fdf4acb73f8a1b7f8bCanIsettheaboveconfiguration?(type'yes'toaccept):yesNodesconfigurationupdatedAssignadifferentconfigepochtoeachnodeSingCLUSTERMEETmessagestojointheclusterWaitingfortheclustertojoin..PerformingClusterCheck(:6379)M::6379slots:[0-5460](5461slots)master1additionalreplica(s)S:0113:6379slots:(0slots)slavereplicatesb47b27a3dbddf3fc1370cbe14ae753f4fce20b04M:09543217:6379slots:[5461-10922](5462slots)master1additionalreplica(s)M:5389:6379slots:[10923-16383](5461slots)master1additionalreplica(s)S::6379slots:(0slots)slavereplicates09543217c903350e963fc4fdf4acb73f8a1b7f8bS::6379slots:(0slots)slavereplicates5389ace495b68eeac85370d6783648dff68f2fb6[OK][OK]All16384slotscovered.
验证集群信息
[root@qd01-stop-k8s-master001redis]kubectl-nopexec-itredis-cluster-0--r:6379@16379slaveb47b27a3dbddf3fc1370cbe14ae753f4f:6379@16379master-0162:6379@16379myself,master-0161:6379@16379master-0163:6379@16379slave09543217c903350e963fc4fdf4acb73f8:6379@16379slave5389ace495b68eeac85370d6783648dff68f2fb60163connected

从输出可以看到,集群总共6个节点,三主三从

方案二使用kubeDB安装redis安装kubeDB

1、安装KubeDB
获取AppsCodeLicense
下载KubeDBcharts

[root@qd01-stop-k8s-master001kubedb-community]cdkubedb-community[root@qd01-stop-k8s-master001kubedb-community]helminstallkubedb-community--namespacekube-system--set-filelicense=./:kubedb-communityLASTDEPLOYED:WedMar1015:38:592021NAMESPACE:kube-systemSTATUS:deployedREVISION:1TESTSUITE:NoneNOTES:ToverifythatKubeDBhasstarted,run:kubectlgetdeployment--namespacekube-system-l"/name=kubedb-community,/instance=kubedb-community"Nowinstall/upgradeappscode/,run:helminstallkubedb-catalogappscode/,run:helmupgradekubedb-catalogappscode/执行如下命令查看是否安装完成[root@qd01-stop-k8s-master001kubedb-community]/name=:39:42:39:45:39:42:39:45:39:43:39:45:39:43:39:45:39:43:39:46:39:43:39:46:39:44:39:46:39:44:39:46:39:44:39:46:39:45:39:46Z

3、安装KubeDBCatalog
同样,先下载

[root@qd01-stop-k8s-master001kubedb-catalog]cdkubedb-catalog[root@qd01-stop-k8s-master001kubedb-catalog]:kubedb-catalogLASTDEPLOYED:WedMar1015:50:502021NAMESPACE:kube-systemSTATUS:deployedREVISION:1TESTSUITE:None
使用kubedb安装redis

1、先看下官方给的redis生命周期示意图



kubedb安装redis支持如下特性

FeaturesAvailabilityClustering✓InstantBackup✗ScheduledBackup✗PersistentVolume✓InitializeusingSnapshot✗InitializeusingScript✗CustomConfiguration✓UsingCustomdockerimage✓BuiltinPrometheusDiscovery✓UsingPrometheusoperator✓

2、查看支持的版本

[root@qd01-stop-k8s-master001kubedb-catalog]/redis-clustercreated安装完成,可以如下查看[root@qd01-stop-k8s-master001kubedb-community]kubectlgetsvc-nopNAMETYPECLUSTER-IPEXTERNAL-IPPORT(S)/TCP5h16mredis-cluster-podsClusterIPNonenone6379/TCP17m

4、验证集群

[root@qd01-stop-k8s-master001kubedb-community]kubectl-nopexec-itredis-cluster-shard0-0--redis-cliclusterinfocluster_state:okcluster_slots_assigned:16384cluster_slots_ok:16384cluster_slots_pfail:0cluster_slots_fail:0cluster_known_nodes:6cluster_size:3cluster_current_epoch:3cluster_my_epoch:1cluster_stats_messages_ping_sent:864cluster_stats_messages_pong_sent:882cluster_stats_messages_sent:1746cluster_stats_messages_ping_received:879cluster_stats_messages_pong_received:864cluster_stats_messages_meet_received:3cluster_stats_messages_received:1746[root@qd01-stop-k8s-master001redis]#kubectl-nopexec-itredis-cluster-shard0-0--r:6379@16379master-0162:6379@16379slave2c06092fafa99e0158e39e6237a04fed25:6379@16379slavee83446c368839c5fdccf5f70e3b1004eb67:6379@16379myself,master-0161:6379@16379slave1895cb4b9c31b848666c61000e502f55a29:6379@16379master-0163connected10923-16383

免责声明:本文章如果文章侵权,请联系我们处理,本站仅提供信息存储空间服务如因作品内容、版权和其他问题请于本站联系