Network Security Internet Technology Development Database Servers Mobile Phone Android Software Apple Software Computer Software News IT Information

In addition to Weibo, there is also WeChat

Please pay attention

WeChat public account

Shulou

How to create Redis-cluster in Kubernetes

2025-03-04 Update From: SLTechnology News&Howtos shulou NAV: SLTechnology News&Howtos > Servers >

Share

Shulou(Shulou.com)05/31 Report--

This article introduces the relevant knowledge of "how to create Redis-cluster in Kubernetes". In the operation of actual cases, many people will encounter such a dilemma, so let the editor lead you to learn how to deal with these situations. I hope you can read it carefully and be able to achieve something!

Scenario 1: custom yaml file installation redis cluster background

Deploying Redis clusters in Kubernetes is challenging because each Redis instance relies on a configuration file that keeps track of other cluster instances and their roles. To do this, you need to use a combination of Kubernetes StatefulSets and PersistentVolumes.

Create a StatefulSet yaml file-apiVersion: v1 kind: ConfigMap metadata: redis-cluster data: update.sh: | #! / bin/sh REDIS_NODES= "/ data/nodes.conf" sed-I-e "/ myself/ s / [0-9]\ {1 POD_IP 3\. [0-9]\ {1 POD_IP 3\. [0-9]\ {1 POD_IP 3\} /" ${REDIS_NODES} exec "$@" redis.conf: | + bind 0.0.0.0 cluster-enabled yes cluster-require-full-coverage no cluster-node-timeout 30000 cluster-config-file / data/nodes.conf cluster-migration-barrier 1 appendonly yes protected-mode no-apiVersion: apps.kruise.io/v1beta1 # apiVersion: apps/v1 kind: StatefulSet metadata: name: redis-cluster spec: serviceName: redis- Cluster replicas: 6 selector: matchLabels: app: redis-cluster template: metadata: labels: app: redis-cluster spec: containers:-name: redis image: redis:6.2.1-alpine ports:-containerPort: 6379 name: client-containerPort: 16379 name: gossip command: ["/ conf/update.sh" "redis-server" "/ conf/redis.conf"] env:-name: POD_IP valueFrom: fieldRef: fieldPath: status.podIP volumeMounts:-name: conf mountPath: / conf readOnly: false-name: data mountPath: / data readOnly: false volumes: -name: conf configMap: name: redis-cluster defaultMode: 0755 volumeClaimTemplates:-metadata: name: data spec: accessModes: ["ReadWriteOnce"] resources: requests: storage: 100Gi storageClassName: rbd

Note:

Cluster-migration-barrier Node assignment is triggered only by master nodes with migration barrier slaves left after allocation, rather than by master nodes with migration barrier slaves before allocation. The default is 1. The production environment recommends that the default protected-mode no parameter be maintained to prohibit public network access to redis. If enabled, Redis can only be accessed through lookback ip (127.0.0.1), and if the public network accesses redis Will report an anomaly. ApiVersion: the apps.kruise.io/v1beta1 controller uses the Advanced StatefulSet provided by kruise. If the cluster does not have kruise installed You can use apps/v1 to install redis-cluster [root@qd01-stop-k8s-master001 redis] # kubectl apply-f install-redis.yaml configmap/redis-cluster created statefulset.apps.kruise.io/redis-cluster created [root@qd01-stop-k8s-master001 redis] # kubectl get po-n op NAME READY STATUS RESTARTS AGE redis-cluster-0 1 3m26s redis-cluster-1 1 Running 0 3m26s redis-cluster-1 1 Running 0 3m14s redis-cluster-2 1 Running 0 2m54s redis-cluster-3 1 Running 0 2m23s redis-cluster-4 1 Running 0 2m14s redis-cluster-5 1 Running 0 114s create redis-cluster service--- apiVersion: v1 kind: Service metadata: name: redis-cluster namespace: op spec: type: ClusterIP ports:-port : 6379 targetPort: 6379 name: client-port: 16379 targetPort: 16379 name: gossip selector: app: redis-cluster [root@qd01-stop-k8s-master001 redis] # kubectl apply-f redis-svc.yml service/redis-cluster created [root@qd01-stop-k8s-master001 redis] # kubectl get svc-n op NAME TYPE CLUSTER-IP EXTERNAL-IP PORT (S) AGE redis-cluster ClusterIP 10.97.197.224 6379/TCP Connect [root@qd01-stop-k8s-master001 redis] # telnet 10.97.197.224 6379 Trying 10.97.197.224 after 16379/TCP 9s test. Connected to 10.97.197.224. Escape character is'^]'. Initialize redis-cluster

