0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

mysql部署在k8s上的实现方案

马哥Linux运维 来源:博客园 作者: 大数据老司机 2022-09-26 10:39 次阅读

一、概述

MySQL是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL 是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。这里主要讲 mysql 部署在 k8s 上,mysql 部署在 k8s 上的优势主要有以下几点:

  • 资源隔离
  • 动态弹性扩缩容
  • 环境一致性
  • 运维方便

官方文档:

https://docs.oracle.com/en-us/iaas/mysql-database/doc/getting-started.html

MySQL 原理介绍也可以参考这篇文章:

MySQL 原理介绍:

https://www.cnblogs.com/liugp/p/16500048.html

efbad070-3c16-11ed-9e49-dac502259ad0.png

二、开始部署(一主两从)

efc7ee72-3c16-11ed-9e49-dac502259ad0.png

1)添加源

helmrepoaddbitnamihttps://charts.bitnami.com/bitnami
helmpullbitnami/mysql
tar-xfmysql-9.3.3.tgz

2)修改配置

...

image:
registry:myharbor.com
repository:bigdata/mysql
tag:8.0.30-debian-11-r15

...

architecture:replication

...

primary:
persistence:
enabled:true
size:10Gi
storageClass:"mysql-local-storage"
#目录需要提前在宿主机上创建
local:
-name:mysql-0
host:"local-168-182-110"
path:"/opt/bigdata/servers/mysql/data/data1"
service:
type:NodePort
nodePorts:
mysql:"30306"

secondary:
replicaCount:2
persistence:
enabled:true
size:10Gi
storageClass:"mysql-local-storage"
#目录需要提前在宿主机上创建
local:
-name:mysql-1
host:"local-168-182-111"
path:"/opt/bigdata/servers/mysql/data/data1"
-name:mysql-2
host:"local-168-182-112"
path:"/opt/bigdata/servers/mysql/data/data1"
service:
type:NodePort
nodePorts:
mysql:"30307"

...

metrics:
##@parammetrics.enabledStartaside-carprometheusexporter
##
enabled:true
image:
registry:myharbor.com
repository:bigdata/mysqld-exporter
tag:0.14.0-debian-11-r33
{{-range.Values.primary.persistence.local}}
---
apiVersion:v1
kind:PersistentVolume
metadata:
name:{{.name}}
labels:
name:{{.name}}
spec:
storageClassName:{{$.Values.primary.persistence.storageClass}}
capacity:
storage:{{$.Values.primary.persistence.size}}
accessModes:
-ReadWriteOnce
local:
path:{{.path}}
nodeAffinity:
required:
nodeSelectorTerms:
-matchExpressions:
-key:kubernetes.io/hostname
operator:In
values:
-{{.host}}
---
{{-end}}

{{-range.Values.secondary.persistence.local}}
---
apiVersion:v1
kind:PersistentVolume
metadata:
name:{{.name}}
labels:
name:{{.name}}
spec:
storageClassName:{{$.Values.secondary.persistence.storageClass}}
capacity:
storage:{{$.Values.secondary.persistence.size}}
accessModes:
-ReadWriteOnce
local:
path:{{.path}}
nodeAffinity:
required:
nodeSelectorTerms:
-matchExpressions:
-key:kubernetes.io/hostname
operator:In
values:
-{{.host}}
---
{{-end}}
kind:StorageClass
apiVersion:storage.k8s.io/v1
metadata:
name:{{.Values.primary.persistence.storageClass}}
provisioner:kubernetes.io/no-provisioner

3)开始安装

#创建持久化目录
mkdir-p/opt/bigdata/servers/mysql/data/data1

#先准备好镜像
dockerpulldocker.io/bitnami/mysql:8.0.30-debian-11-r15
dockertagdocker.io/bitnami/mysql:8.0.30-debian-11-r15myharbor.com/bigdata/mysql:8.0.30-debian-11-r15
dockerpushmyharbor.com/bigdata/mysql:8.0.30-debian-11-r15

#mysqld-exporter
dockerpulldocker.io/bitnami/mysqld-exporter:0.14.0-debian-11-r33
dockertagdocker.io/bitnami/mysqld-exporter:0.14.0-debian-11-r33myharbor.com/bigdata/mysqld-exporter:0.14.0-debian-11-r33
dockerpushmyharbor.com/bigdata/mysqld-exporter:0.14.0-debian-11-r33

