返回顶部
首页 > 资讯 > 数据库 >k8s 实战篇 - mysql部署 - 1
  • 138
分享到

k8s 实战篇 - mysql部署 - 1

mysqldocker数据库 2023-08-19 18:08:20 138人浏览 薄情痞子
摘要

在项目的开发中肯定是需要使用数据库进行数据化持久操作。在JAVA项目中使用比较多的数据库是Mysql,这篇文章主要描述怎么在k8s中安装mysql数据库。 mysql部署 1、获取mysql镜像 可以在Dockerhub中搜索镜像地址

项目开发中肯定是需要使用数据库进行数据化持久操作。在JAVA项目中使用比较多的数据库Mysql,这篇文章主要描述怎么在k8s中安装mysql数据库。

mysql部署

1、获取mysql镜像

可以在Dockerhub中搜索镜像地址,首先打开“Docker Hub”,在搜索框中输入mysql,找到mysql官方发布的docker镜像地址为“mysql”,mysql的端口为3306。按照之前部署demo的操作,重写一下执行命令。如下:

kubectl create deployment mysql --image=mysql kubectl expose deployment mysql --type=nodePort --port=3306

重写完成之后在控制台执行查看

2、创建mysql pod

执行之后通过get pod查看是否创建成功

C:\Users\smy1102>kubectl get podsNAME                          READY   STATUS              RESTARTS        AGEdocker-demo-864cc5fb9-rrd59   1/1     Running             0               5h45mmysql-77db55c6db-22lxf        0/1     CrashLoopBackOff   0               47s

生成了一条mysql-77db55c6db-22lxf 记录,pod的状态为CrashLoopBackOff。

3、CrashLoopBackOff问题梳理

我之前发布了一篇文章“minikube 快速使用入门 - pod - 外传”,这里面有详细记录pod的状态信息,找到相关说明。如下:

状态描述
CrashLoopBackOff容器退出,kubelet 正在将它重启

上面显示的状态不是running,这个肯定是部署的时候出现问题才会出现的。这时候应该排查一下问题,如:查看这个pod的执行日志是否正常,查看这个pod的详细情况。这些命令,我在文章“minikube 快速使用入门 - 命令篇 - 4”也有记录。如下:

# 查看 pod 详情kubectl describe pod {{PodName}}# 查看 logkubectl logs {{PodName}}

首先执行一下“查看pod详情”:

C:\Users\smy1102>kubectl describe pod mysql-77db55c6db-22lxfName:         mysql-77db55c6db-22lxfNamespace:    defaultPriority:     0Node:         minikube/192.168.49.2Start Time:   Fri, 12 Aug 2022 14:04:36 +0800Labels:       app=mysql              pod-template-hash=77db55c6dbAnnotations:  <none>Status:       RunningIP:           172.17.0.5IPs:  IP:           172.17.0.5Controlled By:  ReplicaSet/mysql-77db55c6dbContainers:  mysql:    Container ID:   docker://df31a04e1ced939cbf238fb9003a1b6057ffbc80b5767f6a31b3ac2e8af50142    Image:          mysql    Image ID:       docker-pullable://mysql@sha256:ce2ae3bd3e9f001435c4671cf073D1d5ae55d138b16927268474fc54ba09ed79    Port:           <none>    Host Port:      <none>    State:          Waiting      Reason:       CrashLoopBackOff    Last State:     Terminated      Reason:       Error      Exit Code:    1      Started:      Fri, 12 Aug 2022 14:08:11 +0800      Finished:     Fri, 12 Aug 2022 14:08:11 +0800    Ready:          False    Restart Count:  5    Environment:    <none>    Mounts:      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-x6gj7 (ro)Conditions:  Type              Status  Initialized       True  Ready             False  ContainersReady   False  PodScheduled      TrueVolumes:  kube-api-access-x6gj7:    Type:                    Projected (a volume that contains injected data from multiple sources)    TokenExpirationSeconds:  3607    ConfigMapName:           kube-root-ca.crt    ConfigMapOptional:       <nil>    DownwardAPI:             trueQoS Class:                   BestEffortNode-Selectors:              <none>Tolerations:                 node.kubernetes.io/not-ready:NoExecute op=Exists for 300s node.kubernetes.io/unreachable:NoExecute op=Exists for 300sEvents:  Type     Reason     Age                    From               Message  ----     ------     ----                   ----               -------  NORMal   Scheduled  5m41s                  default-scheduler  Successfully assigned default/mysql-77db55c6db-22lxf to minikube  Normal   Pulled     5m37s                  kubelet            Successfully pulled image "mysql" in 3.559175s  Normal   Pulled     5m33s                  kubelet            Successfully pulled image "mysql" in 3.5035799s  Normal   Pulled     5m15s                  kubelet            Successfully pulled image "mysql" in 5.3749663s  Normal   Created    4m36s (x4 over 5m37s)  kubelet            Created container mysql  Normal   Started    4m36s (x4 over 5m37s)  kubelet            Started container mysql  Normal   Pulled     4m36s                  kubelet            Successfully pulled image "mysql" in 8.1586183s  Normal   Pulling    3m42s (x5 over 5m41s)  kubelet            Pulling image "mysql"  Warning  BackOff    33s (x22 over 5m33s)   kubelet            Back-off restarting failed container

