KubeSphere学习笔记:部署mysql
本文首发于 栏轩·阁欢迎访问阅读原文获取更好的阅读体验。一、前置准备部署 MySQL 前需要先完成以下环境搭建具体步骤见之前的两篇教程Docker Desktop 启用 K8s建议使用kind 模式因为 LoadBalancer 支持映射所有端口安装 KubeSphere激活 KubeSphere申请免费 License否则无法使用扩展中心安装插件本文基于以下环境宿主机Windows 11 WSL 2 Ubuntu 22.04 Docker DesktopK8s 启用kind 模式 KubeSphere已安装并激活二、概念速览在开始之前先快速了解几个 K8s 概念后面会用到概念作用类比Docker工作负载Deployment管理 Pod 的生命周期保证容器始终运行docker run 自动重启持久卷声明PVC申请一块持久化存储空间docker volume保密字典Secret存储敏感信息密码、密钥等环境变量文件配置字典ConfigMap存储配置文件挂载配置文件服务Service暴露 Pod 的网络入口docker port映射LoadBalancer将服务暴露到宿主机kind 模式下自动映射端口自动端口转发三、创建企业空间和项目登录 KubeSphere Web 控制台http://localhost:30880账号admin/P88w0rd依次创建企业空间→ 给团队用的顶层隔离单元项目命名空间→ 资源隔离的项目空间所有 MySQL 资源都会创建在此项目下项目在 K8s 中对应namespace后续的kubectl命令中-n mysql就是指定项目名称。四、创建保密字典SecretMySQL 需要配置 root 密码敏感信息应该放在 Secret 中而不是写在配置文件里。在项目左侧菜单 →配置→保密字典→创建名称mysql-secret键mysql-root-password值123456你的密码这样密码就以密文形式存储在 K8s 中工作负载引用时以环境变量注入不会明文暴露。五、创建配置字典ConfigMapMySQL 的配置文件my.cnf放在 ConfigMap 中方便修改和管理。在项目左侧菜单 →配置→配置字典→创建名称mysql-config配置数据键my.cnf值如下[client] default-character-setutf8mb4 [mysql] default-character-setutf8mb4 [mysqld] init_connectSET collation_connection utf8mb4_unicode_ci init_connectSET NAMES utf8mb4 character-set-serverutf8mb4 collation-serverutf8mb4_unicode_ci skip-character-set-client-handshake skip-name-resolve max_connections1000配置说明配置项作用character-set-serverutf8mb4设置 MySQL 默认字符集为 utf8mb4支持 emojicollation-serverutf8mb4_unicode_ci设置排序规则skip-name-resolve跳过 DNS 反向解析加快连接速度max_connections1000最大连接数开发环境够用参考 YAML 格式kind:ConfigMapapiVersion:v1metadata:name:mysql-confignamespace:mysqldata:my.cnf:|[client] default-character-setutf8mb4 [mysql] default-character-setutf8mb4 [mysqld] init_connectSET collation_connection utf8mb4_unicode_ci init_connectSET NAMES utf8mb4 character-set-serverutf8mb4 collation-serverutf8mb4_unicode_ci skip-character-set-client-handshake skip-name-resolve max_connections1000六、创建持久卷声明PVCMySQL 的数据需要持久化否则 Pod 重启后数据就丢了。在项目左侧菜单 →存储→持久卷声明→创建存储类选择存储类说明适用场景hostPath直接使用宿主机磁盘路径单节点开发环境简单直接standard通过 CSI 驱动分配存储集群环境功能更完善对于 Docker Desktop 单节点环境用hostPath就够了。如果选 standard在 Docker Desktop 上通常也能用但需要确保 provisioner 已安装。访问模式模式说明ReadWriteOnceRWO只能被一个节点挂载读写 ✅ MySQL 选这个ReadOnlyManyROX可以被多个节点同时只读挂载ReadWriteManyRWX可以被多个节点同时读写挂载MySQL 是单点数据库选ReadWriteOnce即可。配置参数名称mysql-pvc存储类hostpath访问模式ReadWriteOnce容量5Gi根据实际需求调整七、创建工作负载Deployment这是最核心的一步把 MySQL 容器跑起来。在项目左侧菜单 →工作负载→部署→创建7.1 基本信息名称mysql版本v17.2 容器镜像镜像mysql:8.0或指定版本如mysql:8.0.46容器名称mysql⚠️国内网络问题如果拉取官方镜像超时可以使用国内镜像加速地址https://docker.1ms.run https://docker.1panel.live在 Docker Desktop 的 Docker Engine 配置中设置 registry-mirrors或者提前用docker pull手动拉取Docker 配置了加速后更快。7.3 环境变量从之前创建的 Secret 中引用密码环境变量来源值MYSQL_ROOT_PASSWORD引用 Secretmysql-secret中的mysql-root-password自动注入MYSQL_DATABASE直接填写test可选自动创建的默认数据库使用 Secret 引用密码的好处密码不会明文出现在工作负载 YAML 中其他人查看配置也看不到密码。7.4 挂载存储需要挂载两个路径挂载类型来源挂载路径作用持久卷声明mysql-pvc/var/lib/mysql存储 MySQL 数据文件配置字典mysql-config挂载my.cnf/etc/mysql/my.cnf挂载 MySQL 配置文件⚠️注意配置字典挂载时子路径要填写my.cnf否则 ConfigMap 会以目录形式挂载覆盖整个/etc/mysql/目录导致 MySQL 找不到其他默认配置。7.5 创建完成点击创建等待 Pod 启动完成。可以在工作负载页面查看状态Pod 状态从ContainerCreating→Running即表示启动成功。八、创建服务ServicePod 默认只能在集群内部访问ClusterIP外部无法连接。需要创建一个 Service 来暴露端口。在工作负载详情页→更多操作→创建服务8.1 配置服务端口参数值说明名称mysql服务名称内部端口Service Port3306服务对外暴露的端口容器端口Target Port3306MySQL 容器监听的端口协议TCPMySQL 使用 TCP 协议⚠️常见错误Service Port 和 Target Port 都可以自定义但Target Port 必须和容器内应用的监听端口一致。MySQL 默认监听 3306Target Port 也要填 3306。如果填错连接会成功建立 TCP 连接但读不到 MySQL 握手包报错Can not read response from server. Expected to read 4 bytes, read 0 bytes8.2 选择外部访问方式K8s Service 的三种访问类型类型宿主机能否访问说明ClusterIP❌仅集群内部可访问外部无法连接NodePort⚠️在节点上开一个端口但 Docker Desktop 的 kind 模式下无法直接访问LoadBalancer✅自动映射到localhost外部可直接访问选择 LoadBalancer。因为 KubeSphere 运行在 WSL 的 Docker Desktop 上kind 模式自带cloud-provider-kind创建 LoadBalancer 服务后会自动生成一个 kindccm 代理容器把localhost:端口映射到你的服务。8.3 确认服务创建成功创建后在服务页面可以看到名称 类型 Cluster IP External IP 端口 mysql LoadBalancer 10.96.xx.xxx 172.18.0.x 3306:3xxxx/TCP同时docker ps可以看到 kindccm 代理容器自动创建kindccm-xxx 0.0.0.0:3306-3306/tcp九、验证部署9.1 查看日志点击工作负载下拉到容器副本列表点击右侧的容器日志看到以下信息表示 MySQL 启动成功/usr/sbin/mysqld: ready for connections. Version: 8.0.46 socket: /var/run/mysqld/mysqld.sock port: 33069.2 通过 KubeSphere Web 终端在工作负载详情页点击 Pod 的终端图标进入容器内部进入后执行mysql-uroot-p# 输入密码 123456看到 MySQL 提示符mysql即表示正常。9.3 通过 WSL 命令行也可以直接在 WSL Ubuntu 终端用kubectl进入容器# 查看 MySQL Pod 名称kubectl get pods-A|grepmysql# 进入容器内部kubectlexec-it-nmysql mysql-5444fbf78-hjjq8 -- /bin/bash# 进入后连接 MySQLmysql-uroot-p9.4 从 IDE 连接在 IntelliJ IDEA、DataGrip、Navicat 等数据库工具中参数值HostlocalhostPort3306UserrootPassword123456如果连接失败按以下顺序排查检查kubectl get pods -n 项目名是否 Running检查kubectl get svc -n 项目名是否 LoadBalancer 类型且有 EXTERNAL-IP检查docker ps是否有 kindccm 代理容器端口映射是否正确检查 Service 的targetPort是否等于 MySQL 容器监听端口默认 3306十、部署第二个 MySQL 实例如果要部署第二个 MySQL比如测试环境直接在 KubeSphere 中重复上述步骤即可新的持久卷声明如mysql02-pvc新的工作负载如mysql02新的服务端口设为3307targetPort仍为3306关键点Service Port 是对外端口可以自定义Target Port 始终是容器内 MySQL 的监听端口3306。创建完成后kind 会自动创建一个新的 kindccm 代理容器将localhost:3307映射到新的 MySQL 实例。查看所有 kindccm 代理dockerps--formattable {{.Names}}\t{{.Ports}}|grepkindccm输出示例kindccm-xxx 0.0.0.0:3306-3306/tcp # 第一个 MySQL kindccm-yyy 0.0.0.0:3307-3307/tcp # 第二个 MySQL kindccm-zzz 0.0.0.0:30880-30880/tcp # KubeSphere 控制台每个 LoadBalancer 服务都由独立的 kindccm 代理管理互不干扰。十一、总结阶段操作关键点Secret存储 MySQL 密码引用到环境变量不暴露明文ConfigMap存储 my.cnf 配置设置 utf8mb4 字符集PVC申请持久化存储hostPath ReadWriteOnce工作负载运行 MySQL 容器挂载 PVC 和 ConfigMapService暴露外部访问LoadBalancer类型验证连接测试localhost:3306部署 MySQL 的流程覆盖了 K8s 的配置、存储、工作负载、网络四个核心模块理解了这个流程部署其他中间件Redis、PostgreSQL 等也是类似的思路。

