Kubernetes(k8s)上部署redis5.0.14
Kubernetes上部署redis
- 环境准备
- 创建命名空间
- 准备PV和PVC
- 安装nfs
- 准备PV
- 准备PVC
- 部署redis
- 创建redis的配置文件
- 部署脚本
- 挂载数据目录
- 挂载配置文件
- 通过指定的配置文件启动redis
- 集群内部访问
- 外部链接Redis
环境准备
首先你需要一个Kubernetes环境,可参考我写的文章:https://blog.csdn.net/m0_51510236/article/details/130842122
创建命名空间
我们可以选择以下两种方式创建命名空间,我此次创建的命名空间名字是deploy-test,可以更改,这里只做演示:
- 命令直接创建
kubectl create namespace deploy-test
- yaml创建(推荐)
apiVersion: v1
kind: Namespace
metadata:name: deploy-test
spec: {}
status: {}
准备PV和PVC
在我之前的一篇文章单中讲解了啥是PV和PVC:https://blog.csdn.net/m0_51510236/article/details/132482351
安装nfs
这篇文章直接使用,这次准备的和上次的一样是nfs来做存储,所以三台服务器都需要安装 nfs-utils:
yum install -y nfs-utils
如图三台服务器都以完成安装:

然后我们在主服务器或nfs服务器上执行这两行命令:
mkdir -p /data/nfs/redis
cat >> /etc/exports << EOF
/data/nfs/redis *(rw,sync,no_root_squash)
EOF
这行命令是暴露 /data/nfs/redis 给nfs客户端访问的目录,用于redis数据和日志的存放目录,结下来我们需要开启nfs服务端,执行以下这行命令:
systemctl enable --now nfs-server
暴露后来查看暴露结果:
showmount -e nfs服务端地址
测试如图:

好的,接下来nfs就安装好了
准备PV
直接上yaml,可以根据提示内容修改:
apiVersion: v1
kind: PersistentVolume
metadata:name: deploy-redis-nfs-pv # PV的名字namespace: deploy-test # 命名空间
spec:capacity:storage: 1Gi # 申请的大小accessModes:- ReadWriteMany # 访问模式为多节点读写nfs:server: 192.168.1.160 # nfs服务器地址,注意修改为你自己的path: /data/nfs/redis # nfs的远程目录storageClassName: "nfs" # 存储类名字为nfs
创建结果显示:

准备PVC
直接上yaml,除了改一下名字其他的没啥好修改的:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: deploy-redis-nfs-pvc # pvc名字namespace: deploy-test # 命名空间
spec:accessModes:- ReadWriteMany # 多节点读写storageClassName: "nfs" # 存储类类型为nfsresources:requests:storage: 1Gi # 申请存储空间的大小volumeName: deploy-redis-nfs-pv # 对应上面的pv名字
查看pvc的创建:

查看它两的状态(kubectl get pv,pvc -o wide -n deploy-test):

部署redis
创建redis的配置文件
首先我们先规定好配置文件内容(注意修改你的密码):
# 关闭保护模式
protected-mode no# redis链接密码
requirepass redis# 日志级别
loglevel warning# 日志存放目录
logfile "/data/redis.log"# 数据文件目录
dir /data
dbfilename dump.rdb# 数据库数量
databases 16# 保存数据库到数据文件
save 900 1
save 300 10
save 60 10000
注意将这个配置文件上传到服务器:

然后我们为这个文件创建一个configmap:
kubectl create configmap deploy-redis-config -n deploy-test --from-file=redis.conf --dry-run=client -o yaml
上面这行命令会根据 redis.conf 生成一个yaml文件:

所以创建这个configmap的yaml文件为:
apiVersion: v1
data:redis.conf: |# 关闭保护模式protected-mode no# redis链接密码requirepass redis# 日志级别loglevel warning# 日志存放目录logfile "/data/redis.log"# 数据文件目录dir /datadbfilename dump.rdb# 数据库数量databases 16# 保存数据库到数据文件save 900 1save 300 10save 60 10000
kind: ConfigMap
metadata:name: deploy-redis-confignamespace: deploy-test
创建configmap如图:

部署脚本
apiVersion: v1
kind: Service
metadata:name: deploy-redis-svcnamespace: deploy-testlabels:app: redis
spec:ports:- port: 6379name: redistargetPort: 6379nodePort: 30379selector:app: redistype: NodePortsessionAffinity: ClientIP---apiVersion: apps/v1
kind: StatefulSet
metadata:name: deploy-redisnamespace: deploy-test
spec:selector:matchLabels:app: redis # 必须匹配 .spec.template.metadata.labelsserviceName: "deploy-redis-svc"replicas: 1template:metadata:labels:app: redis # 必须匹配 .spec.selector.matchLabelsspec:terminationGracePeriodSeconds: 10containers:- command:- "redis-server"- "/usr/local/etc/redis.conf"name: redisimage: redis:5.0.14ports:- containerPort: 6379name: redisvolumeMounts:- name: redis-datamountPath: /data- name: redis-configmountPath: /usr/local/etcreadOnly: truevolumes:- name: redis-datapersistentVolumeClaim:claimName: deploy-redis-nfs-pvc- name: redis-configconfigMap:name: deploy-redis-configitems:- key: redis.confpath: redis.conf
接下来讲解一下里面比较重要的脚本
挂载数据目录
在 StatefulSet.spec.template.spec.volumes 当中有那么一串代码:
- name: redis-datapersistentVolumeClaim:claimName: deploy-redis-nfs-pvc
这串代码是要使用到 deploy-redis-nfs-pvc 这个pvc做数据存储,并给这个挂载取一个名字叫做 redis-data,然后在 StatefulSet.spec.template.spec.containers 有那么一串代码:
- name: redis-datamountPath: /data
这串代码的意思是使用名为 redis-data 数据挂载,并把它挂在到pod的 /data 目录当中
挂载配置文件
在 StatefulSet.spec.template.spec.volumes 当中有那么一串代码:
- name: redis-configconfigMap:name: deploy-redis-configitems:- key: redis.confpath: redis.conf
这串代码的意思是读取 deploy-redis-config 这个configmap并命名为 redis-config,然后获取里面的 redis.conf 配置文件,命名为 redis.conf,然后在 StatefulSet.spec.template.spec.containers 有那么一串代码:
- name: redis-configmountPath: /usr/local/etcreadOnly: true
这串代码的意思是使用名为 redis-config 配置文件,并把它以只读的方式挂在到pod的 /usr/local/etc 当中
通过指定的配置文件启动redis
在 `StatefulSet.spec.template.spec.containers当中有这么一行代码:
- command:- "redis-server"- "/usr/local/etc/redis.conf"
这行代码的意思是使用 /usr/local/etc/redis.conf 配置文件启动redis,这个配置文件是我们在configmap当中配置的,当我们执行部署的这个yaml之后,可以查看结果:

执行一下命令查看部署进度:
kubectl get all -o wide -n deploy-test
看到这个就代表部署完成了:

集群内部访问
StatefulSet应用的访问地址为:
<pod名称>.<service名称>.<命名空间名称>.svc.cluster.local
那么这次暴露的pod访问地址就是:
deploy-redis-0.deploy-redis-svc.deploy-test.svc.cluster.local
尝试解析验证一下:

外部链接Redis
我们可以直接使用 IntelliJ IDEA 或其他链接工具尝试链接:

显示链接成功(如果有密码注意输入密码):

并且操作也没问题:

我们来到数据目录,查看容器内的数据已经成功暴露到nfs的目录当中:
到这里在Kubernetes上安装redis就已经完成了!
相关文章:
Kubernetes(k8s)上部署redis5.0.14
Kubernetes上部署redis 环境准备创建命名空间 准备PV和PVC安装nfs准备PV准备PVC 部署redis创建redis的配置文件部署脚本挂载数据目录挂载配置文件通过指定的配置文件启动redis 集群内部访问外部链接Redis 环境准备 首先你需要一个Kubernetes环境,可参考我写的文章&…...
frida动态调试入门01——定位关键代码
说明 frida是一款Python工具可以方便对内存进行hook修改代码逻辑在移动端安全和逆向过程中常用到。 实战 嘟嘟牛登录页面hook 使用到的工具 1,jadx-gui 2,frida 定位关键代码 使用jadx-gui 进行模糊搜索,例如搜索encyrpt之类的加密关键…...
ASP.NET Core 8 的配置类 Configuration
Configuration Configuration 可以从两个途径设置: WebApplication创建的对象app.Configuration 属性WebApplicationBuilder 创建的 builder.Configuration 属性 app的Configuration优先级更高,host Configuration作为替补配置,因为app运行…...
MySql增量恢复
一、 使用二进制日志的时间点恢复 注意 本节和下一节中的许多示例都使用mysql客户端来处理mysqlbinlog生成的二进制日志输出。如果您的二进制日志包含\0(null)字符,那么mysql将无法解析该输出,除非您使用--binary模式选项调用它。…...
设计模式--装饰者模式(Decorator Pattern)
一、什么是装饰者模式(Decorator Pattern) 装饰者模式(Decorator Pattern)是一种结构型设计模式,它允许你在不修改现有对象的情况下,动态地将新功能附加到对象上。这种模式通过创建一个包装类,…...
Spring三级缓存解决循环依赖
Spring三级缓存解决循环依赖 一 Spring bean对象的生命周期 二 三级缓存解决循环依赖 实现原理解析 spring利用singletonObjects, earlySingletonObjects, singletonFactories三级缓存去解决的,所说的缓存其实也就是三个Map 先实例化的bean会通过ObjectFactory半…...
Vscode自动移出不用的包
Vscode自动移出不用的包 在Vscode中删除不用的包、Vscode移出不用的包、Vscode移出不用的import包 设置 找到setting.json(在字体设置里面),添加如下配置 "editor.codeActionsOnSave": { "source.organizeImports": tru…...
leetcode做题笔记120. 三角形最小路径和
给定一个三角形 triangle ,找出自顶向下的最小路径和。 每一步只能移动到下一行中相邻的结点上。相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 1 的两个结点。也就是说,如果正位于当前行的下标 i ,那么下一…...
weblogic/CVE-2018-2894文件上传漏洞复现
启动docker环境 查看帮助文档 环境启动后,访问http://your-ip:7001/console,即可看到后台登录页面。 执行docker-compose logs | grep password可查看管理员密码,管理员用户名为weblogic,密码为lFVAJ89F 登录后台页面,…...
windows10默认浏览器总是自动更改为Edge浏览器
在设置的默认应用设置中把默认浏览器改为chrome或其他之后他自动又会改回Edge。不得不说*软真的狗。 解决办法: 后来发现在Edge浏览器的设置中有这么一个选项,会很无耻的默认是Edge。把它关掉后重新设置就行了。...
系统架构设计师考试论文:论软件架构风格与应用
软件体系结构风格是描述某一特定应用领域中系统组织方式的惯用模式。体系结构风格定义一个系统家族,即一个体系结构定义一个词汇表和一纽约束。词汇表中包含一些构件和连接件类型,而这组约束指出系统是如何将这些构件和连接件组合起来的。体系结构风格反…...
xss-labs靶场通关详解
文章目录 前言level1level2level3level4level5level6level7level8level9level10level11level12level13level14level15level16level17level18level19&level20 前言 赶着假期结尾的时候,赶紧给自己找点任务做。现在对xss还是一知半解,只是了解个大概&a…...
关于类和接口
类和接口的区别,去除语法层面,谈谈编程层面的意义。 设计原则SOLID: S:单一职责(SRP),Single Responsibility Principle O:开-闭原则(OCP),Open-Closed Principle L:里氏替换(LSP)&…...
网络安全社区与资源分享: 推荐网络安全社区、论坛、博客、培训资源等,帮助从业者拓展人脉和知识。
第一章:引言 在当今数字化的世界中,网络安全问题变得愈发突出。随着各种新型威胁的涌现,网络安全从业者面临着持续不断的挑战。然而,正是因为这些挑战,网络安全社区应运而生,成为从业者们互相交流、学习和…...
SAP MM学习笔记26- SAP中 振替转记(转移过账)和 在库转送(库存转储)5 - 总结
SAP 中在库移动 不仅有入库(GR),出库(GI),也可以是单纯内部的转记或转送。 1,振替转记(转移过账) 具体查看我之前的文章。 SAP MM学习笔记26- SAP中 振替转记ÿ…...
Stable Diffusion WebUI提示词Prompts常用推荐
在Stable Diffusion(以下简称SD)中,提示词是很重要的一部分,写好提示词就能让画图事半功倍,下面介绍一款好用的工具,能很程度上让你更轻松。 他就是sd-webui-prompt-all-in-one 下面将详细介绍的安装以及使用,后面将详细讲解提示词(Prompt)应该如何写提示词才能使画…...
Android 13 Ethernet变更
Android13 有线变更 以太网相关的功能在Android12 和13 网络部分变化是不大的,Android11 到Android 12 网络部分无论是代码存放目录和代码逻辑都是有较多修改的,主要包括以下几个部分 限制了设置有线网参数设置接口方法 新增有线网开启关闭接口方法 新…...
基于单片机的超声波语音测距系统
一、系统方案 超声波具有指向性强,能量消耗缓慢,在介质中传播的距离较远,因而超声波经常用于距离的测量,如测距仪和物位测量仪等都可以通过超声波来实现。利用超声波检测往往比较迅速、方便、计算简单、易于做到实时控制ÿ…...
算法系列-力扣876-求链表的中间节点
# 求链表中间节点,如果有两个中间节点取后面那个 链表定义 // lc codestart /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val val; } * …...
SpringBoot集成Redis、Redisson保姆教程【附源码】
1. SpringBoot集成Redis 关于Redis的安装,这里就不重复介绍了,需要的朋友可以看我之前的博文Redis多系统安装(Windows、Linux、Ubuntu) Redis原生命令大全,作者整理的很详细,大部分命令转化为java命令基本也是关键词 Redis 命令参考 接下来开始我们的正题,一起学习下…...
5个步骤掌握LibreCAD跨平台部署:从安装到精通的开源解决方案指南
5个步骤掌握LibreCAD跨平台部署:从安装到精通的开源解决方案指南 【免费下载链接】LibreCAD LibreCAD is a cross-platform 2D CAD program written in C17. It can read DXF/DWG files and can write DXF/PDF/SVG files. It supports point/line/circle/ellipse/pa…...
告别虚拟机!Windows WSL2+GNU Radio玩转HackRF-One无线接收(避坑指南)
告别虚拟机!Windows WSL2GNU Radio玩转HackRF-One无线接收(避坑指南) 在软件定义无线电(SDR)领域,HackRF-One因其开源设计和亲民价格成为入门首选。然而传统虚拟机方案常因性能损耗、驱动兼容性问题让新手望…...
5步攻克TradingAgents-CN本地化部署:从环境搭建到智能体协同
5步攻克TradingAgents-CN本地化部署:从环境搭建到智能体协同 【免费下载链接】TradingAgents-CN 基于多智能体LLM的中文金融交易框架 - TradingAgents中文增强版 项目地址: https://gitcode.com/GitHub_Trending/tr/TradingAgents-CN 一、问题定位࿱…...
Phi-4-mini-reasoning应对软件测试:自动生成测试用例与缺陷分析
Phi-4-mini-reasoning应对软件测试:自动生成测试用例与缺陷分析 1. 引言:软件测试的痛点与AI解决方案 在软件开发的生命周期中,测试环节往往占据30%-50%的项目时间。传统测试工作面临两大核心挑战:一是测试用例设计需要大量人工…...
Qwen3.5-9B-AWQ-4bit多场景落地:零售货架图分析+缺货识别+SKU自动计数
Qwen3.5-9B-AWQ-4bit多场景落地:零售货架图分析缺货识别SKU自动计数 1. 零售场景中的视觉理解挑战 在零售行业,货架管理一直是运营效率的关键指标。传统的人工巡检方式存在几个明显痛点: 效率低下:一个中型超市需要2-3小时完成…...
科研党福音:Zotero+Green Frog插件一键获取期刊分区与影响因子(附easyScholar密钥配置全流程)
科研文献管理革命:Zotero与Green Frog插件的深度整合实践 作为一名长期浸泡在学术海洋中的研究者,我深知高效文献管理工具的重要性。每天面对数百篇新发表的论文,如何快速识别高质量文献成为决定科研效率的关键因素。传统的手动查询期刊影响因…...
使用Chandra构建数学建模助手:美赛备战全攻略
使用Chandra构建数学建模助手:美赛备战全攻略 1. 引言 数学建模竞赛就像一场智力马拉松,需要在有限时间内解决复杂问题。每年美赛期间,无数团队熬夜奋战,只为找到最优解决方案。但现实往往是:选题纠结、算法选择困难…...
AI专著写作快车道:特色工具大集合,助力科研成果出版
学术专著写作困境与AI工具助力 学术专著的写作并不只是简单的“写出来”,更在于能否顺利“出版、得到认可”。在当前的出版市场,学术专著的受众本就相对有限,因此出版社对学术价值和作者的影响力要求非常高。许多作者虽然完成了初稿…...
Qwen3-TTS快速部署教程:一键启动Web服务,3分钟开始声音克隆
Qwen3-TTS快速部署教程:一键启动Web服务,3分钟开始声音克隆 1. 为什么选择Qwen3-TTS进行语音克隆 想象一下这样的场景:你需要为海外客户录制多语言产品介绍,但雇佣专业配音演员成本高昂;或者想为自己的视频内容添加个…...
Graphormer企业级应用:制药公司分子筛选流水线中的轻量部署实践
Graphormer企业级应用:制药公司分子筛选流水线中的轻量部署实践 1. 项目背景与价值 在药物研发领域,分子筛选是耗时耗力的关键环节。传统实验方法需要数月时间才能完成数千种化合物的性质测试,而基于AI的分子属性预测技术可以将这一过程缩短…...