Execute the following command to get the pod IP, and then create the cluster using redis-cli-- cluster

[root@qd01-stop-k8s-master001 redis] # kubectl-n op exec-it redis-cluster-0-- redis-cli-- cluster create-- cluster-replicas 1 $(kubectl-n op get pods-l app=redis-cluster-o jsonpath=' {range.items [*]} {.status.podIP}: 6379 {end}') > > Performing hash slots allocation on 6 nodes... Master [0]-> Slots 0-5460 Master [1]-> Slots 5461-10922 Master [2]-> Slots 10923-16383 Adding replica 100.88.43.67 Master 6379 to 100.64.147.152 Master 6379 Adding replica 100.113.170.56379 to 100.98.174.217 Adding replica 100.64.147.1536379 to 100.80.158.227 to 100.80.158.227 slots 6379 slots: [05460] (5461 slots) ) master M: 09543217c903350e963fc4fdf4acb73f8a1b7f8b 100.98.174.217 master 6379 slots: [5461-10922] (5462 slots) master M: 5389ace495b68eeac85370d6783648dff68f2fb6 100.80.158.227 5389ace495b68eeac85370d6783648dff68f2fb6 6379 slots: [10923-16383] (5461 slots) master S: b1f39714c006ae55b12b18e6537303d7a00e1704 100.64.147.153 replicates 5389ace495b68eeac85370d6783648dff68f2fb6 S: 0113f4668ec2f3ca2e9470c44bd5faab532b0936 100.88.43.67 6379 replicates b47b27a3dbddf3fc1370cbe14ae753f4fce20b04 S: e1e2f18ae66c79f1943390beabb59613abbad38a 100.113.170.5 replicates 09543217c903350e963fc4fdf4acb73f8a1b7f8b Can I set the above configuration? (type 'yes' to accept): yes > Nodes configuration updated > Assign a different config epoch to each node > Sending CLUSTER MEET messages to join the cluster Waiting for the cluster to join. > Performing Cluster Check (using node 100.64.147.152 09543217c903350e963fc4fdf4acb73f8a1b7f8b 6379) M: b47b27a3dbddf3fc1370cbe14ae753f4fce20b04 100.64.147.152 slots: [0-5460] (5461 slots) master 1 additional replica (s) S: 0113f4668ec2f3ca2e9470c44bd5faab532b0936 100.88.43.67 master 6379 slots: (0 slots) slave replicates b47b27a3dbddf3fc1370cbe14ae753f4fce20b04 M: 09543217c903350e963fc4fdf4acb73f8a1b7f8b 100.98.174.217 09543217c903350e963fc4fdf4acb73f8a1b7f8b 6379 slots: [5461-10922] (5462 slots) master 1 additional replica (s) M: 5389ace495b68eeac85370d6783648dff68f2fb6 100.80.158.2276379 Slots: [10923-16383] (5461 slots) master 1 additional replica (s) S: e1e2f18ae66c79f1943390beabb59613abbad38a 100.113.170.5 slots 6379 slots: (0 slots) slave replicates 09543217c903350e963fc4fdf4acb73f8a1b7f8b S: b1f39714c006ae55b12b18e6537303d7a00e1704 100.64.147.153 slots: (0 slots) slave replicates 5389ace495b68eeac85370d6783648dff68f2fb6 [OK] All nodes agree about slots configuration > Check for open slots... > Check slots coverage... [OK] All 16384 slots covered. Verify the cluster information [root@qd01-stop-k8s-master001 redis] # kubectl-n op exec-it redis-cluster-0-- redis-cli 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:178 cluster_stats_messages_pong_sent:181 cluster _ stats_messages_sent:359 cluster_stats_messages_ping_received:176 cluster_stats_messages_pong_received:178 cluster_stats_messages_meet_received:5 cluster_stats_messages_received:359 [root@qd01-stop-k8s-master001 redis] # kubectl-n op exec-it redis-cluster-0-- redis-cli cluster nodes 0113f4668ec2f3ca2e9470c44bd5faab532b0936 100.88.43.67 n op exec 6379mm 16379 slave b47b27a3dbddf3fc1370cbe14ae753f4fce20b04 0 1615348311156 1 connected 09543217c903350e963fc4fdf4acb73f8a1b7f8b 100.98.174.217R 6379U 16379 master-01615348314162 2 connected 5461 -10922 b47b27a3dbddf3fc1370cbe14ae753f4fce20b04 100.64.147.152 myself 6379mm 16379 Master-0 1615348312000 1 connected 0-5460 5389ace495b68eeac85370d6783648dff68f2fb6 100.80.158.227 5389ace495b68eeac85370d6783648dff68f2fb6 6379mm 16379 master-01615348312000 3 connected 10923-16383 e1e2f18ae66c79f1943390beabb59613abbad38a 100.113.170.56379U 16379 slave 09543217c903350e963fc4fdf4acb73f8a1b7f8b 01615348313160 2 connected b1f39714c006ae55b12b18e6537303d7a00e1704 100.64.147.15315 379 slave 5389ace495b68eeac85370d6783648dff68f2fb6 01615348312158 connected

