K8S Redis-Cluster安装(含redis-cluster-proxy、RedisInsight)

参考:在 K8S 中快速部署 Redis Cluster & Redisinsight
参考:Redis 中文文档(一)

helm   redis-cluster

[root@k8s-master01 redis-cluster]# helm search repo redis-cluster
NAME                    CHART VERSION   APP VERSION     DESCRIPTION
bitnami/redis-cluster   9.1.3           7.2.3           Redis(R) is an open source, scalable, distribut...[root@k8s-master01 redis-cluster]# helm pull bitnami/redis-cluster

解压,查看使用到的镜像文件,提前下载并上传私有仓库

[root@k8s-master01 redis-cluster]# cat Chart.yaml
annotations:
category: Database
images: |
- name: os-shell
image: docker.io/bitnami/os-shell:11-debian-11-r91
- name: redis-cluster
image: docker.io/bitnami/redis-cluster:7.2.3-debian-11-r1
- name: redis-exporter
image: docker.io/bitnami/redis-exporter:1.55.0-debian-11-r2

配置私有仓库

docker tag docker.io/bitnami/redis-exporter:1.55.0-debian-11-r2  harbor.david.org/bitnami/redis-exporter:1.55.0-debian-11-r2
docker tag docker.io/bitnami/redis-cluster:7.2.3-debian-11-r1  harbor.david.org/bitnami/redis-cluster:7.2.3-debian-11-r1
docker tag docker.io/bitnami/os-shell:11-debian-11-r91  harbor.david.org/bitnami/os-shell:11-debian-11-r91
docker tag docker.io/redislabs/redisinsight:latest  harbor.david.org/redislabs/redisinsight:latest

helm安装redis-cluster

使用之前的storyageClass

StorageClass
helm install redis-cluster bitnami/redis-cluster -n develop \--values values.yaml \--set persistence.storageClass=nfs-sc \--set image.registry=harbor.david.org \--set volumePermissions.image.registry=harbor.david.org \--set metrics.image.registry=harbor.david.org \--set sysctlImage.image.registry=harbor.david.org

安装完成


NAME: redis-cluster
LAST DEPLOYED: Fri Nov 24 14:05:41 2023
NAMESPACE: develop
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
CHART NAME: redis-cluster
CHART VERSION: 9.1.3
APP VERSION: 7.2.3** Please be patient while the chart is being deployed **To get your password run:export REDIS_PASSWORD=$(kubectl get secret --namespace "develop" redis-cluster -o jsonpath="{.data.redis-password}" | base64 -d)You have deployed a Redis® Cluster accessible only from within you Kubernetes Cluster.INFO: The Job to create the cluster will be created.To connect to your Redis® cluster:1. Run a Redis® pod that you can use as a client:
kubectl run --namespace develop redis-cluster-client --rm --tty -i --restart='Never' \--env REDIS_PASSWORD=$REDIS_PASSWORD \
--image harbor.david.org/bitnami/redis-cluster:7.2.3-debian-11-r1 -- bash2. Connect using the Redis® CLI:redis-cli -c -h redis-cluster -a $REDIS_PASSWORD


查看密码

[root@k8s-master01 redis-cluster]# kubectl get secret --namespace "develop" redis-cluster -o jsonpath="{.data.redis-password}" | base64 -d


 

导出所有节点的地址为ClusterIp(如果需要)

参考: VMware Tanzu Application Catalog (Applications Tutorials) Documentation

 helm upgrade redis-cluster --set "password=xxxxxxxxxx,cluster.externalAccess.enabled=true bitnami/redis-cluster -n develop
