Kubernetes(K8S)部署 Redis Cluster 集群

以下将详细介绍如何使用 Kubernetes(K8S)部署 Redis Cluster 集群,并给出相应的 YAML 代码。

1. 准备工作

在开始部署之前,需要确保已经安装并配置好 Kubernetes 集群,并且 kubectl 可以正常与集群通信。

2. 部署 Redis Cluster

2.1 创建 Namespace (可选)

创建一个名为 redis-cluster-namespace.yaml 的文件,内容如下:

apiVersion: v1
kind: Namespace
metadata:
  name: redis-cluster

使用以下命令创建 Namespace:

kubectl apply -f redis-cluster-namespace.yaml
2.2 创建 Redis 配置文件 ConfigMap

Redis Cluster 需要特定的配置,我们可以通过 ConfigMap 来管理这些配置。创建一个名为 redis-config.yaml 的文件,内容如下:

apiVersion: v1
kind: ConfigMap
metadata:
  name: redis-config
  namespace: redis-cluster
data:
  redis.conf: |
    port 6379
    cluster-enabled yes
    cluster-config-file /data/nodes.conf
    cluster-node-timeout 5000
    appendonly yes
    # 如果需要密码认证,取消注释并替换密码
    # requirepass yourpassword
    # masterauth yourpassword

上述配置文件中,cluster-enabled yes 开启了 Redis Cluster 功能,cluster-config-file nodes.conf 指定了集群配置文件的名称,这个文件中的内容是由 Redis 集群自动维护和更新的,随着集群的运行,节点的状态、槽位分配等信息可能会发生变化,文件内容也会相应更新,以反映集群的最新状态。cluster-node-timeout 5000 表示节点超时时间为 5 秒,appendonly yes 开启了 AOF 持久化。

使用以下命令创建 ConfigMap:

kubectl apply -f redis-config.yaml
2.3 创建 Redis 服务

创建一个名为 redis-service.yaml 的文件,用于定义 Redis 服务,内容如下:

apiVersion: v1
kind: Service
metadata:
  name: redis-cluster-service
  namespace: redis-cluster
spec:
  selector:
    app: redis-cluster
  ports:
    - protocol: TCP
      port: 6379
      targetPort: 6379
  type: ClusterIP

这个服务将用于在集群内部暴露 Redis 节点,使用以下命令创建服务:

kubectl apply -f redis-service.yaml
2.4 创建 Redis 有状态集(StatefulSet)

创建一个名为 redis-statefulset.yaml 的文件,用于定义 Redis 有状态集,内容如下:

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: redis-cluster
  namespace: redis-cluster
spec:
  serviceName: redis-cluster-service
  replicas: 6
  selector:
    matchLabels:
      app: redis-cluster
  template:
    metadata:
      labels:
        app: redis-cluster
    spec:
      containers:
      - name: redis
        image: redis:6.2-alpine
        ports:
        - containerPort: 6379
        - containerPort: 16379
        command: ["/bin/sh", "-c"]
        args:
        - >
          cp /redis-config/redis.conf /data/redis.conf &&
          redis-server /data/redis.conf
        volumeMounts:
        - name: redis-config
          mountPath: /redis-config
        - name: redis-data
          mountPath: /data
        # 存活探针
        livenessProbe:
          exec:
            command: ["redis-cli", "ping"]
          initialDelaySeconds: 5
          periodSeconds: 5
        # 就绪探针
        readinessProbe:
          exec:
            command: ["redis-cli", "ping"]
          initialDelaySeconds: 5
          periodSeconds: 5
      volumes:
      - name: redis-config
        configMap:
          name: redis-config
  volumeClaimTemplates:
  - metadata:
      name: redis-data
    spec:
      accessModes: [ "ReadWriteOnce" ]
      storageClassName: "standard" # 修改为你的存储类
      resources:
        requests:
          storage: 1Gi

上述有状态集创建了 6 个 Redis 节点(一般 Redis Cluster 建议使用 6 个节点,3 主 3 从),并挂载了之前创建的 ConfigMap 和持久化存储卷。使用以下命令创建有状态集:

