Kubermetes 部署mysql pod

步骤 1: 创建 PersistentVolume 和 PersistentVolumeClaim

首先为 MySQL 创建一个 PersistentVolume (PV) 和 PersistentVolumeClaim (PVC) 来确保数据的持久性。

mysql-pv.yaml:
apiVersion: v1
kind: PersistentVolume
metadata:
  name: mysql-pv-volume
spec:
  capacity:
    storage: 5Gi # 根据需要调整大小
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  hostPath:
    path: "/mnt/data/mysql" # 根据实际环境调整路径。注意:hostPath仅适用于单节点测试环境。
mysql-pvc.yaml:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-pv-claim
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi # 确保与PV请求的大小一致
  storageClassName: ""

应用 PV 和 PVC:

kubectl apply -f mysql-pv.yaml
kubectl apply -f mysql-pvc.yaml

步骤 2: 创建 Secret 存储 MySQL Root 密码

创建一个 Kubernetes Secret 来安全地存储 MySQL 的 root 用户密码。

mysql-secret.yaml:
apiVersion: v1
kind: Secret
metadata:
  name: mysql-secret
type: Opaque
data:
  # 使用 base64 编码你的密码, 例如 echo -n 'yourpassword' | base64
  mysql-root-password: UUxJMjUwMjA1 # 替换为你的base64编码后的密码

应用 Secret:

kubectl apply -f mysql-secret.yaml

步骤 3: 部署 MySQL Deployment

使用以下配置来部署 MySQL 8。

mysql-deployment.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: mysql-deployment
  labels:
    app: mysql8
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mysql8
  template:
    metadata:
      labels:
        app: mysql8
    spec:
      containers:
      - name: mysql
        image: mysql:8.0
        env:
        - name: MYSQL_ROOT_PASSWORD
          valueFrom:
            secretKeyRef:
              name: mysql-secret
              key: mysql-root-password
        ports:
        - containerPort: 3306
        args:
        # 添加了 --skip-grant-tables 参数以跳过授权表
        - --bind-address=0.0.0.0
        - --skip-grant-tables
        volumeMounts:
        - name: mysql-persistent-storage
          mountPath: /var/lib/mysql
      volumes:
      - name: mysql-persistent-storage
        persistentVolumeClaim:
          claimName: mysql-pv-claim

应用 Deployment:

kubectl apply -f mysql-deployment.yaml

步骤 4: 创建 MySQL Service

为了让外部可以访问 MySQL 服务,我们需要创建一个 NodePort 类型的服务。

mysql-service.yaml:
apiVersion: v1
kind: Service
metadata:
  name: mysql-service
  labels:
    app: mysql8
spec:
  type: NodePort
  ports:
    - port: 3306
      targetPort: 3306
      nodePort: 31001 # 确保选择一个未被占用的 NodePort
  selector:
    app: mysql8

应用 Service:

kubectl apply -f mysql-service.yaml

遇到的问题:

问题描述:

        部署完成之后,查询对应的pod进入容器,登陆mysql,正确的密码却无法登陆,外部管理软件如navicat和idea的datasource均连接失败!

 解决办法

        我确认了很多次不是密码的问题,所以在配置mysql-deployment.yaml文件的时候添加了 --skip-grant-tables 参数以跳过授权表 ;此时得以进入mysql内部;

        解决步骤:

 1、查看mysqlpod
kubectl get pod

2、进入对应pod容器 
kubectl exec -it pod/mysql-deployment-7d987fb4bd-8wzfp  -- mysql -uroot -p
3、刷新权限,修改权限插件、密码(密码以防万一可不修改)
FLUSH PRIVILEGES;
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'Ql250205';
FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'Ql250205'; 
FLUSH PRIVILEGES;
4、退出容器后修改mysql-deployment.yaml文件,将skip-grant-tables 注释掉
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mysql-deployment
  labels:
    app: mysql8
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mysql8
  template:
    metadata:
      labels:
        app: mysql8
    spec:
      containers:
      - name: mysql
        image: mysql:8.0
        env:
        - name: MYSQL_ROOT_PASSWORD
          valueFrom:
            secretKeyRef:
              name: mysql-secret
              key: mysql-root-password
        ports:
        - containerPort: 3306
        args:
        # 添加了 --skip-grant-tables 参数以跳过授权表
        - --bind-address=0.0.0.0