[root@k8s-master01 redis]# helm upgrade redis-cluster bitnami/redis-cluster --set cluster.externalAccess.enabled=true --set password=An1y6Hh0Cv -n develop
Release "redis-cluster" has been upgraded. Happy Helming!
NAME: redis-cluster
LAST DEPLOYED: Sun Nov 26 18:10:15 2023
NAMESPACE: develop
STATUS: deployed
REVISION: 3
TEST SUITE: None
NOTES:
CHART NAME: redis-cluster
CHART VERSION: 9.1.3
APP VERSION: 7.2.3** Please be patient while the chart is being deployed **To get your password run:export REDIS_PASSWORD=$(kubectl get secret --namespace "develop" redis-cluster -o jsonpath="{.data.redis-password}" | base64 -d)To connect to your Redis® server from outside the cluster check the following information:NOTE: It may take a few minutes for the LoadBalancer IP to be available.Watch the status with: 'kubectl get svc --namespace develop -w redis-cluster'You will have a different external IP for each Redis® node. Get the external ip from `-external` suffixed services: `kubectl get svc`.Redis® port: 6379Once the LoadBalancerIPs are ready, you need to provide them and perform a Helm Upgrade:helm upgrade --namespace develop redis-cluster --set "cluster.externalAccess.enabled=true,cluster.externalAccess.service.type=LoadBalancer,cluster.externalAccess.service.loadBalancerIP[0]=load-balancerip-0,cluster.externalAccess.service.loadBalancerIP[1]=load-balancerip-1,cluster.externalAccess.service.loadBalancerIP[2]=load-balancerip-2,cluster.externalAccess.service.loadBalancerIP[3]=load-balancerip-3,cluster.externalAccess.service.loadBalancerIP[4]=load-balancerip-4,cluster.externalAccess.service.loadBalancerIP[5]=load-balancerip-5" oci://registry-1.docker.io/bitnamicharts/redis-clusterWhere loadbalancer-ip-i are the LoadBalancerIPs provided by the cluster.

helm upgrade ingress-nginx导出redis 6379端口

参考:K8s and Redis; a tale of Layer 4 Ingress

helm upgrade ingress-nginx ingress-nginx/ingress-nginx -n ingress-nginx \--values values.yaml \--set tcp.26379="develop/redis-cluster:6379" --debug

修改端口为你想要的端口

 [root@k8s-master01 ~]# kubectl edit svc -n ingress-nginx ingress-nginx-controllerservice/ingress-nginx-controller edited[root@k8s-master01 ~]# kubectl get svc -n ingress-nginx

也可以使用port-forward进行临时转发端口,不过得一直挂着

参考: 使用端口转发来访问集群中的应用
参考: kubectl port-forward 踩坑记录

 [root@k8s-master01 redis]# kubectl port-forward service/redis-cluster -n develop 30009:6379 --address 0.0.0.0Forwarding from 0.0.0.0:30009 -> 6379Handling connection for 30009


 使用ingress-nginx进行转发(集群方式下不推荐) 


 因为集群会涉及到不同的key在不同的slot上,
 Redis会进行重定向,将内网IP返回给客户端
 但客户端并不能访问到内网地址

 参考: 浅谈Redis Cluster 集群的MOVED、ASK重定向
 

 ingress-nginx导出TCP端口

 配置redis-cluster-proxy代理(外网客户端及程序可连接)
 参考: 【Redis】——引入redis-cluster-proxy使得Redis Cluster对Kubernetes外部可提供服务
 参考: Redis系列(十五)、Redis6新特性之集群代理(Cluster Proxy)

 linux上安装redis-cluster-proxy

 依赖gcc需要提前安装


 gcc version 9.3.1
 参考: CentOS/Ubuntu安装最新的gcc-9 

参考:

【已解决】Error: Failed to download metadata for repo ‘appstream‘: Cannot prepare internal mirrorlist

 或者参考下面的dockerfile

 make redis-cluster-proxy