kubectl apply -f redis-statefulset.yaml
2.5 创建 Redis 集群

等待所有 Redis 节点启动完成后,可以使用以下命令创建 Redis Cluster:

kubectl exec -it redis-cluster-0 -- redis-cli --cluster create \
$(kubectl get pods -l app=redis-cluster -o jsonpath='{range.items[*]}{.status.podIP}:6379 ') \
--cluster-replicas 1

上述命令中,--cluster-replicas 1 表示每个主节点有 1 个从节点。

3. 验证 Redis Cluster 部署

可以使用以下命令进入任意一个 Redis 节点的容器,并验证集群是否正常工作:

kubectl exec -it redis-cluster-0 -- redis-cli cluster info
kubectl exec -it redis-cluster-0 -- redis-cli cluster nodes

如果上述命令能够正常输出集群信息和节点信息,则说明 Redis Cluster 部署成功。

总结

通过以上步骤,我们使用 Kubernetes 的 ConfigMap、Service 和 StatefulSet 成功部署了 Redis Cluster 集群。在实际生产环境中,还可以根据需要调整配置和资源,以满足业务需求。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

无人机扩频技术对比!

一、技术原理与核心差异 FHSS(跳频扩频) 核心原理:通过伪随机序列控制载波频率在多个频点上快速跳变,收发双方需同步跳频序列。信号在某一时刻仅占用窄带频谱,但整体覆盖宽频带。 技术特点: 抗干扰…

项目实战--网页五子棋(对战功能)(9)

上期我们完成了websocket建立连接后的数据初始化,今天我们完成落子交互的具体代码: 这里我们先复习一下,之前约定好的落子请求与响应包含的字段: 1. 发送落子请求 我们在script.js文件中找到落子的相关方法,增加发送请…

elementplus的cascader级联选择器在懒加载且多选时的一些问题分析

1. 背景 在之前做的一个项目中使用到了element的级联选择器,并且是需要懒加载、多选、父子不关联等等,在选的时候当然没问题,但是回显的时候就会回显不出来,相信大部分伙伴都遇到过这个问题。我在以前出过一篇文章写过关于级联选…

基于PySide6的CATIA零件自动化着色工具开发实践

引言 在汽车及航空制造领域,CATIA作为核心的CAD设计软件,其二次开发能力对提升设计效率具有重要意义。本文介绍一种基于Python的CATIA零件着色工具开发方案,通过PySide6实现GUI交互,结合COM接口操作实现零件着色自动化。该方案成…

Uniapp项目运行到微信小程序、H5、APP等多个平台教程

摘要:Uniapp作为一款基于Vue.js的跨平台开发框架,支持“一次开发,多端部署”。本文将手把手教你如何将Uniapp项目运行到微信小程序、H5、APP等多个平台,并解析常见问题。 一、环境准备 在开始前,请确保已安装以下工具…

ROS分布式部署通信

目录 一、概念 二、设置 ROS 分布式网络 1. 环境要求 2. 主机(Master)设置 3. 从机(节点设备)设置 4. 测试是否正常通信 三、进阶启动多从机节点(launch)。 一、概念 ROS 分布式通信用于在多台计算机…

qt open3dAlpha重建

qt open3dAlpha重建 效果展示二、流程三、代码效果展示 二、流程 创建动作,链接到槽函数,并把动作放置菜单栏 参照前文 三、代码 1、槽函数实现 void on_actionAlpha_triggered();//alpha重建 void MainWindow::

我的三维引擎独立开发之路:坚持与迷茫

今天终于解决了,之前开发的基于threeceisum开发的融合引擎Merge3D,引用threejs版本过低的问题,也算又前进了一步! 有人说,直接用最新版本不就行了,哎关键之前版本怎么办哪,很多不兼容性,需要一个…

【ArcGIS】地理坐标系

文章目录 一、坐标系理论体系深度解析1.1 地球形态的数学表达演进史1.1.1 地球曲率的认知变化1.1.2 参考椭球体参数对比表 1.2 地理坐标系的三维密码1.2.1 经纬度的本质1.2.2 大地基准面(Datum)的奥秘 1.3 投影坐标系:平面世界的诞生1.3.1 投…

