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

    文章

    3770

    浏览量

    64301
  • MySQL
    +关注

    关注

    1

    文章

    802

    浏览量

    26466

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

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

收藏 人收藏

    评论

    相关推荐

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

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

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

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

    如何利用K8S全面拥抱微服务架构?

    K8S是第一个将“一切以服务为中心,一切围绕服务运转”作为指导思想的创新型产品,它的功能和架构设计自始至终都遵循了这一指导思想,构建在K8S的系统不仅可以独立运行在物理机、虚拟机集群或者企业私有云
    的头像 发表于 10-08 15:59 2.7w次阅读

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

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

    Docker不香吗为什么还要用K8s

    Docker 虽好用,但面对强大的集群,成千上万的容器,突然感觉不香了。 这时候就需要我们的主角 Kubernetes 上场了,先来了解一下 K8s 的基本概念,后面再介绍实践,由浅入深步步为营
    的头像 发表于 06-02 11:56 3421次阅读

    简单说明k8s和Docker之间的关系

    ,但最近发现k8s概念较多,命令也有些不够用了,故想借此机会写点东西,更全面认识并使用k8s。本篇文章目的:让你更全面了解k8s概念,以及学到在工作中常用的操作。整体更偏向于原理和应用。
    的头像 发表于 06-24 15:48 3382次阅读

    K8S(kubernetes)学习指南

    K8S(kubernetes)学习指南
    发表于 06-29 14:14 0次下载

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

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

    什么是K3sK8sK3sK8s有什么区别?

    Kubernetes,通常缩写为 K8s,是领先的容器编排工具。该开源项目最初由 Google 开发,帮助塑造了现代编排的定义。该系统包括了部署和运行容器化系统所需的一切。
    的头像 发表于 08-03 10:53 7375次阅读

    k8s生态链包含哪些技术

    1. Apache APISIX Ingress 定义   K8s 生态中,Ingress 作为表示 K8s 流量入口的一种资源,想要让其生效,就需要有一个 Ingress Controller
    的头像 发表于 08-07 10:56 1198次阅读
    <b class='flag-5'>k8s</b>生态链包含哪些技术

    k8s架构篇:服务部署模式是如何变迁的

    kubernetes,简称 K8s,是用 8 代替中间 8 个字符 “ubernete” 而成的缩写,是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes 的目标是让
    的头像 发表于 10-15 15:39 627次阅读
    <b class='flag-5'>k8s</b>架构篇:服务<b class='flag-5'>部署</b>模式是如何变迁的

    K8S落地实践经验分享

    k8s 即 Kubernetes,是一个开源的容器编排引擎,用来对容器化应用进行自动化部署、 扩缩和管理。
    的头像 发表于 01-02 11:45 1055次阅读
    <b class='flag-5'>K8S</b>落地实践经验分享

    K8S学习教程三:PetaExpress KubeSphere 容器部署 Wiki 系统 wiki.js 并启用中文全文检索

    K8S学习教程(三):PetaExpress KubeSphere 容器部署 Wiki 系统 wiki.js 并启用中文全文检索  。
    的头像 发表于 07-08 17:03 618次阅读
    <b class='flag-5'>K8S</b>学习教程三:<b class='flag-5'>在</b>PetaExpress KubeSphere 容器<b class='flag-5'>部署</b> Wiki 系统 wiki.js 并启用中文全文检索

    k8s可以部署私有云吗?私有云部署全攻略

    Kubernetes(简称K8S)可以部署私有云。Kubernetes是一个开源的容器编排引擎,能够自动化容器的部署、扩展和管理,使得应用可以各种环境中高效运行。通过使用Kubern
    的头像 发表于 10-25 09:32 139次阅读

    混合云部署k8s集群方法有哪些?

    混合云部署k8s集群方法是首先需本地与公有云分别建立K8s集群,并确保网络连接。接着,配置kubeconfig文件连接两集群,并安装云服务插件以
    的头像 发表于 11-07 09:37 119次阅读