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

相关推荐
潘潘潘潘潘潘潘潘潘潘潘潘10 分钟前
【MySQL】从零开始学习MySQL:基础与安装指南
linux·运维·服务器·数据库·学习·mysql
元闰子13 分钟前
OLTP上云,哪种架构最划算?·VLDB'25
数据库·后端·云原生
寻星探路17 分钟前
数据库造神计划第八天---增删改查(CRUD)(4)
数据库·sql·mysql
Java烘焙师20 分钟前
架构师必备:缓存更新模式总结
mysql·缓存
马走日mazouri21 分钟前
深入理解MySQL主从架构中的Seconds_Behind_Master指标
数据库·分布式·mysql·系统架构·数据库架构
Xxtaoaooo3 小时前
OpenTenBase分布式HTAP实战:从Oracle迁移到云原生数据库的完整指南
云原生·oracle·tdsql·opentenbase·腾讯云数据库
Katzelala5 小时前
[K8S学习笔记] Service和Ingress的关系
笔记·学习·kubernetes
有谁看见我的剑了?5 小时前
k8s-init容器学习
学习·容器·kubernetes
人工干智能7 小时前
科普:在Windows个人电脑上使用Docker的极简指南
windows·docker·容器
lllsure7 小时前
【Docker】容器
运维·docker·容器