As can be seen from the output, the cluster has a total of 6 nodes, with three masters and three slaves.

Scenario 2 installs redis using kubeDB to install kubeDB

1. Install KubeDB

Get AppsCode License

Https://license-issuer.appscode.com/

Download KubeDB charts

Https://github.com/appscode/charts/tree/master/stable/kubedb-community

[root@qd01-stop-k8s-master001 kubedb-community] # unzip kubedb-community-v0.16.2.tgz [root@qd01-stop-k8s-master001 kubedb-community] # cd kubedb-community [root@qd01-stop-k8s-master001 kubedb-community] # ls-al total 96 drwxr-xr-x 4 root root 158Mar 10 15:26. Drwxr-xr-x 3 root root 66 Mar 10 15:24.. -rw-r--r-- 1 root root 351 Feb 16 09:55 Chart.yaml drwxr-xr-x 2 root root 28 Mar 10 15:24 ci-rw-r--r-- 1 root root 493 Feb 16 09:55 doc.yaml-rw-r--r-- 1 root root 353 Feb 16 09:55. Helmigno re-rw-r--r-- 1 root root 24422 Feb 16 09:55 README.md drwxr-xr-x 2 root root 4096 Mar 10 15:24 templates-rw- Rmuri root root-1 root root 47437 Feb 16 09:55 values.openapiv3_schema.yaml-rw-r--r-- 1 root root 5230 Feb 16 09:55 values.yaml

Modify values.yaml and put the License file in the kubedb-community directory

2. Install using helm

[root@qd01-stop-k8s-master001 kubedb-community] # helm install kubedb-community--namespace kube-system-- set-file license=./kubedb-community-license.txt-f values.yaml. NAME: kubedb-community LAST DEPLOYED: Wed Mar 10 15:38:59 2021 NAMESPACE: kube-system STATUS: deployed REVISION: 1 TEST SUITE: None NOTES: To verify that KubeDB has started, run: kubectl get deployment-- namespace kube-system-l "app.kubernetes.io/name=kubedb-community,app.kubernetes.io/instance=kubedb-community" Now install/upgrade appscode/kubedb-catalog chart. To install, run: helm install kubedb-catalog appscode/kubedb-catalog-- version v0.16.2-- namespace kube-system To upgrade, run: helm upgrade kubedb-catalog appscode/kubedb-catalog-- version v0.16.2-- namespace kube-system execute the following command to check whether the installation is complete [root@qd01-stop-k8s-master001 kubedb-community] # kubectl get deployment-- namespace kube-system-l "app.kubernetes.io/name=kubedb-community App.kubernetes.io/instance=kubedb-community "NAME READY UP-TO-DATE AVAILABLE AGE kubedb-community 1bat 1 138s waiting for crds to register successfully [root@qd01-stop-k8s-master001 kubedb-community] # kubectl get crds-la pp.kubernetes.io/name=kubedb-w NAME CREATED AT elasticsearches.kubedb.com 2021-03-10T07:39:42Z elasticsearchversions.catalog.kubedb.com 2021-03-10T07:39:45Z etcds.kubedb.com 2021-03-10T07:39:42Z etcdversions.catalog.kubedb.com 2021-03-10T07:39:45Z memcacheds.kubedb.com 2021-03-10T07:39:43Z memcachedversions.catalog.kubedb.com 2021-03-10T07:39: 45Z mongodbs.kubedb.com 2021-03-10T07:39:43Z mongodbversions.catalog.kubedb.com 2021-03-10T07:39:45Z mysqls.kubedb.com 2021-03-10T07:39:43Z mysqlversions.catalog.kubedb.com 2021-03-10T07:39:46Z perconaxtradbs.kubedb.com 2021-03-10T07:39:43Z perconaxtradbversions.catalog.kubedb Com 2021-03-10T07:39:46Z pgbouncers.kubedb.com 2021-03-10T07:39:44Z pgbouncerversions.catalog.kubedb.com 2021-03-10T07:39:46Z postgreses.kubedb.com 2021-03-10T07:39:44Z postgresversions.catalog.kubedb.com 2021-03-10T07:39:46Z proxysqls.kubedb.com 2021-03-10T07: 39Ru 44Z proxysqlversions.catalog.kubedb.com 2021-03-10T07:39:46Z redises.kubedb.com 2021-03-10T07:39:45Z redisversions.catalog.kubedb.com 2021-03-10T07:39:46Z

