文章目录
- 前言
- 一、下载mysql镜像文件
- 二、创建deployment和service
- 三、进入docker容器操作mysql
- 四、Pod volumn存储无法持久化
- 五、删除deployment和service
- 总结
前言
在Linux系统下部署Mysql数据库,大家都比较熟悉,轻车熟路。但是如何在K8S环境部署Mysql数据库,却是一个全新的课题,涉及到数据的存储与同步,远比想像的复杂,下面我们将花几篇文章来详细探讨一下这个问题。本篇主要介绍如何通过yaml文件部署mysql,如何进入docker容器操作mysql,以及存在的问题。以下的演示都是基于minikube。
一、下载mysql镜像文件
执行docker search mysql命令查询mysql镜像文件
执行docker pull mysql:5.7命令下载5.7版本mysql镜像。
二、创建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。
三、进入docker容器操作mysql
执行docker ps -a命令查看docker中运行的容器,找到mysql的CONTAINER ID。
执行docker exec -it CONTAINERID bash命令进入容器。
四、Pod volumn存储无法持久化
在mysql中增加名为test的数据库。
删除pod,k8s会自动再启动一个pod。
再次进入新的容器查看mysql数据,已经没有test的数据库了。
五、删除deployment和service
总结
可见,Mysql正常部署的时候,数据是存放在Pod volumn中的,此时它的数据是无法持久化的。考虑到数据的持久化需求,K8S提供了PV和PVC机制,下一篇我们将重点探讨一下Mysql数据如何存放在PV中。