# Make Install 
git clone https://github.com/artix75/redis-cluster-proxy
cd redis-cluster-proxy
make PREFIX=/usr/local/redis_cluster_proxy install dockerfile在目录/usr/local/redis_cluster_proxy/bin/ 下复制redis-cluster-proxy到当前目录,然后创建dockerfile 内容如下redis_cluster_proxy使用C编写,需要gcc version 9.3.1环境https://blog.csdn.net/weixin_43252521/article/details/124409151
[root@master01 redis-cluster-proxy]# vi dockerfile
FROM centos:8WORKDIR /dataRUN sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*
RUN sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*
RUN yum makecache
#RUN yum update -yRUN rpm -ivh https://cbs.centos.org/kojifiles/packages/centos-release-scl-rh/2/3.el7.centos/noarch/centos-release-scl-rh-2-3.el7.centos.noarch.rpm
RUN rpm -ivh https://cbs.centos.org/kojifiles/packages/centos-release-scl/2/3.el7.centos/noarch/centos-release-scl-2-3.el7.centos.noarch.rpmRUN yum install -y centos-release-scl
RUN yum install -y devtoolset-9-gcc devtoolset-9-gcc-c++RUN echo "scl enable devtoolset-9 bash" >> /etc/profile
RUN echo "source /opt/rh/devtoolset-9/enable" >> /etc/profileRUN source /etc/profileRUN yum install -y wget
RUN wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-8.repo
RUN sed -i  's/$releasever/8/g' /etc/yum.repos.d/CentOS-Base.repo
RUN yum repolistRUN yum install -y  gcc
RUN gcc -vADD redis-cluster-proxy /usr/local/bin/EXPOSE 7777docker build . -t redis-cluster-proxy:v1.0.0
 [root@k8s-master01 ~]# docker tag redis-cluster-proxy:v1.0.0  harbor.david.org/redislabs/redis-cluster-proxy:v1.0.0[root@k8s-master01 ~]# docker push  harbor.david.org/redislabs/redis-cluster-proxy:v1.0.0

 配置redis-cluster-proxy configmap

[root@master01 redis-cluster-proxy]# vi configMap.yaml
---
# Redis-Proxy Config
apiVersion: v1
kind: ConfigMap
metadata:name: redis-cluster-proxynamespace: develop
data:proxy.conf: |cluster redis-cluster:6379     # 配置为Redis Cluster Servicebind 0.0.0.0port 7777   # redis-cluster-proxy 对外暴露端口threads 8   # 线程数量daemonize noenable-cross-slot yesauth An1y6Hh0Cv     # 配置Redis Cluster 认证密码log-level error
[root@master01 redis-cluster-proxy]#
kubectl apply -f configMap.yaml  -n develop

配置deployment.yaml

[root@master01 redis-cluster-proxy]# vi deployment.yaml
---
# Redis-Proxy NodePort
apiVersion: v1
kind: Service
metadata:name: redis-cluster-proxynamespace: develop
spec:type: NodePort # 对K8S外部提供服务ports:- name: redis-cluster-proxynodePort: 30009   # 对外提供的端口port: 7777protocol: TCPtargetPort: 7777selector:app: redis-cluster-proxy
---
# Redis-Proxy Deployment
apiVersion: apps/v1
kind: Deployment
metadata:name: redis-cluster-proxynamespace: develop
spec:replicas: 1selector:matchLabels:app: redis-cluster-proxytemplate:metadata:labels:app: redis-cluster-proxyspec:#imagePullSecrets:#  - name: harborcontainers:- name: redis-cluster-proxyimage: harbor.david.org/redislabs/redis-cluster-proxy:v1.0.0imagePullPolicy: Alwayscommand: ["redis-cluster-proxy"]args:- -c- /data/proxy.conf   # 指定启动配置文件ports:- name: redis-7777containerPort: 7777protocol: TCPvolumeMounts:- name: redis-proxy-confmountPath: /data/volumes:   # 挂载proxy配置文件- name: redis-proxy-confconfigMap:name: redis-cluster-proxy
[root@master01 redis-cluster-proxy]#
kubectl apply -f deployment.yaml  -n develop[root@master01 redis-cluster-proxy]# kubectl get pods -n develop
NAME                                   READY   STATUS    RESTARTS        AGE
redis-cluster-proxy-6679cb8f78-nbgr4   1/1     Running   0               167m[root@master01 redis-cluster-proxy]# kubectl get svc -n develop |grep redis
redis-cluster                   ClusterIP   10.102.144.124   <none>        6379/TCP                        5d21h
redis-cluster-headless          ClusterIP   None             <none>        6379/TCP,16379/TCP              5d21h
redis-cluster-proxy             NodePort    10.103.13.20     <none>        7777:30009/TCP                  167m