#        - --skip-grant-tables
        volumeMounts:
        - name: mysql-persistent-storage
          mountPath: /var/lib/mysql
      volumes:
      - name: mysql-persistent-storage
        persistentVolumeClaim:
          claimName: mysql-pv-claim

5、删除原msql的pod,k8s会自动根据最新的mysql-deployment生成新的pod,此时同样查看新pod容器名称,进入容器并登录,外部mysql工具连接尝试。(命令参考上文)

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

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

相关文章

【四.RAG技术与应用】【12.阿里云百炼应用(下):RAG的云端优化与扩展】

在上一篇文章中,我们聊了如何通过阿里云百炼平台快速搭建一个RAG(检索增强生成)应用,实现文档智能问答、知识库管理等基础能力。今天咱们继续深入,聚焦两个核心问题:如何通过云端技术优化RAG的效果,以及如何扩展RAG的应用边界。文章会穿插实战案例,手把手带你踩坑避雷。…

交叉编译openssl及curl

操作环境:Ubuntu20.04 IDE工具:Clion2020.2 curl下载地址:https://curl.se/download/ openssl下载地址:https://openssl-library.org/source/old/index.html 直接交叉编译curl会报错找不到openssl,所以需要先交叉编…

在笔记本电脑上用DeepSeek搭建个人知识库

最近DeepSeek爆火,试用DeepSeek的企业和个人越来越多。最常见的应用场景就是知识库和知识问答。所以本人也试用了一下,在笔记本电脑上部署DeepSeek并使用开源工具搭建一套知识库,实现完全在本地环境下使用本地文档搭建个人知识库。操作过程共…

HarmonyOS 应用程序包结构 (发布态)

每个应用中至少包含一个.hap文件,可能包含若干个.hsp文件、也可能不含,一个应用中的所有.hap与.hsp文件合在一起称为Bundle,其对应的bundleName是应用的唯一标识(详见app.json5配置文件中的bundleName标签)。 当应用发…

idea中的查看git历史记录,不显示详细信息

一、正常情况显示 1、idea中git查看history正常显示如下图: 二、非正常情况下显示 1、idea中git查看history,现在不显示提交的历史文件详细信息,如下图: 三、解决方式 1、找到如下窗口中画红色框的黑色线条,鼠标放在…

江科大51单片机笔记【9】DS1302时钟可调时钟(下)

在写代码前,记得把上一节的跳线帽给插回去,不然LCD无法显示 一.DS1302时钟 1.编写DS1302.c文件 (1)重新对端口定义名字 sbit DS1302_SCLKP3^6; sbit DS1302_IOP3^4; sbit DS1302_CEP3^5;(2)初始化 因为…

数学建模笔记——层次分析法(AHP)

本文借鉴了数学建模清风老师的视频和课件,如有错误欢迎大家批评指正。原视频地址:清风数学建模:https://www.bilibili.com/video/BV1DW411s7wihttps://www.bilibili.com/video/BV1DW411s7wi 1.预备知识 层次分析法: 层次分析法(The Analytic Hierarchy Process,AHP)是一…

阿里云扩容操作步骤

在快照中备份服务器快照,时间为1天 进入块存储模块进行扩容 付款完成后进入账单进行查询,确认成功后找售后确认挂载盘情况 [rootatcoin ~]# df -h Filesystem Size Used Avail Use% Mounted on devtmpfs 1.8G 0 1.8G 0% /dev tmpfs…

【系统架构设计师】以数据为中心的体系结构风格

