(k8s)k8s部署mysql与redis(无坑版)
0.准备工作
在开始之前,要确保我们的节点已经加入网络并且已经准备好,如果没有可以去看我前面发表的踩坑与解决的文章,希望能够帮到你。

1.k8s部署redis
1.1目标
由于我们的服务器资源较小,所以决定只部署一个redis副本,同时我们要能够提供一个对外的端口进行连接以及使用我们自己的自定义redis配置文件。
1.2效果
成功之后的效果应该如下图中有关redis的部分

1.3项目结构
redis-configmap.yaml
- 作用:用于在 Kubernetes 中创建一个 ConfigMap,用来存储 Redis 的配置文件内容。
redis-statefulset.yaml
- 作用:定义一个 StatefulSet,用于部署和管理 Redis 的有状态应用。
redis.conf
- 作用:Redis 的核心配置文件,用于定义 Redis 的运行参数。

1.4代码展示
redis-config.yaml
apiVersion: v1
kind: ConfigMap
metadata:name: redis-config
data:redis.conf: |save 86400 1 appendonly no
redis-statefulset.yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:name: redis-cluster
spec:serviceName: "redis-cluster"replicas: 1 selector:matchLabels:app: redis-clustertemplate:metadata:labels:app: redis-clusterspec:containers:- name: redisimage: redis:alpine # 使用官方的 Redis 镜像ports:- containerPort: 6379 # Redis 默认端口volumeMounts:- name: redis-datamountPath: /data # Redis 数据存储路径- name: redis-configmountPath: ****** # 挂载自定义配置文件subPath: redis.confcommand:- "redis-server"- "*******" # 指定使用自定义的配置文件volumes:- name: redis-dataemptyDir: {} # 使用 emptyDir 或 PVC 持久化数据- name: redis-configconfigMap:name: redis-config # 通过 ConfigMap 加载配置文件
---
apiVersion: v1
kind: Service
metadata:name: redis-cluster
spec:selector:app: redis-clusterports:- protocol: TCPport: ***targetPort: *****nodePort: ****type: NodePort # 使用 NodePort 类型
redis.conf
# redis-persistence.confsave 86400 1 appendonly no
1.5命令部署
由于之前已经部署过,所以先采用这两行命令停止redis的部署

将之前提供的yaml文件保存到服务器的自定义位置上,然后执行create命令

如果像下面这样我们就成功了!

接下来我们试试可不可以使用redis客户端工具对我们的redis进行连接,这里我采用的是Redis Insight,
输入暴露出来的端口之后,成功连接!

2.k8s部署mysql
2.1目标
同样由于服务器资源的限制,对于mysql我也只打算开一个单机版,能够使用mysql外部客户端进行连接,对于数据可以持久化保存
2.2项目结构

mysql-statefulset.yaml
- 作用:定义 MySQL 的 StatefulSet,用于管理有状态的 MySQL Pod。
mysqlpvc.yaml
- 作用:定义 PersistentVolumeClaim (PVC),用于向 MySQL Pod 申请持久化存储。
mysqlpv.yaml
- 作用:定义 PersistentVolume (PV),用于提供实际的存储资源。
2.3项目代码示例
mysql-statefulset.yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:name: mysql
spec:serviceName: "mysql"replicas: 1selector:matchLabels:app: mysqltemplate:metadata:labels:app: mysqlspec:containers:- name: mysqlimage: mysql:oracleenv:- name: MYSQL_ROOT_PASSWORDvalue: ******ports:- containerPort: 3306volumeMounts:- name: mysql-datamountPath: /var/lib/mysqlvolumeClaimTemplates:- metadata:name: mysql-dataspec:accessModes: ["ReadWriteOnce"]resources:requests:storage: 10Gi
---
apiVersion: v1
kind: Service
metadata:name: mysql
spec:ports:- port: ****targetPort: ***nodePort: ****selector:app: mysqltype: NodePort
mysqlpvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: mysql-data-mysql-0
spec:accessModes:- ReadWriteOnceresources:requests:storage: 10GistorageClassName: standard # 或者你集群中其他存储类的名称
mysqlpv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:name: mysql-pv
spec:capacity:storage: 10GivolumeMode: FilesystemaccessModes:- ReadWriteOncepersistentVolumeReclaimPolicy: RetainstorageClassName: standardhostPath: path: /mnt/data/mysql
2.4效果
如下图所示便是成功

2.5命令部署
将上面的yaml文件保存到服务器之后执行create命令进行部署,需要先执行pv创建一个可以持久化的资源,之后再执行statefulset文件便成功部署!
注意在执行我们的statefulset之后k8s便会根据我们的定义为我们创建一个默认的pvc来试图绑定资源,但我们采用了自定义的pv资源所以默认的pvc是绑定不到的,我们需要在这后面再次运行我们的pvcyaml文件将它的配置进行改变,