安装redisinsight

 参考:redisinsight
 打开网页右上角的 install

helm repo add redisinsight https://spy86.github.io/redisinsight[root@k8s-master01 ~]# helm search hub redisinsight -o json
[{"url":"https://artifacthub.io/packages/helm/redisinsight/redisinsight","version":"0.1.0","app_version":"0.1.0","description":"A Helm chart for Redis Insight.","repository":{"url":"https://spy86.github.io/redisinsight","name":"redisinsight"}},{"url":"https://artifacthub.io/packages/helm/truecharts/redisinsight","version":"3.0.13","app_version":"1.14.0","description":"GUI for Redis.","repository":{"url":"https://charts.truecharts.org/","name":"truecharts"}},{"url":"https://artifacthub.io/packages/helm/riftbit/redisinsight","version":"0.1.0","app_version":"v1.0.0","description":"RedisInsight - The GUI for Redis","repository":{"url":"https://charts.riftbit.com/","name":"riftbit"}},{"url":"https://artifacthub.io/packages/helm/heywood8-helm-charts/redisinsight","version":"0.4.5","app_version":"2.28.0","description":"A Redisinsight Helm chart for kubernetes","repository":{"url":"https://heywood8.github.io/helm-charts/","name":"heywood8-helm-charts"}},{"url":"https://artifacthub.io/packages/helm/eximiait/openshift-secured-redisinsight","version":"0.9.0","app_version":"","description":"A secured version of RedisInsight for OpenShift","repository":{"url":"https://charts.eximiait.com.ar","name":"eximiait"}}]
[root@k8s-master01 ~]#[root@k8s-master01 ~]# helm search repo redisinsight
NAME                            CHART VERSION   APP VERSION     DESCRIPTION
redisinsight/redisinsight       0.1.0           0.1.0           A Helm chart for Redis Insight.
[root@k8s-master01 ~]#

[root@k8s-master01 ~]# helm pull redisinsight/redisinsight


解压,查看values.yaml


helm install redisinsight redisinsight/redisinsight -n develop \
--values values.yaml \
--set namespace.name=develop \
--set image.repository=harbor.david.org/redislabs/redisinsightNAME: redisinsight
LAST DEPLOYED: Fri Nov 24 14:36:26 2023
NAMESPACE: develop
STATUS: deployed
REVISION: 1
NOTES:
1. Get the application URL by running these commands:export POD_NAME=$(kubectl get pods --namespace develop -l "app.kubernetes.io/name=redisinsight,app.kubernetes.io/instance=redisinsight" -o jsonpath="{.items[0].metadata.name}")echo "Visit http://127.0.0.1:8001 to use your application"kubectl --namespace develop port-forward $POD_NAME 8001:8001

配置ingress-nginx转发

vi ingress-nginx.yamlapiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: redisinsight-ingressnamespace: develop
spec:ingressClassName: nginxrules: # 一个ingress可以配置多个rules- host: redisinsight.david.org # 域名配置,可以不写,匹配*,或者写 *.bar.comhttp:        paths: # 相当于nginx的location,同一个host可以配置多个path- pathType: Prefixbackend:service:name: redisinsight  # 代理到哪个svcport:number: 80 # svc的端口path: /


 应用

 kubectl apply -f ingress-nginx.yaml

 配置hosts

 192.168.221.132 redisinsight.david.org

 访问测试
 
 http://redisinsight.david.org

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/7403.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用CUDA的PyTorch进行张量重整化的gpu加速

