当前位置: 首页 > news >正文

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环境&#xff0c;可参考我写的文章&…...

frida动态调试入门01——定位关键代码

说明 frida是一款Python工具可以方便对内存进行hook修改代码逻辑在移动端安全和逆向过程中常用到。 实战 嘟嘟牛登录页面hook 使用到的工具 1&#xff0c;jadx-gui 2&#xff0c;frida 定位关键代码 使用jadx-gui 进行模糊搜索&#xff0c;例如搜索encyrpt之类的加密关键…...

ASP.NET Core 8 的配置类 Configuration

Configuration Configuration 可以从两个途径设置&#xff1a; WebApplication创建的对象app.Configuration 属性WebApplicationBuilder 创建的 builder.Configuration 属性 app的Configuration优先级更高&#xff0c;host Configuration作为替补配置&#xff0c;因为app运行…...

MySql增量恢复

一、 使用二进制日志的时间点恢复 注意 本节和下一节中的许多示例都使用mysql客户端来处理mysqlbinlog生成的二进制日志输出。如果您的二进制日志包含\0&#xff08;null&#xff09;字符&#xff0c;那么mysql将无法解析该输出&#xff0c;除非您使用--binary模式选项调用它。…...

设计模式--装饰者模式(Decorator Pattern)

一、什么是装饰者模式&#xff08;Decorator Pattern&#xff09; 装饰者模式&#xff08;Decorator Pattern&#xff09;是一种结构型设计模式&#xff0c;它允许你在不修改现有对象的情况下&#xff0c;动态地将新功能附加到对象上。这种模式通过创建一个包装类&#xff0c;…...

Spring三级缓存解决循环依赖

Spring三级缓存解决循环依赖 一 Spring bean对象的生命周期 二 三级缓存解决循环依赖 实现原理解析 spring利用singletonObjects, earlySingletonObjects, singletonFactories三级缓存去解决的&#xff0c;所说的缓存其实也就是三个Map 先实例化的bean会通过ObjectFactory半…...

Vscode自动移出不用的包

Vscode自动移出不用的包 在Vscode中删除不用的包、Vscode移出不用的包、Vscode移出不用的import包 设置 找到setting.json&#xff08;在字体设置里面&#xff09;&#xff0c;添加如下配置 "editor.codeActionsOnSave": { "source.organizeImports": tru…...

leetcode做题笔记120. 三角形最小路径和

给定一个三角形 triangle &#xff0c;找出自顶向下的最小路径和。 每一步只能移动到下一行中相邻的结点上。相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 1 的两个结点。也就是说&#xff0c;如果正位于当前行的下标 i &#xff0c;那么下一…...

weblogic/CVE-2018-2894文件上传漏洞复现

启动docker环境 查看帮助文档 环境启动后&#xff0c;访问http://your-ip:7001/console&#xff0c;即可看到后台登录页面。 执行docker-compose logs | grep password可查看管理员密码&#xff0c;管理员用户名为weblogic&#xff0c;密码为lFVAJ89F 登录后台页面&#xff0c;…...

windows10默认浏览器总是自动更改为Edge浏览器

在设置的默认应用设置中把默认浏览器改为chrome或其他之后他自动又会改回Edge。不得不说*软真的狗。 解决办法&#xff1a; 后来发现在Edge浏览器的设置中有这么一个选项&#xff0c;会很无耻的默认是Edge。把它关掉后重新设置就行了。...

系统架构设计师考试论文:论软件架构风格与应用

软件体系结构风格是描述某一特定应用领域中系统组织方式的惯用模式。体系结构风格定义一个系统家族&#xff0c;即一个体系结构定义一个词汇表和一纽约束。词汇表中包含一些构件和连接件类型&#xff0c;而这组约束指出系统是如何将这些构件和连接件组合起来的。体系结构风格反…...

xss-labs靶场通关详解

文章目录 前言level1level2level3level4level5level6level7level8level9level10level11level12level13level14level15level16level17level18level19&level20 前言 赶着假期结尾的时候&#xff0c;赶紧给自己找点任务做。现在对xss还是一知半解&#xff0c;只是了解个大概&a…...

关于类和接口

类和接口的区别&#xff0c;去除语法层面&#xff0c;谈谈编程层面的意义。 设计原则SOLID&#xff1a; S&#xff1a;单一职责(SRP)&#xff0c;Single Responsibility Principle O&#xff1a;开-闭原则(OCP)&#xff0c;Open-Closed Principle L&#xff1a;里氏替换(LSP)&…...