如果能够帮助到你的话,可以留下一个免费的赞吗?:)
题外话
无状态应用是指应用的实例之间没有数据依赖,应用不需要保留用户的会话数据或持久化数据。
特点
- 无数据依赖:每个 Pod 都是独立的,处理完请求后不会存储任何状态数据。
- 弹性伸缩方便:Pod 可以随意增加或减少,不需要考虑数据一致性。
- 容易替换:Pod 重启或迁移不会影响应用的功能,因为所有数据都存储在外部(如数据库、缓存等)。
- 常见场景:
- Web 服务器(如 Nginx、Apache)
- 无状态 API 服务
- 静态文件托管
有状态应用是指应用的实例需要存储并维护自己的状态信息,通常需要持久化数据。
特点
- 数据依赖:应用需要保留会话数据或用户数据,数据通常存储在本地磁盘或持久化存储中。
- 固定 Pod 标识:Pod 通常需要固定的标识(如名称),以确保数据和应用的关联性。
- 复杂部署:需要考虑数据持久化、备份、恢复和一致性问题。
- 常见场景:
- 数据库(如 MySQL、Redis、MongoDB)
- 消息队列(如 Kafka、RabbitMQ)
- 日志存储(如 Elasticsearch)
如果还有啥错误的话,欢迎在评论区或者私信我!
相关文章:
(k8s)k8s部署mysql与redis(无坑版)
0.准备工作 在开始之前,要确保我们的节点已经加入网络并且已经准备好,如果没有可以去看我前面发表的踩坑与解决的文章,希望能够帮到你。 1.k8s部署redis 1.1目标 由于我们的服务器资源较小,所以决定只部署一个redis副本&#x…...
Git常用操作指令
初始化配置 # 配置全局用户名和邮箱 git config --global user.name "账号" git config --global user.email "邮箱"# 查看配置信息 git config --list仓库初始化创建新的 Git 仓库: # 初始化新仓库 git init# 克隆远程仓库 git clone URL状态…...
新手理解:Android 中 Handler 和 Thread.sleep 的区别及应用场景
新手理解:Android 中 Handler 和 Thread.sleep 的区别及应用场景 Handler 是啥?Handler 的几个核心功能: Thread.sleep 是啥?Thread.sleep 的核心特点: 两者的区别它们的应用场景1. Handler 的应用场景2. Thread.sleep…...
智能安全策略-DPL
一、华三防火墙-接口的概念。 1、接口。 1. 什么是接口? 接口就像是防火墙的“门”,用来连接不同的网络设备,比如电脑、路由器、服务器等。通过这些“门”,数据(比如网页、视频、文件)才能进出防火墙。 …...
差分进化算法 (Differential Evolution) 算法详解及案例分析
差分进化算法 (Differential Evolution) 算法详解及案例分析 目录 差分进化算法 (Differential Evolution) 算法详解及案例分析1. 引言2. 差分进化算法 (DE) 算法原理2.1 基本概念2.2 算法步骤3. 差分进化算法的优势与局限性3.1 优势3.2 局限性4. 案例分析4.1 案例1: 单目标优化…...
Alibaba Spring Cloud 十七 Sentinel熔断降级
概述 在微服务架构中,熔断与降级是保证系统稳定性的重要机制,能有效防止故障蔓延或雪崩效应。当某个服务出现异常、延迟过高或错误率过高时,触发熔断保护,将该服务“隔离”一段时间,避免影响整体系统的吞吐和可用性。 …...
LetsWave脑电数据简单ERP分析matlab(一)
LetsWave是基于matlab的一款工具包,类似eeglab,也可以对数据进行预处理。习惯使用eeglab做数据预处理的,可以先在eeglab中做预处理,然后可以保存为*.set格式,最后在letswave中画图。 letswave下载地址:htt…...
设计模式Python版 工厂方法模式
文章目录 前言一、工厂方法模式二、工厂方法模式示例三、工厂方法模式客户端改进四、工厂方法模式隐藏工厂方法(可选) 前言 GOF设计模式分三大类: 创建型模式:关注对象的创建过程,包括单例模式、简单工厂模式、工厂方…...
贝叶斯优化相关
贝叶斯优化相关 python中有很多模块支持贝叶斯优化,如bayesian-optimization、hyperopt,比较好用的是hyperopt,下面是对hyperopt文章的翻译,原文地址如下 https://districtdatalabs.silvrback.com/parameter-tuning-with-hyperop…...
【Matlab高端绘图SCI绘图全家桶更新版】在原60种绘图类型基础上更新
俗话说,一图胜千言。数据可视化便是将数据通过图形化的方式展现出来,它更加便于我们观察数据蕴含的的规律,洞察了数据蕴含的规律后,从而使我们能够做更好的进行科研表达和学术写作。 科研过程中,绘图是一项非常重要的…...
如何构建一个 GraphRAG 系统
构建一个 GraphRAG 系统以提升传统 RAG(检索增强生成)模型的性能,需要结合知识图谱和生成式语言模型的能力,以下是实现的关键步骤和方法: 1. 数据准备 (1) 收集数据 确保有足够的高质量文本数据源,如&…...
代码随想录算法训练营day34
代码随想录算法训练营 —day34 文章目录 代码随想录算法训练营前言一、62.不同路径动态规划动态规划空间优化 二、63. 不同路径 II动态规划动态规划优化空间版 三、343. 整数拆分动态规划贪心算法 96.不同的二叉搜索树总结 前言 今天是算法营的第34天,希望自己能够…...
单片机基础模块学习——按键
一、按键原理图 当把跳线帽J5放在右侧,属于独立按键模式(BTN模式),放在左侧为矩阵键盘模式(KBD模式) 整体结构是一端接地,一端接控制引脚 之前提到的都是使用了GPIO-准双向口的输出功能&#x…...
polars as pl
import polars as pl#和pandas类似,但是处理大型数据集有更好的性能. #necessary import pandas as pd#导入csv文件的库 import numpy as np#进行矩阵运算的库 #metric from sklearn.metrics import roc_auc_score#导入roc_auc曲线 #KFold是直接分成k折,StratifiedKFold还要考虑…...
重构(4)
(一)添加解释性变量,使得代码更容易理解,更容易调试,也可以方便功能复用 解释性的变量 总价格为商品总价(单价*数量)-折扣(超过100个以上的打9折)邮费(原价的…...
神经网络|(三)线性回归基础知识
【1】引言 前序学习进程中,已经对简单神经元的工作模式有所了解,这种二元分类的工作机制,进一步使用sigmoid()函数进行了平滑表达。相关学习链接为: 神经网络|(一)加权平均法,感知机和神经元-CSDN博客 神经网络|(二…...
deepseek R1 高效使用学习
直接提问 1、可以看到思考过程,可以当个学习工具 2、高效简介代码prompt <context> You are an expert programming AI assistant who prioritizes minimalist, efficient code. You plan before coding, write idiomatic solutions, seek clarification …...
STM32_SD卡的SDIO通信_基础读写
本篇将使用CubeMXKeil, 创建一个SD卡读写的工程。 目录 一、SD卡要点速读 二、SDIO要点速读 三、SD卡座接线原理图 四、CubeMX新建工程 五、CubeMX 生成 SD卡的SDIO通信部分 六、Keil 编辑工程代码 七、实验效果 实现效果,如下图: 一、SD卡 速读…...
【Docker】私有Docker仓库的搭建
一、准备工作 确保您的系统已安装Docker。如果没有安装,请参考Docker官方文档进行安装。 准备一个用于存储仓库数据的目录,例如/registry_data/。 二、拉取官方registry镜像 首先,我们需要从Docker Hub拉取官方的registry镜像。执行以下命…...
linux 管道符、重定向与环境变量
1. 输入输出重定向 在linux工作必须掌握的命令一文中,我们已经掌握了几乎所有基础常用的Linux命令,那么接下来的任务就是把多个命令适当的组合到一起,使其协同工作,会更高效的处理数据,做到这一点就必须搞清楚命令的输…...
R语言AI模型部署方案:精准离线运行详解
R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...
YSYX学习记录(八)
C语言,练习0: 先创建一个文件夹,我用的是物理机: 安装build-essential 练习1: 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件,随机修改或删除一部分,之后…...
工程地质软件市场:发展现状、趋势与策略建议
一、引言 在工程建设领域,准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具,正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...
在四层代理中还原真实客户端ngx_stream_realip_module
一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡(如 HAProxy、AWS NLB、阿里 SLB)发起上游连接时,将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后,ngx_stream_realip_module 从中提取原始信息…...
mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包
文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...
C++八股 —— 单例模式
文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全(Thread Safety) 线程安全是指在多线程环境下,某个函数、类或代码片段能够被多个线程同时调用时,仍能保证数据的一致性和逻辑的正确性…...
GC1808高性能24位立体声音频ADC芯片解析
1. 芯片概述 GC1808是一款24位立体声音频模数转换器(ADC),支持8kHz~96kHz采样率,集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器,适用于高保真音频采集场景。 2. 核心特性 高精度:24位分辨率,…...
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问(基础概念问题) 1. 请解释Spring框架的核心容器是什么?它在Spring中起到什么作用? Spring框架的核心容器是IoC容器&#…...
论文阅读笔记——Muffin: Testing Deep Learning Libraries via Neural Architecture Fuzzing
Muffin 论文 现有方法 CRADLE 和 LEMON,依赖模型推理阶段输出进行差分测试,但在训练阶段是不可行的,因为训练阶段直到最后才有固定输出,中间过程是不断变化的。API 库覆盖低,因为各个 API 都是在各种具体场景下使用。…...
android RelativeLayout布局
<?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_parent"android:gravity&…...
