文章目录

  • 前言
  • 一、下载mysql镜像文件
  • 二、创建deployment和service
  • 三、进入docker容器操作mysql
  • 四、Pod volumn存储无法持久化
  • 五、删除deployment和service
  • 总结



前言

在Linux系统下部署Mysql数据库,大家都比较熟悉,轻车熟路。但是如何在K8S环境部署Mysql数据库,却是一个全新的课题,涉及到数据的存储与同步,远比想像的复杂,下面我们将花几篇文章来详细探讨一下这个问题。本篇主要介绍如何通过yaml文件部署mysql,如何进入docker容器操作mysql,以及存在的问题。以下的演示都是基于minikube。


一、下载mysql镜像文件

执行docker search mysql命令查询mysql镜像文件

k8s修改MySQL配置文件 k8s mysql部署_kubernetes


执行docker pull mysql:5.7命令下载5.7版本mysql镜像。

k8s修改MySQL配置文件 k8s mysql部署_kubernetes_02


k8s修改MySQL配置文件 k8s mysql部署_容器_03

二、创建deployment和service

一个yaml文件可以创建多个资源,只需要使用—分隔即可,编写mysql.yaml文件创建deployment和service:

apiVersion: apps/v1                 #版本
kind: Deployment                    #创建资源的类型
metadata:                           #资源的元数据
  name: mysql-dep                   #资源的名称,是元数据必填项
spec:                               #期望状态
  replicas: 1                       #创建的副本数量(pod数量),不填默认为1
  selector:                         #
    matchLabels:
      app: mysql-pod
  template:                         #定义pod的模板
    metadata:                       #pod的元数据
      labels:                       #labels标签,必填一个
        app: mysql-pod             
    spec:                           #pod的期望状态
      containers:                   #容器
      - name: mysql                 #容器名称
        image: mysql:5.7            #镜像
        imagePullPolicy: IfNotPresent
        ports:                      #容器的端口
        - containerPort: 3306
        env:
        - name: MYSQL_ROOT_PASSWORD
          value: "root"
---
apiVersion: v1                      #版本
kind: Service                       #创建资源的类型
metadata:                           #资源的元数据
  name: mysql-svc                   #资源的名称,是元数据必填项
  labels:                           #labels标签  
    app: mysql-svc
spec:                               #期望状态
  type: NodePort                    #服务类型
  ports:                            #端口
    - port: 3306
      targetPort: 3306              #与containerPort一样
      protocol: TCP
      nodePort: 30306
  selector:
app: mysql-pod

执行kubectl apply -f mysql.yaml命令创建deployment和service。

k8s修改MySQL配置文件 k8s mysql部署_云原生_04

三、进入docker容器操作mysql

执行docker ps -a命令查看docker中运行的容器,找到mysql的CONTAINER ID。

k8s修改MySQL配置文件 k8s mysql部署_云原生_05


执行docker exec -it CONTAINERID bash命令进入容器。

k8s修改MySQL配置文件 k8s mysql部署_docker_06

四、Pod volumn存储无法持久化

在mysql中增加名为test的数据库。

k8s修改MySQL配置文件 k8s mysql部署_容器_07


删除pod,k8s会自动再启动一个pod。

k8s修改MySQL配置文件 k8s mysql部署_k8s修改MySQL配置文件_08


再次进入新的容器查看mysql数据,已经没有test的数据库了。

k8s修改MySQL配置文件 k8s mysql部署_docker_09


k8s修改MySQL配置文件 k8s mysql部署_k8s修改MySQL配置文件_10

五、删除deployment和service

k8s修改MySQL配置文件 k8s mysql部署_容器_11

总结

可见,Mysql正常部署的时候,数据是存放在Pod volumn中的,此时它的数据是无法持久化的。考虑到数据的持久化需求,K8S提供了PV和PVC机制,下一篇我们将重点探讨一下Mysql数据如何存放在PV中。