3. Install KubeDB Catalog

Again, download first

Https://github.com/appscode/charts/tree/master/stable/kubedb-catalog

[root@qd01-stop-k8s-master001 kubedb-catalog] # tar-zxf kubedb-catalog-v0.16.2.tgz [root@qd01-stop-k8s-master001 kubedb-catalog] # cd kubedb-catalog [root@qd01-stop-k8s-master001 kubedb-catalog] # ls-al total 24 drwxr-xr-x 3 root root 148Mar 10 15:48. Drwxr-xr-x 3 root root 28 Mar 10 15:48.. -rw-r--r-- 1 root root 321 Jan 26 20:08 Chart.yaml-rw-r--r-- 1 root root 467 Jan 26 20:08 doc.yaml-rw-r--r-- 1 root root 353 Jan 26 20:08. Helmies-rw-r--r-- 1 root root 3195 Jan 26 20:08 README.md drwxr-xr-x 12 root root 188 Mar 10 15:48 templates-rw-r--r-- 1 root root 744 Jan 26 20: 08 values.openapiv3_schema.yaml-rw-r--r-- 1 root root 1070 Jan 26 20:08 values.yaml [root@qd01-stop-k8s-master001 kubedb-catalog] # helm install kubedb-catalog-- namespace kube-system-f values.yaml. NAME: kubedb-catalog LAST DEPLOYED: Wed Mar 10 15:50:50 2021 NAMESPACE: kube-system STATUS: deployed REVISION: 1 TEST SUITE: None install redis using kubedb

1. Take a look at the official diagram of the life cycle of redis.

The kubedb installation redis supports the following features

Features Availability Clustering ✓ Instant Backup ✗ Scheduled Backup ✗ Persistent Volume ✓ Initialize using Snapshot ✗ Initialize using Script ✗ Custom Configuration ✓ Using Custom docker image ✓ Builtin Prometheus Discovery ✓ Using Prometheus operator ✓

2. View supported versions

[root@qd01-stop-k8s-master001 kubedb-catalog] # kubectl get redisversions NAME VERSION DB_IMAGE DEPRECATED AGE 4.0.11 4.0.11 kubedb/redis:4.0.11 15m 4.0.6-v2 4.0.6 kubedb/redis:4.0.6-v2 15m 5.0.3-v1 5.0.3 kubedb/redis : 5.0.3-v1 15m 6.0.6 6.0.6 kubedb/redis:6.0.6 15m

3. Edit the yaml installation file

Choose to install version 6.0.6 here. My cluster storageClassName: "rbd". Please modify it according to the actual situation.

If you want to customize redis.conf, please refer to

Https://github.com/kubedb/docs/blob/v2021.01.26/docs/examples/redis/custom-config/redis-custom.yaml

ApiVersion: kubedb.com/v1alpha2 kind: Redis metadata: name: redis-cluster namespace: op spec: version: 6.0.6 mode: Cluster cluster: master: 3 replicas: 1 storageType: Durable storage: resources: requests: storage: 1Gi storageClassName: "rbd" accessModes:-ReadWriteOnce