#开始安装
helminstallmysql./mysql-nmysql--create-namespace

NOTES

NAME:mysql
LASTDEPLOYED:MonSep1923182022
NAMESPACE:mysql
STATUS:deployed
REVISION:1
TESTSUITE:None
NOTES:
CHARTNAME:mysql
CHARTVERSION:9.3.3
APPVERSION:8.0.30

**Pleasebepatientwhilethechartisbeingdeployed**

Tip:

Watchthedeploymentstatususingthecommand:kubectlgetpods-w--namespacemysql

Services:

echoPrimary:mysql-primary.mysql.svc.cluster.local:3306
echoSecondary:mysql-secondary.mysql.svc.cluster.local:3306

Executethefollowingtogettheadministratorcredentials:

echoUsername:root
MYSQL_ROOT_PASSWORD=$(kubectlgetsecret--namespacemysqlmysql-ojsonpath="{.data.mysql-root-password}"|base64-d)

Toconnecttoyourdatabase:

1.Runapodthatyoucanuseasaclient:

kubectlrunmysql-client--rm--tty-i--restart='Never'--imagemyharbor.com/bigdata/mysql:8.0.30-debian-11-r15--namespacemysql--envMYSQL_ROOT_PASSWORD=$MYSQL_ROOT_PASSWORD--command--bash

2.Toconnecttoprimaryservice(read/write):

mysql-hmysql-primary.mysql.svc.cluster.local-uroot-p"$MYSQL_ROOT_PASSWORD"

3.Toconnecttosecondaryservice(read-only):

mysql-hmysql-secondary.mysql.svc.cluster.local-uroot-p"$MYSQL_ROOT_PASSWORD"



ToaccesstheMySQLPrometheusmetricsfromoutsidetheclusterexecutethefollowingcommands:

kubectlport-forward--namespacemysqlsvc/mysql-metrics9104:9104&
curlhttp://127.0.0.1:9104/metrics

efd23e36-3c16-11ed-9e49-dac502259ad0.png

查看 pod 状态

kubectlgetpods,svc-nmysql-owide
efdfd37a-3c16-11ed-9e49-dac502259ad0.png

4)测试验证

【温馨提示】从库(slave)是只读的。就是简单的读写测试,还有就是 pod 挂了,能否正常拉起等等。这个测试验证比较简单。这里就不一步步的演示了。

5)Prometheus 监控

Prometheus:

https://prometheus.k8s.local/targets?search=mysql

f00c274a-3c16-11ed-9e49-dac502259ad0.png
可以通过命令查看采集数据

kubectlget--rawhttp://10.244.0.74:9104/metrics
kubectlget--rawhttp://10.244.1.125:9104/metrics
kubectlget--rawhttp://10.244.2.178:9104/metrics

Grafana:

https://grafana.k8s.local/

账号:admin,密码通过下面命令获取

kubectlgetsecret--namespacegrafanagrafana-ojsonpath="{.data.admin-password}"|base64--decode;echo

导入 grafana 模板,集群资源监控:7362
官方模块
下载地址:

https://grafana.com/grafana/dashboards/

f0295630-3c16-11ed-9e49-dac502259ad0.png

6)卸载

helmuninstallmysql-nmysql

kubectldeletepod-nmysql`kubectlgetpod-nmysql|awk'NR>1{print$1}'`--force
kubectlpatchnsmysql-p'{"metadata":{"finalizers":null}}'
kubectldeletensmysql--force

总结

这里只是实现了 mysql 的主从,没有实现高可用,官方目前没有出 mysql ok k8s 高可用的实现方案,虽然网上也有高可用的实现方案,但是我们公司没真正去落地使用,所以不予评价网上的高可用的方案,有兴趣的小伙伴可以去试试,其实 mysql 在大数据领域一般只是作为元数据存储,主挂了,影响不是很大。目前也在研究 mysql on k8s 的高可用实现方案,如果后期有 mysql on k8s 高可用真正落地到生产环境中使用,到时候再来分享一下。MySQL on k8s 环境部署就先这里了,有疑问的小伙伴欢迎给我留言~

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数据库
    +关注

    关注

    7

    文章

    3591

    浏览量

    63370
  • MySQL
    +关注

    关注

    1

    文章

    775

    浏览量

    26005

