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

(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、可以看到思考过程&#xff0c;可以当个学习工具 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 编辑工程代码 七、实验效果 实现效果&#xff0c;如下图&#xff1a; 一、SD卡 速读…...

    【Docker】私有Docker仓库的搭建

    一、准备工作 确保您的系统已安装Docker。如果没有安装&#xff0c;请参考Docker官方文档进行安装。 准备一个用于存储仓库数据的目录&#xff0c;例如/registry_data/。 二、拉取官方registry镜像 首先&#xff0c;我们需要从Docker Hub拉取官方的registry镜像。执行以下命…...

    linux 管道符、重定向与环境变量

    1. 输入输出重定向 在linux工作必须掌握的命令一文中&#xff0c;我们已经掌握了几乎所有基础常用的Linux命令&#xff0c;那么接下来的任务就是把多个命令适当的组合到一起&#xff0c;使其协同工作&#xff0c;会更高效的处理数据&#xff0c;做到这一点就必须搞清楚命令的输…...

    【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15

    缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下&#xff1a; struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...

    【Linux】shell脚本忽略错误继续执行

    在 shell 脚本中&#xff0c;可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行&#xff0c;可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令&#xff0c;并忽略错误 rm somefile…...

    css实现圆环展示百分比,根据值动态展示所占比例

    代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...

    ubuntu搭建nfs服务centos挂载访问

    在Ubuntu上设置NFS服务器 在Ubuntu上&#xff0c;你可以使用apt包管理器来安装NFS服务器。打开终端并运行&#xff1a; sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享&#xff0c;例如/shared&#xff1a; sudo mkdir /shared sud…...

    大语言模型如何处理长文本?常用文本分割技术详解

    为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...

    对WWDC 2025 Keynote 内容的预测

    借助我们以往对苹果公司发展路径的深入研究经验&#xff0c;以及大语言模型的分析能力&#xff0c;我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际&#xff0c;我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测&#xff0c;聊作存档。等到明…...

    【git】把本地更改提交远程新分支feature_g

    创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...

    多种风格导航菜单 HTML 实现(附源码)

    下面我将为您展示 6 种不同风格的导航菜单实现&#xff0c;每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...

    python执行测试用例,allure报乱码且未成功生成报告

    allure执行测试用例时显示乱码&#xff1a;‘allure’ &#xfffd;&#xfffd;&#xfffd;&#xfffd;&#xfffd;ڲ&#xfffd;&#xfffd;&#xfffd;&#xfffd;ⲿ&#xfffd;&#xfffd;&#xfffd;Ҳ&#xfffd;&#xfffd;&#xfffd;ǿ&#xfffd;&am…...

    大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计

    随着大语言模型&#xff08;LLM&#xff09;参数规模的增长&#xff0c;推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长&#xff0c;而KV缓存的内存消耗可能高达数十GB&#xff08;例如Llama2-7B处理100K token时需50GB内存&a…...