查看pod详情,在详情最后有“Back-off restarting failed container”,这意思应该是重启一下错误的容器。这个mysql容器出现了异常,需要重启。那到底是什么异常导致的,还不知道。这个时候应该去查看一下容器执行日志看看是否是部署执行的时候出现了什么异常情况。执行命令"kubectl logs "。

C:\Users\smy1102>kubectl logs  mysql-77db55c6db-22lxf2022-08-12 06:16:13+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.30-1.el8 started.2022-08-12 06:16:13+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'2022-08-12 06:16:13+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.30-1.el8 started.2022-08-12 06:16:13+00:00 [ERROR] [Entrypoint]: Database is uninitialized and passWord option is not specified    You need to specify one of the following:    - MYSQL_ROOT_PASSWORD    - MYSQL_ALLOW_EMPTY_PASSWORD    - MYSQL_RANDOM_ROOT_PASSWORD

执行“kubectl logs mysql-77db55c6db-22lxf”之后,日志里面有异常提示“[ERROR] [Entrypoint]: Database is uninitialized and password option is not specified You need to specify one of the following:
- MYSQL_ROOT_PASSWORD” 按这个意思来说,应该是数据库没有初始化密码,需要对它进行初始化及设置MYSQL_ROOT_PASSWORD参数等。初始化密码,这个要怎么设置就成了一下问题。我参考了一下相关资料,原来是要编写一个部署文件。

4、编写部署文件

根据启动日志的描述,缺少初始化密码。首先在执行部署的时候设置初始密码。执行文件如下:

apiVersion: apps/v1kind: Deployment # metadata:  name: mysql #名称,全局唯一  namespace: default # 默认空间spec:  replicas: 1 #Pod 副本的期待数量  selector:    matchLabels:      app: mysql # 符合目标的Pod拥有此标签  template: # 根据此模版创建Pod的副本    metadata:      labels:        app: mysql # Pod副本拥有的标签,对应Selector    spec:      containers: # Pod的内容的定义部分        - name: mysql # 容器的名称          image: mysql # 容器对应的Docker Image          ports:            - containerPort: 3306 # 容器应用监听的端口号          env:            - name: MYSQL_ROOT_PASSWORD # 设置mysql的初始化密码              value: "123456" # 设置mysql的初始化密码---apiVersion: v1kind: Service # 表明是Kubernetes Servicemetadata:  name: mysql # Service 的全局唯一名称spec:  type: NodePort  selector:    app: mysql  ports: # Service 提供服务的端口    - port: 3306 # Service 对应的Pod拥有这里定义的标签