原文标题:8 张图详解 MySQL 在 K8S 环境中部署与监控

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    全面提升,阿里云Docker/Kubernetes(K8S) 日志解决方案与选型对比

    简单、轻量、高性价比的部署与运维方法;而k8sDocker之上,更进一步提供了对管理基础设施的抽象,形成了真正意义的一站式部署与运维
    发表于 02-28 12:49

    全面提升,阿里云Docker/Kubernetes(K8S) 日志解决方案与选型对比

    简单、轻量、高性价比的部署与运维方法;而k8sDocker之上,更进一步提供了对管理基础设施的抽象,形成了真正意义的一站式部署与运维
    发表于 02-28 12:50

    再次升级!阿里云Kubernetes日志解决方案

    /删除/修改AliyunLogConfig资源时,alibaba-log-controller会监听到资源变化,并对应的日志服务创建/删除/修改相应的采集配置。以此实现K8S内部
    发表于 05-28 19:08

    K8S容器编排的互通测试

    K8S容器编排之NetWorkPolicy官方实例
    发表于 06-06 11:28

    k8s核心原理学习指南3

    k8s学习3 - 核心原理
    发表于 09-25 16:37

    K8s 从懵圈到熟练 – 集群网络详解

    导读:阿里云 K8S 集群网络目前有两种方案:一种是 flannel 方案;另外一种是基于 calico 和弹性网卡 eni 的 terway 方案。Terway 和 flannel
    发表于 10-14 15:06

    K8s 从懵圈到熟练 – 镜像拉取这件小事

    K8s 的基础实现了控制器 Acr credential helper。这个控制器可以让同时使用阿里云 K8s 集群和容器镜像服务产品的用户,
    发表于 10-14 15:38

    从零开始入门 K8s | 应用存储和持久化数据卷:核心知识

    访问,是常见的一种数据的共享方式;第三种是多个 node 读写访问。用户提交 PVC 的时候,最重要的两个字段 —— Capacity 和 AccessModes。提交 PVC后,K8s
    发表于 10-15 14:55

    从零开始入门 K8s | 应用存储和持久化数据卷:存储快照与拓扑调度

    storageclass 中要做一些拓扑限制。三、操作演示本节将在线上环境来演示一下前面讲解的内容。首先来看一下我的阿里云服务器搭建的 K8s 服务。总共有 3 个 node 节点。一个
    发表于 10-15 15:07

    从零开始入门 K8s | 应用存储和持久化数据卷:核心知识

    用的是阿里云的 NAS 文件存储;动态 Provisioning 主要用了阿里云的云盘。它们需要相应存储插件,插件我已经提前部署我的 K8s 集群中了(csi-nasplugin 是为了
    发表于 10-16 10:10

    k8s volume中的本地存储和网络存储

    八 、 k8s volume 本地存储和网络存储
    发表于 03-25 08:44

    搭建K8s环境平台的步骤

    1 搭建K8s环境平台规划1.1 单master集群1.2 多master集群
    发表于 11-04 06:03

    OpenStack与K8s结合的两种方案的详细介绍和比较

    OpenStack与K8S结合主要有两种方案。一是K8S部署在OpenStack平台之上,二是K8S和OpenStack组件集成。
    的头像 发表于 10-14 09:38 2.7w次阅读

    k8s是什么意思?kubeadm部署k8s集群(k8s部署)|PetaExpres

    ),Kubernetes提供了应用部署,规划,更新,维护的一种机制。 在Kubernetes中,我们可以创建多个容器,每个容器里面运行一个应用实例,然后通过内置的负载均衡策略,实现对这一组应用实例的管理、发现、访问,而这些细节都不需要运维人员去进行复杂的手工配置和处理。
    发表于 07-19 13:14 601次阅读

    docker部署mysql的坏处

    Docker 是一种虚拟化技术,它允许开发人员在容器内打包应用程序及其所有依赖项,从而实现在不同环境中运行相同的应用程序的能力。然而,在使用 Docker 部署 MySQL 时,也存在一些潜在
    的头像 发表于 11-23 09:29 703次阅读