Kubernetes(k8s)上部署redis5.0.14

news2025/1/23 14:48:29

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" # 存储类类型为nfs
  resources:
    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 /data
    dbfilename dump.rdb

    # 数据库数量
    databases 16

    # 保存数据库到数据文件
    save 900 1
    save 300 10
    save 60 10000
kind: ConfigMap
metadata:
  name: deploy-redis-config
  namespace: deploy-test

创建configmap如图:
在这里插入图片描述

部署脚本

apiVersion: v1
kind: Service
metadata:
  name: deploy-redis-svc
  namespace: deploy-test
  labels:
    app: redis
spec:
  ports:
  - port: 6379
    name: redis
    targetPort: 6379
    nodePort: 30379
  selector:
    app: redis
  type: NodePort
  sessionAffinity: ClientIP

---

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: deploy-redis
  namespace: deploy-test
spec:
  selector:
    matchLabels:
      app: redis # 必须匹配 .spec.template.metadata.labels
  serviceName: "deploy-redis-svc"
  replicas: 1
  template:
    metadata:
      labels:
        app: redis # 必须匹配 .spec.selector.matchLabels
    spec:
      terminationGracePeriodSeconds: 10
      containers:
      - command:
        - "redis-server"
        - "/usr/local/etc/redis.conf"
        name: redis
        image: redis:5.0.14
        ports:
        - containerPort: 6379
          name: redis
        volumeMounts:
        - name: redis-data
          mountPath: /data
        - name: redis-config
          mountPath: /usr/local/etc
          readOnly: true
      volumes:
      - name: redis-data
        persistentVolumeClaim:
          claimName: deploy-redis-nfs-pvc
      - name: redis-config
        configMap:
          name: deploy-redis-config
          items:
          - key: redis.conf
            path: redis.conf

接下来讲解一下里面比较重要的脚本

挂载数据目录

StatefulSet.spec.template.spec.volumes 当中有那么一串代码:

      - name: redis-data
        persistentVolumeClaim:
          claimName: deploy-redis-nfs-pvc

这串代码是要使用到 deploy-redis-nfs-pvc 这个pvc做数据存储,并给这个挂载取一个名字叫做 redis-data,然后在 StatefulSet.spec.template.spec.containers 有那么一串代码:

        - name: redis-data
          mountPath: /data

这串代码的意思是使用名为 redis-data 数据挂载,并把它挂在到pod的 /data 目录当中

挂载配置文件

StatefulSet.spec.template.spec.volumes 当中有那么一串代码:

      - name: redis-config
        configMap:
          name: deploy-redis-config
          items:
          - key: redis.conf
            path: redis.conf

这串代码的意思是读取 deploy-redis-config 这个configmap并命名为 redis-config,然后获取里面的 redis.conf 配置文件,命名为 redis.conf,然后在 StatefulSet.spec.template.spec.containers 有那么一串代码:

        - name: redis-config
          mountPath: /usr/local/etc
          readOnly: 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就已经完成了!

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

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

相关文章

LLM - Baichuan-13B 多卡加载与推理测试

目录 ​编辑 一.引言 二.模型加载 1.量化加载 ◆ 基础配置 ◆ 8_bit 加载 ◆ 4_bit 加载 2.多卡加载 ◆ API 加载 ◆ accelerate 加载 三.模型推理 1.显存查看 ◆ Nvidia 显卡监控 ◆ Python subprocess 调用 2.双卡推理 ◆ 双卡 divice 分配 ◆ 双卡推理 GPU…

Redis数据结构:Zset类型全面解析

Redis&#xff0c;作为一种高性能的键值对数据库&#xff0c;因其丰富的数据类型和高效的性能而受到了广泛的关注和使用。在 Redis 的五种主要数据类型中&#xff0c;Zset&#xff08;有序集合&#xff09;类型可能是最复杂&#xff0c;但也是最强大的一种。Zset 不仅可以存储键…

【JavaSE专栏90】用最简单的方法,使用 JDBC 连接 MySQL 数据库

作者主页&#xff1a;Designer 小郑 作者简介&#xff1a;3年JAVA全栈开发经验&#xff0c;专注JAVA技术、系统定制、远程指导&#xff0c;致力于企业数字化转型&#xff0c;CSDN学院、蓝桥云课认证讲师。 主打方向&#xff1a;Vue、SpringBoot、微信小程序 本文讲解了如何使用…

git-tf clone 路径有空格处理方案

git-tf clone 路径存在空格情况下&#xff0c;运行命令报错&#xff1b; 需要对路径进行双引号处理

汽车电子笔记之:基于AUTOSAR的电机控制器架构设计

目录 1、概述 2、AUTOSAR设计 2.1、SWC设计 2.2、PORT设计 2.3、Runnable设计 2.4、电机控制器OS实现 1、概述 电机控制器应用层的软件架构较为复杂,主要包括PMSM(Permanent-MagnetSynchronous Motor)的矢量控制算法。根据PMSM的控制算法,对算法中的软件功能进行分析&…

Linux 多线程同步机制(上)

文章目录 前言一、线程同步二、互斥量 mutex三、死锁总结 前言 一、线程同步 在多线程环境下&#xff0c;多个线程可以并发地执行&#xff0c;访问共享资源&#xff08;如内存变量、文件、网络连接 等&#xff09;。 这可能导致 数据不一致性, 死锁, 竞争条件等 问题。 为了解…

【LeetCode-中等题】138. 复制带随机指针的链表