使用CUDA的PyTorch进行张量重整化的gpu加速 摘要IntroductionAlgorithm and TorchTrg discussionModels and Results GPU-Acceleration of Tensor Renormalization with PyTorch using CUDA 摘要 作者展示了基于张量重整化群&#xff08;TRG&#xff09;方法的数值计算可以通过…

绝地求生:季后赛名额确定!NH战队总积分榜排名第一!

2024年5月5日&#xff0c;PCL春季赛常规赛第五阶段第三天比赛结束&#xff0c;今天打完春季赛常规赛结束&#xff0c;16个战队进入季后赛的名额已确定。NH战队总积分506分&#xff0c;总积分榜排名第一&#xff01;&#xff01;NH战队也是唯一一支总积分超过500分的队伍。今天最…

【前端】HTML实现个人简历信息填写页面

文章目录 前言一、综合案例&#xff1a;个人简历信息填写页面 前言 这篇博客仅仅是对HTML的基本结构进行了一些说明&#xff0c;关于HTML的更多讲解以及CSS、Javascript部分的讲解可以关注一下下面的专栏&#xff0c;会持续更新的。 链接&#xff1a; Web前端学习专栏 下面我对…

LLaMA 羊驼系大语言模型的前世今生

关于 LLaMA LLaMA是由Meta AI发布的大语言系列模型&#xff0c;完整的名字是Large Language Model Meta AI&#xff0c;直译&#xff1a;大语言模型元AI。Llama这个单词本身是指美洲大羊驼&#xff0c;所以社区也将这个系列的模型昵称为羊驼系模型。 Llama、Llama2 和 Llama3…

C++字模软件发送 单片机接收显示

/****先定义数组类型再赋值**L310*********/ /*2014 8 21 10:01**PAST*CODE1000**TEST**/ #include<reg51.h> #define uint unsigned int #define uchar unsigned char sfr AUXR0x8e; //辅助寄存器 sfr SADDR0xA9; …

读字库写FM24C04

/*PCB机板增加读写24C64函数PAST 2017 12 26 08:10 CODE 7382*/ /*按11键进入手动选择&#xff0c;按12键进入参数设定界面 按1存1 2存2 3存3 15存0 16存1236 17读EEPROM显示正确 L1008 13775061792 ******/ #include <reg52.h>…

多链路聚合设备是什么

多链路聚合设备属于通信指挥装备。 乾元通多链路聚合设备&#xff0c;它能够将多个网络链路聚合成一个逻辑链路&#xff0c;以实现高速、稳定、可靠的数据传输。多链路聚合设备的核心技术包括链路聚合、负载均衡、故障切换等&#xff0c;能够智能管理和优化利用不同网络链路&a…

websevere服务器从零搭建到上线(二)|Linux上的五种IO模型

文章目录 阻塞 blocking非阻塞 non-blockingIO复用 IO multiplexing信号驱动 signal-driven异步 asynchronous拓展知识 看过上篇文章英国基本能理解本文五张图的内容websevere服务器从零搭建到上线&#xff08;一&#xff09;&#xff5c;阻塞、非阻塞、同步、异步 本文要能够在…

【postgresql初级使用】可以存储数据的视图-物化视图,加速大数据下的查询分析

物化视图 ​专栏内容&#xff1a; postgresql使用入门基础手写数据库toadb并发编程 个人主页&#xff1a;我的主页 管理社区&#xff1a;开源数据库 座右铭&#xff1a;天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物. 文章目录 物化视图概述 …

HIVE统计WordCount

HIVE WORDCOUNT 目录 HIVE WORDCOUNT 一、WORDCOUNT 1.我们先创建一个新的数据库 2.创建表并插入数据 3.统计WORDCOUNT 4.UNION ALL 用法 5.WITH AS 用法 1.WORDCOUNT 1&#xff09;我们先创建一个新的数据库 create database learn3;use learn3; 2&#xff09;创建表…

知识图谱融入RAG模型:LinkedIn重塑智能客服新范式【附LeCun哈佛演讲PPT】