数据分析人员需要掌握sql到什么程度?

学习SQL三个层次 熟悉基本的增删改查语句及函数,包括select、where、group by、having、order by、delete、insert、join、update等,可以做日常的取数或简单的分析(该水平已经超过90%非IT同事);掌握并熟练使用高阶语法&#xff0…

简洁实用的3个免费wordpress主题

高端大气动态炫酷的免费企业官网wordpress主题 非常简洁的免费wordpress主题,安装简单、设置简单,几分钟就可以搭建好一个wordpress网站。 经典风格的免费wordpress主题 免费下载 https://www.fuyefa.com/wordpress

golang从入门到做牛马:第一篇-我与golang的缘分,go语言简介

还记得2018年的夏天,刚毕业的我不知道该做些什么,于是自学了一周的go语言,想要找一份go语言工作的代码,当时的go还没有go mod来管理依赖包,在北京找了一个月的工作,找到了一个小公司做了后端开发,当然使用go语言开发,带着兴奋劲,年轻身体也好,边努力学习,边工作。 时…

【Python编程】高性能Python Web服务部署架构解析

一、FastAPI 与 Uvicorn/Gunicorn 的协同 1. 开发环境:Uvicorn 直接驱动 作用:Uvicorn 作为 ASGI 服务器,原生支持 FastAPI 的异步特性,提供热重载(--reload)和高效异步请求处理。 启动命令: u…

Sentinel 笔记

Sentinel 笔记 1 介绍 Sentinel 是阿里开源的分布式系统流量防卫组件,专注于 流量控制、熔断降级、系统保护。 官网:https://sentinelguard.io/zh-cn/index.html wiki:https://github.com/alibaba/Sentinel/wiki 对比同类产品&#xff1…

JQuery 语法 $

jQuery 语法是通过选取 HTML 元素, 并对选取的元素执⾏某些操作 JQuery 选择器 jQuery 中所有选择器都以 $ 开头:$(). JQuery事件 事件由三部分组成: 1. 事件源: 哪个元素触发的 2. 事件类型: 是点击, 选中, 还是修改? 3. 事件处理程序: 进⼀步如何处理. …

算法每日一练 (9)

💢欢迎来到张胤尘的技术站 💥技术如江河,汇聚众志成。代码似星辰,照亮行征程。开源精神长,传承永不忘。携手共前行,未来更辉煌💥 文章目录 算法每日一练 (9)最小路径和题目描述解题思路解题代码…

2025/3/8 第 27 场 蓝桥入门赛 题解

1. 38红包【算法赛】 签到题&#xff1a; 算倍数就行了 #include <bits/stdc.h> using namespace std; int main() {int ans0;for(int i1;i<2025;i){if(i % 3 0)ans;else if(i % 8 0)ans;else if(i % 38 0)ans;}cout<<ans<<endl;return 0; } 2. 祝福…

《白帽子讲 Web 安全》之深入同源策略(万字详解)

目录 引言 一、同源策略基础认知 &#xff08;一&#xff09;定义 &#xff08;二&#xff09;作用 &#xff08;三&#xff09;作用机制详解 二、同源策略的分类 &#xff08;一&#xff09;域名同源策略 &#xff08;二&#xff09;协议同源策略 &#xff08;三&…

基于SpringBoot的商城管理系统(源码+部署教程)

运行环境 数据库&#xff1a;MySql 编译器&#xff1a;Intellij IDEA 前端运行环境&#xff1a;node.js v12.13.0 JAVA版本&#xff1a;JDK 1.8 主要功能 基于Springboot的商城管理系统包含管理端和用户端两个部分&#xff0c;主要功能有&#xff1a; 管理端 首页商品列…

FFmpeg-chapter7和chapter8-使用 FFmpeg 解码视频(原理篇和实站篇)

解码流程如下图 流程&#xff1a;首先&#xff0c;通过 avcodec_alloc_context3(nullptr) 分配一个 AVCodecContext 结构体&#xff0c;然后使用 avcodec_parameters_to_context 将参数复制到上下文中&#xff0c;接着通过 avcodec_find_decoder 查找指定的解码器&#xff0c;并…