文章目录 题目解题核心思路&#xff1a;找random指针指向思路一&#xff1a;哈希思路二&#xff1a;迭代构造新链表 方法一&#xff1a;哈希递归方法二&#xff1a;纯哈希方法三&#xff1a;迭代 节点拆分 题目 解题核心思路&#xff1a;找random指针指向 这里的拷贝属于深拷…

Leetcode刷题:395. 至少有 K 个重复字符的最长子串、823. 带因子的二叉树

Leetcode刷题:395. 至少有 K 个重复字符的最长子串、823. 带因子的二叉树 1. 395. 至少有 K 个重复字符的最长子串算法思路参考代码和运行结果 2. 823. 带因子的二叉树算法思路参考代码和运行结果 1. 395. 至少有 K 个重复字符的最长子串 题目难度&#xff1a;中等 标签&#…

lenovo联想笔记本小新Air-15 2021款Intel版ITL版(82GM)原装出厂Win10系统

自带所有驱动、出厂主题壁纸LOGO、Office办公软件、联想电脑管家等预装程序 所需要工具&#xff1a;16G或以上的U盘 文件格式&#xff1a;ISO 文件大小&#xff1a;11.2GB 链接&#xff1a;https://pan.baidu.com/s/12NTMOt5eUjOIsbayXPyiww?pwdrs4v 提取码&#xf…

基于单片机的数字温度计设计

一、项目背景 数字温度计是一种用于测量和显示环境温度的设备。本文章介绍基于STC89C52主控芯片的数字温度计的设计过程和实现原理。该设计采用DS18B20温度传感器进行温度采集&#xff0c;使用LCD1602显示屏进行温度显示&#xff0c;通过按键设置温度的上限和下限阀值&#xf…

点云配准算法之NDT

1 前言 很久之前记录了一篇博客PCL点云配准_thequitesunshine007的博客-CSDN博客 &#xff0c;记录的是基于点特征&#xff08;FPFH特征描述子&#xff09;匹配的SAC-ICP点云配准思想。 今天记录一下完全不一样的点云配准方法NDT。 2 介绍 2.1 多元正态分布 如果随机变量X满…

Servlet与Web容器的初探

Servlet 是用Java编写的服务端程序&#xff0c;具有独立于平台和协议的特性&#xff0c;主要功能在于交互式地浏览和生成数据&#xff0c;生成动态Web内容。 Servlet也需要帮助。请求到来时&#xff0c;必须有人实例化Servlet&#xff0c;或者至少要建立一个新的线程处理这个请…

js 正则表达式 验证 :页面中一个输入框,可输入1个或多个vid/pid,使用英文逗号隔开...

就是意思一个输入框里面&#xff0c;按VID/PID格式输入,VID和PID最大长度是4,最多50组 1、页面代码 <el-form ref"ruleForm" :model"tempSet" :rules"rules" label-position"right"> <!-- 最多 50组&#xff0c;每组9个字符…

RT_Thread内核机制学习(三)进程间通信

队列 队列里有多个消息块&#xff0c;每个消息块大小一致。 写&#xff1a; 有空间&#xff0c;成功。无空间&#xff1a;返回Err&#xff1b;等待一段时间。 队列里面会有两个链表&#xff1a;发送链表和接收链表 struct rt_messagequeue {struct rt_ipc_object parent; …

ChatGPT Prompting开发实战(二)

一、基于LangChain源码react来解析prompt engineering 在LangChain源码中一个特别重要的部分就是react&#xff0c;它的基本概念是&#xff0c;LLM在推理时会产生很多中间步骤而不是直接产生结果&#xff0c;这些中间步骤可以被用来与外界进行交互&#xff0c;然后产生new con…

C#,数值计算——双指数DE (double exponential)结构的计算方法与源程序

1 文本格式 using System; namespace Legalsoft.Truffer { /// <summary> /// Structure for implementing the DE (double exponential) rule. /// </summary> public class DErule : Quadrature { private double a { get; set; …

基于SpringBoot的员工(人事)管理系统

基于SpringBoot的员工&#xff08;人事&#xff09;管理系统 一、系统介绍二、功能展示三.其他系统实现五.获取源码 一、系统介绍 项目名称&#xff1a;基于SPringBoot的员工管理系统 项目架构&#xff1a;B/S架构 开发语言&#xff1a;Java语言 前端技术&#xff1a;BootS…

【Spring Cloud系列】- 分布式系统中实现幂等性的几种方式

【Spring Cloud系列】- 分布式系统中实现幂等性的几种方式 文章目录 【Spring Cloud系列】- 分布式系统中实现幂等性的几种方式一、概述二、什么是幂等性三、幂等性需关注几个重点四、幂等性有什么用五、常见用来保证幂等的手段5.1 MVCC方案5.2 去重表5.3 去重表5.4 select in…

5G 数字乡村数字农业农村大数据中心项目农业大数据建设方案PPT

导读&#xff1a;原文《5G 数字乡村数字农业农村大数据中心项目农业大数据建设方案PPT》&#xff08;获取来源见文尾&#xff09;&#xff0c;本文精选其中精华及架构部分&#xff0c;逻辑清晰、内容完整&#xff0c;为快速形成售前方案提供参考。以下是部分内容&#xff0c; 喜…

市级数字政府电子政务大数据中心项目建设和运营方案WORD

导读&#xff1a;原文《市级数字政府电子政务大数据中心项目建设和运营方案WORD》&#xff08;获取来源见文尾&#xff09;&#xff0c;本文精选其中精华及架构部分&#xff0c;逻辑清晰、内容完整&#xff0c;为快速形成售前方案提供参考。以下是部分内容&#xff0c; 目 录 …