目录 1. 说明2. 仓库体系结构风格3. 黑板体系结构风格 1. 说明 1.以数据为中心的体系结构风格主要包括仓库体系结构风格和黑板体系结构风格。 2. 仓库体系结构风格 1.仓库(Repository)是存储和维护数据的中心场所。2.在仓库风格中,有两种不…

llamafactory大模型微调教程(周易大模型案例)

1.环境说明 操作系统:ubuntu 20 基础模型:Qwen2.5-1.5B-Instruct 工具:llamafactory GPU:四张4090 2、环境部署 2.1 下载基础模型 # 1、下载 modelscope pip install modelscope#2、模型下载 cd /data/ cat >> download…

go切片定义和初始化

1.简介 切片是数组的一个引用,因此切片是引用类型,在进行传递时,遵守引用传递的机制。切片的使用和数组类似,遍历切片、访问切片的元素和切片的长度都一样。。切片的长度是可以变化的,因此切片是一个可以动态变化的数…

2025年03月07日Github流行趋势

项目名称:ai-hedge-fund 项目地址url:https://github.com/virattt/ai-hedge-fund项目语言:Python历史star数:12788今日star数:975项目维护者:virattt, seungwonme, KittatamSaisaard, andorsk, arsaboo项目…

蓝桥杯每日一题:第一周周四哞叫时间

蓝桥杯每日一题:第一周周四哞叫时间 疑惑:如何把复杂度控制在Q(n),怎么枚举a和b,longlong的形式又该怎么输入(考虑用string) 思路:枚举倒数第二个b前面有多少个a 这是一…

常见排序算法鉴赏(原理剖析+动图演示)

目录 一、冒泡排序(BubbleSort) 二、选择排序( SelectSort) 三、插入排序(InsertSort) 四、希尔排序(ShellSort) 五、堆排序 六、快排(QuickSort) Hoa…

易基因特异性R-loop检测整体研究方案

大家好,这里是专注表观组学十余年,领跑多组学科研服务的易基因。 01.技术简述 R-loop是由DNA:RNA 杂交体和被置换的单链DNA组成的三链核酸结构,广泛参与基因转录、表观遗传调控及DNA修复等关键生物学过程。异常的R-loop积累会导致基因组不稳…

用低代码平台集成人工智能:无需专业开发也能实现智能化

引言:人工智能的普及与企业需求 随着人工智能(AI)技术的飞速发展,越来越多的企业开始意识到其在提升运营效率、优化客户体验和推动业务创新方面的巨大潜力。从智能客服到自动化决策支持,从数据分析到个性化推荐&#x…

原生android 打包.aar到uniapp使用

1.原生安卓里面引入uniapp官方提供的包文件: uniapp-v8-release.aar 2.提供uniapp调用的接口,新建类文件继承UniModule, package com.dermandar.panoramal;import com.scjt.lib.certlib;import io.dcloud.feature.uniapp.annotation.UniJSM…

K8s 1.27.1 实战系列(四)验证集群及应用部署测试

一、验证集群可用性 1、检查节点 kubectl get nodes ------------------------------------------------------ NAME STATUS ROLES AGE VERSION k8s-master Ready control-plane 3h48m v1.27.1 k8s-node1 Ready <none> …

OpenCV计算摄影学(18)平滑图像中的纹理区域同时保留边缘信息函数textureFlattening()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 cv::textureFlattening 是 OpenCV 中用于图像处理的一个函数&#xff0c;旨在平滑图像中的纹理区域&#xff0c;同时保留边缘信息。该技术特别适…

基于React.js 技术栈的服务端渲染框架Next.js 实战记录

自我简介&#xff1a;4年导游&#xff0c;10年程序员&#xff0c;最近6年一直深耕低代码领域&#xff0c;分享低代码和AI领域见解。 基于React.js 技术栈的服务端渲染框架Next.js 实战记录 本着学习的态度&#xff0c;将自己运用Next.js开发服务端渲染的项目复原总结出来&…