网络安全社区与资源分享: 推荐网络安全社区、论坛、博客、培训资源等,帮助从业者拓展人脉和知识。

第一章&#xff1a;引言 在当今数字化的世界中&#xff0c;网络安全问题变得愈发突出。随着各种新型威胁的涌现&#xff0c;网络安全从业者面临着持续不断的挑战。然而&#xff0c;正是因为这些挑战&#xff0c;网络安全社区应运而生&#xff0c;成为从业者们互相交流、学习和…...

SAP MM学习笔记26- SAP中 振替转记(转移过账)和 在库转送(库存转储)5 - 总结

SAP 中在库移动 不仅有入库&#xff08;GR&#xff09;&#xff0c;出库&#xff08;GI&#xff09;&#xff0c;也可以是单纯内部的转记或转送。 1&#xff0c;振替转记&#xff08;转移过账&#xff09; 具体查看我之前的文章。 SAP MM学习笔记26- SAP中 振替转记&#xff…...

Stable Diffusion WebUI提示词Prompts常用推荐

在Stable Diffusion(以下简称SD)中,提示词是很重要的一部分,写好提示词就能让画图事半功倍,下面介绍一款好用的工具,能很程度上让你更轻松。 他就是sd-webui-prompt-all-in-one 下面将详细介绍的安装以及使用,后面将详细讲解提示词(Prompt)应该如何写提示词才能使画…...

Android 13 Ethernet变更

Android13 有线变更 以太网相关的功能在Android12 和13 网络部分变化是不大的&#xff0c;Android11 到Android 12 网络部分无论是代码存放目录和代码逻辑都是有较多修改的&#xff0c;主要包括以下几个部分 限制了设置有线网参数设置接口方法 新增有线网开启关闭接口方法 新…...

基于单片机的超声波语音测距系统

一、系统方案 超声波具有指向性强&#xff0c;能量消耗缓慢&#xff0c;在介质中传播的距离较远&#xff0c;因而超声波经常用于距离的测量&#xff0c;如测距仪和物位测量仪等都可以通过超声波来实现。利用超声波检测往往比较迅速、方便、计算简单、易于做到实时控制&#xff…...

算法系列-力扣876-求链表的中间节点

# 求链表中间节点&#xff0c;如果有两个中间节点取后面那个 链表定义 // 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 命令参考 接下来开始我们的正题,一起学习下…...

谷歌浏览器插件

项目中有时候会用到插件 sync-cookie-extension1.0.0&#xff1a;开发环境同步测试 cookie 至 localhost&#xff0c;便于本地请求服务携带 cookie 参考地址&#xff1a;https://juejin.cn/post/7139354571712757767 里面有源码下载下来&#xff0c;加在到扩展即可使用FeHelp…...

树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频

使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...

Java如何权衡是使用无序的数组还是有序的数组

在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...

为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?

在建筑行业&#xff0c;项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升&#xff0c;传统的管理模式已经难以满足现代工程的需求。过去&#xff0c;许多企业依赖手工记录、口头沟通和分散的信息管理&#xff0c;导致效率低下、成本失控、风险频发。例如&#…...

Linux简单的操作

ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...

Mac下Android Studio扫描根目录卡死问题记录

环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中&#xff0c;提示一个依赖外部头文件的cpp源文件需要同步&#xff0c;点…...

USB Over IP专用硬件的5个特点

USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中&#xff0c;从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备&#xff08;如专用硬件设备&#xff09;&#xff0c;从而消除了直接物理连接的需要。USB over IP的…...

Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)

在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马&#xff08;服务器方面的&#xff09;的原理&#xff0c;连接&#xff0c;以及各种木马及连接工具的分享 文件木马&#xff1a;https://w…...

JVM 内存结构 详解

内存结构 运行时数据区&#xff1a; Java虚拟机在运行Java程序过程中管理的内存区域。 程序计数器&#xff1a; ​ 线程私有&#xff0c;程序控制流的指示器&#xff0c;分支、循环、跳转、异常处理、线程恢复等基础功能都依赖这个计数器完成。 ​ 每个线程都有一个程序计数…...

人机融合智能 | “人智交互”跨学科新领域

本文系统地提出基于“以人为中心AI(HCAI)”理念的人-人工智能交互(人智交互)这一跨学科新领域及框架,定义人智交互领域的理念、基本理论和关键问题、方法、开发流程和参与团队等,阐述提出人智交互新领域的意义。然后,提出人智交互研究的三种新范式取向以及它们的意义。最后,总结…...