相关新闻

实测国内靠谱GEO搜索AI系统:精准定位搜索高效又实用

实测国内靠谱GEO搜索AI系统:精准定位搜索高效又实用

随着AI生成式搜索成为企业获客的核心入口,GEO(生成式引擎优化)系统的需求爆发式增长。但市场上产品鱼龙混杂,不少企业踩过“伪GEO”“通用系统适配差”的坑。近期我实测了3款国内主流GEO搜索AI系统,从精准度、行业适配…

2026/10/6 15:05:27 阅读更多 →
KRAGEN进阶技巧:自定义知识图谱关系与GoT推理路径优化方法

KRAGEN进阶技巧:自定义知识图谱关系与GoT推理路径优化方法

KRAGEN进阶技巧:自定义知识图谱关系与GoT推理路径优化方法 【免费下载链接】KRAGEN Software to implement GoT with a weviate vectorized database 项目地址: https://gitcode.com/gh_mirrors/kr/KRAGEN KRAGEN作为结合知识图谱(KG)…

2026/10/17 17:20:18 阅读更多 →
从Beta到稳定版:Tempesta FW 0.8版本新特性详解

从Beta到稳定版:Tempesta FW 0.8版本新特性详解

从Beta到稳定版:Tempesta FW 0.8版本新特性详解 【免费下载链接】tempesta Web application acceleration, advanced DDoS protection and web security 项目地址: https://gitcode.com/gh_mirrors/te/tempesta Tempesta FW 0.8版本作为从Beta到稳定版的重要…