以上就是配置文件需要准备的配置,上面有一些注释,可以详细了解。配置上已经加入“MYSQL_ROOT_PASSWORD”的初始化,可以把它保存为一个yaml的文件,如mysql-k8s.yaml。

5、部署之前,先删除之前部署的mysql

在执行配置文件之前,需要先把之前部署的mysql删除掉.如下:

smy1102@LAPTOP-7HC3FEQ9 C:\Users\smy1102>kubectl delete deployment mysqldeployment.apps "mysql" deletedsmy1102@LAPTOP-7HC3FEQ9 C:\Users\smy1102>kubectl delete svc mysqlservice "mysql" deleted

删除之后,就可以开始部署mysql了。

6、执行部署mysql

进入到存放mysql-k8s.yaml的文件夹下执行“kubectl apply -f mysql-k8s.yaml”,可以参考文章“minikube 快速使用入门 - 命令篇 - 4”,如下:

smy1102@LAPTOP-7HC3FEQ9 D:\minikube\source_data>kubectl apply -f mysql-k8s.yamldeployment.apps/mysql createdservice/mysql created

执行完成之后,控制台显示创建成功,需要查看一下pod的状态是否出现异常。

smy1102@LAPTOP-7HC3FEQ9 D:\minikube\source_data>kubectl get podsNAME                          READY   STATUS    RESTARTS      AGEdocker-demo-864cc5fb9-rrd59   1/1     Running   0             27hmysql-5fd99bf785-pdvhx        1/1     Running   0             2m21s

Pod的状态显示“Running”,说明pod现在是正在运行的状态。然后需要把mysql的端口进行“port-forward”,“port-forward”之后就可以在宿主机上连接测试了。可以参考文章“minikube 快速使用入门 - 命令篇 - 4”

# 把集群内端口映射到节点 把8080端口映射到7080kubectl port-forward mysql-5fd99bf785-pdvhx 3306:3306

执行之后本地测试一下mysql客户端是否链接正常
在这里插入图片描述

提示“连接成功”。
mysql部署已经完成。

来源地址:https://blog.csdn.net/ohalo/article/details/126340680

您可能感兴趣的文档:

--结束END--

本文标题: k8s 实战篇 - mysql部署 - 1

