Kubernetes(k8s)1.30.7简单快速部署对外部开放的有状态服务MYSQL8(快速有效)

如何在Kubernetes集群中快速创建部署一个单节点的有状态(即将数据文件挂载到宿主机,防止重新部署mysql服务,数据文件丢失)的对外开放的MYSQL服务。

通过创建一个 Kubernetes Deployment 并使用 PersistentVolumeClaim 将其连接到已有的 PersistentVolume 来运行一个有状态的应用。

资源名称介绍:

  • Deployment主要用于无状态应用,但也可以通过与 PersistentVolumeClaim 配合支持有状态应用。

  • PersistentVolume 是集群管理员提供的存储资源,表示底层的实际存储(如 NFS、云盘、主机磁盘等),为应用提供持久化存储,可以手动创建或者动态配置。

  • PersistentVolumeClaim 是用户请求存储的方式,通过 PVC 可以声明需要的存储容量和访问模式,集群自动绑定到合适的 PV。

1.在所有可能运行mysql的node节点上创建/mnt/data文件夹

bash 复制代码
mkdir -p /mnt/data

2.运行 mysql-pv.yaml,创建PV和PVC资源。

bash 复制代码
kubectl apply -f mysql-pv.yaml
Kotlin 复制代码
apiVersion: v1
kind: PersistentVolume
metadata:
  name: mysql-pv-volume
  labels:
    type: local
spec:
  storageClassName: manual
  capacity:
    storage: 20Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/mnt/data"  // 需要挂载到的宿主机上存储路径(运行时删除这些注释)
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-pv-claim
spec:
  storageClassName: manual
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 20Gi

3.**运行 mysql-deployment.yaml ,**创建资源。

bash 复制代码
kubectl apply -f mysql-deployment.yaml
Kotlin 复制代码
apiVersion: v1
kind: Service
metadata:
  name: mysql
spec:
  type: NodePort
  ports:
  - port: 3306
    targetPort: 3306
    nodePort: 30006
  selector:
    app: mysql
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mysql
spec:
  selector:
    matchLabels:
      app: mysql
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
      - image: mysql:8.4.3  //换成自己需要的版本
        name: mysql
        env:
          # 在实际中使用 secret
        - name: MYSQL_ROOT_PASSWORD
          value: 123456
        ports:
        - containerPort: 3306
          name: mysql
        volumeMounts:
        - name: mysql-persistent-storage 
          mountPath: /var/lib/mysql  // 在容器内部数据存储的路径,将它挂载到mysql-persistent-storage卷对应的实际宿主机物理存储位置上,即上面的/mnt/data
      volumes:     //指定了需要使用的持久卷
      - name: mysql-persistent-storage
        persistentVolumeClaim:
          claimName: mysql-pv-claim

4.查看部署效果

4.1 查看pod资源

bash 复制代码
 kubectl get pods -A -o wide

4.2 状态正常

查看service资源

4.3 测试查看外部宿主机是否挂载数据

在node2上/mnt/data找到挂载的数据

4.4 可以使用navicate远程连接mysql数据库,创建数据库,测试是否成功。

本处使用nodePort形式,将pod的3306端口映射到宿主机的30006端口,所以可以直接连接 集群任意节点IP:30006形式访问mysql。

4.5 其他命令

bash 复制代码
# 查看所有pod k8s资源的查看范式,查看pv,pvc等,将pods替换为相应的名称即可
kubectl get pods -A -o wide
# 查看所有service
kubectl get svc -A -o wide

# 删除相应资源
kubectl delete -f mysql-deployment.yaml
kubectl delete -f mysql-pv.yaml
# 查看具体某一pod的信息 pod后接具体pod的name -n 接命名空间 部署时没设置默认为default
 kubectl describe pod mysql-5f8999867-vpht9 -n default
# 查看pod的日志信息 logs后接具体pod的name 在默认命名空间的pod无需使用-n 否则需要使用
 kubectl logs mysql-5f8999867-vpht9

5.参考文献

1.运行一个单实例有状态应用 | Kubernetes

相关推荐
Johny_Zhao1 小时前
Docker + CentOS 部署 Zookeeper 集群 + Kubernetes Operator 自动化运维方案
linux·网络安全·docker·信息安全·zookeeper·kubernetes·云计算·系统运维
tan180°4 小时前
MySQL表的操作(3)
linux·数据库·c++·vscode·后端·mysql
代码老y4 小时前
Docker:容器化技术的基石与实践指南
运维·docker·容器
DuelCode5 小时前
Windows VMWare Centos Docker部署Springboot 应用实现文件上传返回文件http链接
java·spring boot·mysql·nginx·docker·centos·mybatis
幽络源小助理5 小时前
SpringBoot基于Mysql的商业辅助决策系统设计与实现
java·vue.js·spring boot·后端·mysql·spring
爬山算法6 小时前
MySQL(116)如何监控负载均衡状态?
数据库·mysql·负载均衡
掘金-我是哪吒8 小时前
分布式微服务系统架构第156集:JavaPlus技术文档平台日更-Java线程池使用指南
java·分布式·微服务·云原生·架构
阿里云云原生9 小时前
Serverless JManus: 企业生产级通用智能体运行时
云原生
Kookoos14 小时前
ABP VNext + Tye:本地微服务编排与调试
微服务·云原生·架构·tye
KellenKellenHao16 小时前
MySQL数据库主从复制
数据库·mysql