【kubernetes学习】在kubernetes集群上部署mysql + docker中部署mysql
⚠️本篇博客仅是自我学习过程,如果有哪些步骤不对,或者哪些步骤冗余了,非常欢迎各位大佬给我提出见解~????实际上我是先在本机的docker中部了mysql,但是在一个web端做数据库连接测试的时候,我一直测试失败,从未成功过,别的小伙伴测试我的数据库有的时候会成功,不过成功率仅有15%。实在受不了这样的情况,所以后来我又在其他k8s集群上部署了一次mysql。总的来说,踩的坑不少,但是还有很多坑
⚠️ 本篇博客仅是自我学习过程,如果有哪些步骤不对,或者哪些步骤冗余了,非常欢迎各位大佬给我提出见解~
🐷 实际上我是先在本机的docker中部了mysql,但是在一个web端做数据库连接测试的时候,我一直测试失败,从未成功过,别的小伙伴测试我的数据库有的时候会成功,不过成功率仅有15%。
实在受不了这样的情况,所以后来我又在其他k8s集群上部署了一次mysql。总的来说,踩的坑不少,但是还有很多坑没踩到,所以领悟到的东西也不是很多,但对我这种小白来说,也可以了。
因为docker比较久之前部署的,所以就先写k8s上部署啦👏。
一、k8s上部署mysql
😊 前提:已经部署了k8s集群
1 新建一个专属的namespace(master节点上)
kubectl create namespace XXX
或者是(namespace缩写ns)
kubectl create ns XXX
执行后,输入以下语句查看是否成功(三种)
✅ 下面都可以使用缩写,方便一些
我创建的namespace为test-zlh
kubectl get namespaces
2 下载镜像
🐷 我是在work节点上下载的镜像,我也不知道我yaml文件中定义的image地址,是不是自动查找集群中的镜像还是仅当前机器下的镜像(我偏向整个集群下) 这个问题先留着,待更新🤔️🤔️🤔️
我是从Daocloud hub下拉取的镜像:http://hub.daocloud.io,搜索栏输入mysql即可,侧边会给出拉取镜像的语句。
3 新建depolyment的yaml文件
- master节点新建文件夹(✅用途:放yaml文件)
- 在文件夹下编写Deployment的yaml文件
- mysql-deployment.yaml(名字随意取)
vim mysql-deployment.yaml
yaml文件如下所示(相关注释等后期维护🤔️):
apiVersion: apps/v1
kind: Deployment # 表明是Deployment
metadata: # deployment的元数据
name: mysql-deployment # deployment的名称,全局唯一
namespace: test-zlh # 前面创建的namespace
spec: # 详细描述
replicas: 1 #pod副本期待数量
selector:
matchLabels:
app: mysql-zlh # 符合目标的pod拥有此标签
strategy:
type: Recreate # pod的重启策略
template: # 根据此模版创建pod的副本(实例)。当pod的数量小于预期数量时,用于创建新pod的pod模板
metadata:
labels: # pod副本拥有的标签,对应着selector中的标签,用于筛选目标pod的Label Selector
app: mysql-zlh
spec:
containers: # pod内容器的定义部分
- name: mysql-zlh # 容器的名称
image: daocloud.io/library/mysql:5.7.5-m15 # 容器对应的docker镜像
imagePullPolicy: IfNotPresent # 镜像拉取策略,如果本地没有该镜像,那么就从网上拉取(如果不设定拉取策略的话,默认为always的策略,总是从网络上拉取镜像)
resources:
limits: # 资源限制
cpu: 200m
memory: 512Mi
requests:
cpu: 200m
memory: 512Mi
ports:
- containerPort: 3306 # 容器暴露的端口号
env:
- name: MYSQL_ROOT_PASSWORD
value: "123456" #root用户的密码,设置为123456
强制保存并退出 先按esc,再输入:wq!
4 新建service的yaml文件,
- 在同样的文件夹下编写Service的yaml文件
- mysql-svc.yaml(名字随意取)
yaml文件如下所示(相关注释等后期维护🤔️):
apiVersion: v1
kind: Service # 表明是Service
metadata:
name: mysql-svc # service名称全局唯一
namespace: test-zlh #前面创建的namespace
labels:
app: mysql-zlh
spec:
type: NodePort # 开启NodePort方式的外网访问模式
ports:
- port: 3306 # service提供服务的端口号
protocol: TCP # 协议,默认为TCP
targetPort: 3306 # 需要转发给后端pod的端口号
nodePort: 31234 #开放给外部使用的端口号
selector:
app: mysql-zlh # service对应pod拥有这里定义的标签
5 创建资源
5.1 创建deploy
在master节点输入以下语句:
kubectl create -f mysql-deployment.yaml
创建一个Deployment对象来生成对应的Replica Set并完成Pod副本的创建过程。
5.2 创建service
在master节点输入以下语句:
kubectl create -f mysql-svc.yaml
5.3 执行后查看是否创建成功(需要指定所在的namespace)
- 查看deploy
kubectl get deploy -n test-zlh
- 查看rs
kubectl get rs -n test-zlh
- 查看pod
kubectl get po -n test-zlh
- 查看svc
kubectl get svc -n test-zlh
🀄️结果如下显示:
5.3 问题排查
在这个过程中我出现了无数的坑!!!
5.3.1 yaml文件格式问题
yaml文件中的锁进问题,出现三四次报错。
解决方式:缩进一定要正确(重要的是要明白每个key之间的对应关系,我是小白,跟着别人的语句写的,导致缩进有问题)
5.3.2 单词编写错误
部分单词编写错误还好,重点是kind部分value需要开头大写,例如Deployment,Service等。
5.3.3 未设置每个pod的资源,导致报错“ OOMKilled ”
错误原因:容器使用的内存资源超过了限制
解决方法:
1、修改yaml,增大内存的限制大小
2、直接修改deploy,增加内存的限制大小
kubectl edit deploy mysql-deployment
5.3.4 创建deployment成功,但是查看不到pod
修改了deployment的yaml文件,添加了limit和request资源,再重建deployment之后,发现deployment创建好了,但是查看不到pod。因此,就去查看一下rs的细节:
kubectl describe rs mysql-deployment-7c68c9c7f -n test-zlh
(mysql-deployment-7c68c9c7f是查看到的失败的rs名称)
执行后可以看到Event中的报错提示:
发现我写资源时候写错了,太粗心大意了😂
解决方法:
1、修改yaml,增大内存的限制大小
2、直接修改deploy,增加内存的限制大小
kubectl edit deploy mysql-deployment
6 数据库测试连接
以上都成功了之后,使用数据库可视化工具DataGrip进行测试连接(或者Navicat都行)
Host中输入pod所在node的ip,端口填入service的yaml文件中设置的nodePort:31234(每人设置不一样,我设置的是31234)。
之后成功连接即可。
二、docker中部署mysql
😊 前提:已经安装了docker
mysql镜像网址:https://hub.daocloud.io/repos/fa51c1d6-9dc2-49d9-91ac-4bbfc24a1bda
其实这个界面都给出了如何运行mysql实例,比较好的一点
1 pull镜像
docker pull daocloud.io/library/mysql:5.7.5-m15
2 pull完成后查看镜像
docker images
3 启动mysql容器实例
docker run -itd --name mysql-test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 daocloud.io/library/mysql:5.7.5-m15
在上述命令中,mysql-test 指定了该容器的名字(可自己随意更换),p指定开放端口3306进行映射(-P 也行,就是随机的端口映射,后面就不需要加端口号,直接是 --name mysql-test -P -e),123456 指定了 root 用户的密码(可自己随意更换),tag 参数指定了你想要的 MySQL 版本(设置启动的镜像版本,一般也就是pull的镜像版本)。
4 进入容器实例
(个人理解是,进入了非常简易的一个linux环境)
docker exec -it mysql-test bash
🎬补充:为了解决docker内运行mysql无法输入中文的问题,可在进入容器实例的时候,设置一个中文环境,如下
docker exec -it mysql env LANG=C.UTF-8 /bin/bash
5 命令行登录mysql
(在刚刚进入的简易linux环境中再登录mysql)
mysql -uroot -p
⚠️ 此处输入密码123456
6 进入之后就显示mysql的命令行语句了
7 可视化工连接该mysql
- 查看正在运行的容器
docker ps
- 查看端口,是3306(如果上文映射端口时是-P,这里显示会是随机的端口号)
- 打开数据库可视化工具,输入信息
主机:localhost
用户名:root
密码:123456 - 可正确连接,接下来就正常使用就行
8 退出mysql
需要exit2次,一次是退出mysql,一次是退出实例
更多推荐
所有评论(0)