本文链接: https://lsjlt.com/news/375797.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • k8s 实战篇 - mysql部署 - 1
    在项目的开发中肯定是需要使用数据库进行数据化持久操作。在JAVA项目中使用比较多的数据库是mysql,这篇文章主要描述怎么在k8s中安装mysql数据库。 mysql部署 1、获取mysql镜像 可以在dockerhub中搜索镜像地址...
    99+
    2023-08-19
    mysql docker 数据库
  • k8s单机部署mysql
    前面我们学习了k8s入门系列文章,了解了k8s的一些基础概念以及怎么使用。本篇文章将进行一个小小的实战,使用k8s来部署单机版的mysql数据库,基本涵盖到前面讲到的Namespace、Pod、Deployment、Service、PV、...
    99+
    2023-09-04
    kubernetes mysql 容器
  • 【Docker】docker部署springboot+vue+mysql+nginx前后端分离项目【部署实战篇】
    文章目录 0、安装docker并准备一个springboot-vue前后端分离项目前后端打包放到服务器上1、docker 安装jdk2、docker 安装mysql通过Docker命令进入My...
    99+
    2023-09-03
    docker spring boot vue.js
  • (十)服务器K8S集群部署SpringBoot项目实战
    1.准备springboot项目 可以在 https://start.spring.io/网站准备一个项目,这里作为k8s的学习所以springboot项目中准备一个简单的访问接口即可。 2.服务器环境准备 安装Jdk 更新系统软件包: ...
    99+
    2023-08-30
    spring boot 服务器 kubernetes
  • Tungsten Fabric实战中基于K8s的部署是怎样的
    这期内容当中小编将会给大家带来有关Tungsten Fabric实战中基于K8s的部署是怎样的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Tungsten Fabric(原名opencontrail),...
    99+
    2023-06-03
  • 容器化 | ClickHouse on K8s 部署篇【建议收藏】
    作者:苏厚镇 青云科技数据库研发工程师 目前从事 RadonDB ClickHouse 相关工作,热衷于研究数据库内核。 延续上篇《容器化 ClickHouse on K8s 基本概念解析篇》,可以了解到 Operator 提供...
    99+
    2017-02-23
    容器化 | ClickHouse on K8s 部署篇【建议收藏】
  • k8s中如何部署mysql集群
    在Kubernetes中部署MySQL集群可以使用StatefulSet和PersistentVolume。以下是一个简单的步骤: ...
    99+
    2024-04-02
  • MySQL on k8s 云原生环境部署
    目录一、概述二、开始部署(一主两从)1)添加源2)修改配置3)开始安装4)测试验证5)Prometheus监控6)卸载一、概述 mysql是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 oracle ...
    99+
    2024-04-02
  • 怎么在k8s上部署mysql 8.0 MGR
    本篇内容介绍了“怎么在k8s上部署mysql 8.0 MGR”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!...
    99+
    2024-04-02
  • k8s部署mysql主从怎么切换
    要实现Kubernetes下的MySQL主从切换,可以按照以下步骤进行操作: 首先,创建MySQL主从的Deployment和S...
    99+
    2023-10-27
    k8s mysql
  • k8s部署redis哨兵的实现
    目录一、准备redis镜像二、准备k8s yml—redis-sentinel.yml三、查看redis哨兵信息四、连接redis哨兵一、准备redis镜像 dockerfile FROM redis:6.0...
    99+
    2022-07-01
    k8s部署redis哨兵 k8s redis哨兵
  • k8s部署java项目的实现
    下载jar的包 [root@master test]# wget https://dl.halo.run/release/halo-1.4.16.jar [root@master...
    99+
    2024-04-02
  • docker/docker-compose 部署 nginx+mysql+wordpress 实战
    1. 网络架构图 MariaDB 作为后面的关系型数据库,端口号是 3306; WordPress 是中间的应用服务器,使用 MariaDB 来存储数据,它的端口是 80; Nginx 是前面的反向...
    99+
    2023-09-06
    docker nginx mysql
  • k8s下mysql容器集群怎么部署
    在Kubernetes下部署MySQL容器集群可以使用StatefulSet来管理。下面是一个示例:1. 创建一个MySQL配置文件...
    99+
    2023-09-23
    mysql k8s
  • k8s部署redis cluster集群的实现
    目录Redis 介绍为什么要用Redis什么是Redis Cluster集群k8s以StatefulSet方式部署redis cluster集群:部署nfs创建pv部署redis初始...
    99+
    2024-04-02
  • redis3.2.3安装部署实战
     redis有很多版本,目前最新的版本redis-3.2.3,安装步骤跟以前老版本的安装步骤一样,废话不多说以下是安装步骤:1、首先需要下载tar安装文件下载地址:http://redis.io/...
    99+
    2024-04-02
  • Redis5.x 集群部署实战
    实验环境主机名IP地址Redis端口划分备注node171172.20.20.17116001,16002node172172.20.20.17216001,16002node173172.20.20.17...
    99+
    2024-04-02
  • 关于k8s环境部署mysql主从的问题
    一、通过yaml部署mysql 1、mysql-configmap.yaml apiVersion: v1 kind: ConfigMap metadata: name: mys...
    99+
    2024-04-02
  • 【MySQL】基础实战篇(1)—数据库与数据表的操作
    创建管理数据库创建数据库查看与选择数据库修改数据库删除数据库 创建管理数据表创建数据表查看数据修改数据表删除数据表 创建管理数据库 创建数据库 语法: CREATE...
    99+
    2023-09-27
    数据库 mysql oracle
  • k8s怎么实现自动部署go项目
    要实现自动部署Go项目,可以使用Kubernetes(K8s)提供的以下功能: 编写Dockerfile:首先,需要编写一个Do...
    99+
    2023-10-27
    k8s go
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作