Perform installation

[root@qd01-stop-k8s-master001 kubedb-community] # kubectl apply-f redis-cluster.yaml redis.kubedb.com/redis-cluster created installation completed You can see [root@qd01-stop-k8s-master001 kubedb-community] # kubectl get rd as follows Po-n op NAME VERSION STATUS AGE redis.kubedb.com/redis-cluster 6.0.6 Provisioning 6m55s NAME READY STATUS RESTARTS AGE pod/redis-cluster-shard0-0 1 6m54s pod/redis-cluster-shard0 1 Running 0 6m54s pod/redis-cluster-shard0-1 1 Running 0 6m18s pod/redis-cluster-shard1 -01 / 1 Running 0 5m38s pod/redis-cluster-shard1-1 kubectl get svc 1 Running 0 5m1s pod/redis-cluster-shard2-01 / 1 Running 0 4m30s pod/redis-cluster-shard2-1 1 4m8s 0 4m8s [root@qd01-stop-k8s-master001 redis] # kubectl get svc-n op NAME TYPE CLUSTER- IP EXTERNAL-IP PORT (S) AGE redis-cluster ClusterIP 10.97.197.224 6379/TCP 5h26m redis-cluster-pods ClusterIP None 6379/TCP 17m

4. Verify the cluster

[root@qd01-stop-k8s-master001 kubedb-community] # kubectl get pods-n op- o jsonpath=' {range.items [*]} {.metadata.name}-{.status.podIP}: 6379 {"\ t\ n"} {end}'| grep redis redis-cluster-shard0-0-100.64.147.156 op- 6379 redis-cluster-shard0-1-100. 98.174.218Viru 6379 redis-cluster-shard1-0-100.126.252.204Viru 6379 redis-cluster-shard1-1-100.113.170.6 redis-cluster-shard2-0-100.107.55.69 redis-cluster-shard2-1-100.78.230.469Viru 6379 [root@qd01-stop-k8s] -master001 redis] # kubectl-n op exec-it redis-cluster-shard0-0-- redis-cli 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:3 cluster_my_epoch:1 cluster_stats_messages_ping_sent:864 cluster_stats_messages_pong_sent:882 cluster_stats_messages_sent:1746 cluster_stats _ messages_ping_received:879 cluster_stats_messages_pong_received:864 cluster_stats_messages_meet_received:3 cluster_stats_messages_received:1746 [root@qd01-stop-k8s-master001 redis] # kubectl-n op exec-it redis-cluster-shard0-0-- redis-cli cluster nodes 1895cb4b9c31b848666c61000e502f55a29a8255 100.64.147.155 it redis-cluster-shard0 6379mm 16379 master-01615365162008 2 connected 5461-10922 30bdbf2ca37001774498a9b935afbc1cd2ce389c 100.126.252.2036379V 16379 slave 2c06092fafa99e0158e39e6237a04fed25be3550 01615365163000 1 connected 9b2cfbd5c1b417121d410141b6da9512ad29ce3c 100.78.230 .3: 637916379 slave e83446c368839c5fdccf5f70e3b1004eb67cb651 0 1615365163512 3 connected 2c06092fafa99e0158e39e6237a04fed25be3550 100.82.197.130 myself 637916379 myself Master-0 1615365162000 1 connected 0-5460 1379d2b20f26ab13d53068d276ec5d988b7a0273 100.64.122.197VAND 6379mm 16379 slave 1895cb4b9c31b848666c61000e502f55a29a8255 01615365163000 2 connected e83446c368839c5fdccf5f70e3b1004eb67cb651 100.107.55.68 connected e83446c368839c5fdccf5f70e3b1004eb67cb651 6379U 16379 master-01615365164014 3 connected 10923-16383How to create Redis-cluster in Kubernetes Thank you for your reading. If you want to know more about the industry, you can follow the website, the editor will output more high-quality practical articles for you!

Welcome to subscribe "Shulou Technology Information " to get latest news, interesting things and hot topics in the IT industry, and controls the hottest and latest Internet news, technology news and IT industry trends.

Views: 0

*The comments in the above article only represent the author's personal views and do not represent the views and positions of this website. If you have more insights, please feel free to contribute and share.

Share To

Servers

Wechat

© 2024 shulou.com SLNews company. All rights reserved.

12
Report