原文&#xff1a;Retrieval-Augmented Generation with Knowledge Graphs for Customer Service Question Answering 一、研究背景与问题 在客服领域,快速准确地匹配用户问题与历史工单,是提供优质回答的关键。传统的检索增强生成(Retrieval-Augmented Generation, RAG)方法虽…

分享5款PDF编辑软件

PDF编辑不易&#xff0c;有需要的朋友可以试试这5款专业软件&#xff0c;每一个都能直接在PDF文件上编辑&#xff0c;不同的软件对PDF可编辑的范围不同&#xff0c;大家可以按需求选用。 1.edge浏览器 Edge浏览器不仅是浏览网页的得力助手&#xff0c;还悄然成为了轻量级PDF管…

微信小程序开发秘籍:解锁音频录制与录音功能的奥秘

微信小程序开发秘籍&#xff1a;解锁音频录制与录音功能的奥秘 在微信小程序的开发旅程中&#xff0c;音频功能的集成可以极大地丰富用户体验&#xff0c;特别是在教育、娱乐、社交等领域。本文将引领你深入了解如何在微信小程序中实现音频录制和播放功能&#xff0c;从基本概…

2024蓝桥杯RSA-Theorem

方法1&#xff1a;直接使用工具yafu解题 yafu的使用方法 安装&#xff1a;解压后直接使用即可&#xff0c;在文件包内&#xff0c;执行命令终端&#xff0c;输入命令行 1、如果数比较小&#xff0c;进入该文件的目录后可以直接使用: yafu-x64 factor(n) 如果是powershell&…

Element-UI快速入门:构建优雅的Vue.js应用界面

Element-UI是一套基于Vue.js的组件库&#xff0c;提供了丰富的UI组件和交互效果&#xff0c;帮助开发者快速构建出美观、功能丰富的Web应用界面。本文将介绍如何快速入门Element-UI&#xff0c;并搭建一个简单的示例界面。 步骤一&#xff1a;安装Element-UI 首先&#xff0c…

Embeddings原理、使用方法、优缺点、案例以及注意事项

Embeddings是一种将高维数据映射到低维空间的技术&#xff0c;常用于处理自然语言处理&#xff08;NLP&#xff09;和计算机视觉&#xff08;CV&#xff09;任务。Embeddings可以将复杂的高维数据转换为低维稠密向量&#xff0c;使得数据可以更容易地进行处理和分析。本文将介绍…

张家界(24-17)

目录 总路线酒店&#xff1a;深圳北->张家界西&#xff08;day1 07:14~13:45&#xff09;张家界西&#xff08;酒店&#xff09;->张家界森林公园东门&#xff08;day2 早上&#xff09;张家界森林公园东门->张家界西&#xff08;day2 19:48分的高铁&#xff09;张家界…

leetcode-有重复数字的全排列-98

题目要求 思路 1.同【没有重复项的全排列-97】这个题一样&#xff0c;都是递归的题&#xff0c;区别在于这个可能会包含重复的数字&#xff0c;因此&#xff0c;不能只是简单的通过两个值是否相等然后用标志位标记&#xff0c;而是新增了一个数组&#xff0c;这个数组专门用于…

树和二叉树:二叉树的基本运算算法的实现

一.前言 当前版本仅供笔者复盘 二.二叉树 2.1题目 编写一个程序&#xff0c;实现二叉树的基本运算&#xff0c;具体要求如下&#xff1a;&#xff08;指定示范实例1&#xff1a;图1。指定示范实例2&#xff1a;图2 &#xff09; 1&#xff0c;先序遍历输出该树&#xff08…

Qt QInputDialog详解

1.简介 QInputDialog是一个对话框类&#xff0c;用于从用户那里获取一个单一的值。这个值可以是字符串、数字、或者一个列表中的选项。QInputDialog提供了一个方便的方式来快速创建一个输入对话框&#xff0c;无需自己从头开始构建。 QInputDialog支持多种输入类型&#xff1…