2026/10/17 4:44:01 阅读更多 →

最新新闻

光伏电站灰损治理:轨道式智能清洁机器人全栈方案

光伏电站灰损治理:轨道式智能清洁机器人全栈方案

做光伏电站的人都知道组件脏了要洗,但真正把“灰尘偷走多少度电”这笔账算清楚的人不多。业内把灰尘遮挡组件导致的发电损失叫“灰损”,听着专业,本质很简单:组件表面被蒙上一层灰,光线进不去,电池片出力直…

2026/10/18 10:49:51 阅读更多 →
掌握Prompt工程核心技巧,让AI用大白话解释技术概念

掌握Prompt工程核心技巧,让AI用大白话解释技术概念

直接让 AI 解释一个技术概念,十次里有八次会得到一篇“字都认识但连起来看不懂”的答案。就拿标题里这个例子来说,一句“用简单语言解释 Transformer”,看起来问得很清楚,大模型也确实给了回应,但你仔细读一遍就会发现…

2026/10/18 10:49:51 阅读更多 →
飞控计算机硬实时操作系统选型与实操指南

飞控计算机硬实时操作系统选型与实操指南

1. 飞控计算机为什么非用硬实时系统不可搞飞控的人都有一个共识:飞控计算机跟咱们平时用的电脑、手机完全是两码事。你手机上的操作系统卡个半秒,顶多就是滑动不跟手;但飞控计算机要是卡个几毫秒,飞机可能就已经偏离姿态了。这就是…

2026/10/18 10:49:51 阅读更多 →
境外市场行情接入实战:WebSocket实时行情与K线聚合全解析

境外市场行情接入实战:WebSocket实时行情与K线聚合全解析

接了个活儿,要把某境外证券市场(按习惯大家都叫它美股)的实时行情和K线数据接进内部系统,做量化分析和实时盯盘展示。这类项目看着不算复杂,但实际操作起来有不少暗坑,尤其是行情源选型、WebSocket消息解析…

2026/10/18 10:49:51 阅读更多 →
香港云服务器访问慢、不稳定?从线路选型到内核调优的优化指南

香港云服务器访问慢、不稳定?从线路选型到内核调优的优化指南

做香港云服务器这几年,我接过的“为什么这么慢、这么不稳定”类咨询,至少几十次起步。大部分朋友第一反应是“机房带宽不够”或者“配置太低”,但实际排查下来,真正的问题往往出在线路选型、网络路径和系统参数上。香港机房本身处…

2026/10/18 10:49:51 阅读更多 →
OpenRT实战:多模态大模型红队安全评估从入门到落地

OpenRT实战:多模态大模型红队安全评估从入门到落地

如果你最近在盯多模态大模型的安全测评,大概已经听过OpenRT这个名字——一个开源的LLM红队框架,主打对多模态模型做系统化的健壮性评估。前阵子我正好把它用在一个客服问答系统的上线前检查里,发现很多人对它的理解还停留在“又一个提权工具”…

2026/10/18 10:48:51 阅读更多 →

日新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 0:55:02 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 14:23:36 阅读更多 →