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

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工具连接尝试。(命令参考上文)

相关文章:

  • osg官方例子
  • 【大模型理论篇】--Mixture of Experts架构
  • 【操作系统】进程、线程、作业
  • 《DataWorks 深度洞察:量子机器学习重塑深度学习架构,决胜复杂数据战场》
  • BUUCTF逆向刷题笔记(1-12)
  • Scala的模式匹配
  • upload-labs靶场 1-21通关
  • 记录一次miniconda+openwebui迁移
  • Redis系列之慢查询分析与调优
  • api测试工具(postman、apifox、apipost)
  • 题目 3220 ⭐因数计数⭐【数理基础】蓝桥杯2024年第十五届省赛
  • 一个前端vue3文字hover效果
  • IO多路复用
  • 模型 - QwQ-32B
  • VSCode输入npm xxx,跳转到选择应用
  • 双向选择排序算法
  • qt作业day5
  • 进程相关知识day1
  • 【经验分享】Ubuntu20.04编译RK3568 AI模型报错问题(已解决)
  • 时间序列预测实操
  • 网站推广有哪些方式/东莞关键词优化实力乐云seo
  • 上海市质量工程建设管理协会网站/最新搜索引擎排名
  • 小型手机网站建设哪家好/网页搜索引擎
  • 网页设计图片怎么放进去/seo双标题软件
  • 公司网站建设/百度认证平台
  • 腾龙时时彩做号官方网站/网店推广培训