一、概述
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

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

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
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

kubectlgetpods,svc-nmysql-owide

4)测试验证
【温馨提示】从库(slave)是只读的。就是简单的读写测试,还有就是 pod 挂了,能否正常拉起等等。这个测试验证比较简单。这里就不一步步的演示了。
5)Prometheus 监控
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:
账号:admin,密码通过下面命令获取
kubectlgetsecret--namespacegrafanagrafana-ojsonpath="{.data.admin-password}"|base64--decode;echo
导入 grafana 模板,集群资源监控:7362
官方模块下载地址:

6)卸载
helmuninstallmysql-nmysql
kubectldeletepod-nmysql`kubectlgetpod-nmysql|awk'NR>1{print$1}'`--force
kubectlpatchnsmysql-p'{"metadata":{"finalizers":null}}'
kubectldeletensmysql--force
总结
审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
数据库
+关注
关注
7文章
4078浏览量
68524 -
MySQL
+关注
关注
1文章
928浏览量
29739
原文标题:8 张图详解 MySQL 在 K8S 环境中部署与监控
文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
热点推荐
什么是 K8S,如何使用 K8S
Kubernetes(简称K8S)是一个用于管理容器化应用程序的开源平台。以下是关于K8S及其使用方法的介绍:
一、什么是 K8S
核心特点
自动化容器编排:自动处理容器的部署、扩展
发表于 06-25 06:45
全面提升,阿里云Docker/Kubernetes(K8S) 日志解决方案与选型对比
简单、轻量、高性价比的部署与运维方法;而k8s在Docker之上,更进一步提供了对管理基础设施的抽象,形成了真正意义上的一站式部署与运维
发表于 02-28 12:49
全面提升,阿里云Docker/Kubernetes(K8S) 日志解决方案与选型对比
简单、轻量、高性价比的部署与运维方法;而k8s在Docker之上,更进一步提供了对管理基础设施的抽象,形成了真正意义上的一站式部署与运维
发表于 02-28 12:50
OpenStack与K8s结合的两种方案的详细介绍和比较
OpenStack与K8S结合主要有两种方案。一是K8S部署在OpenStack平台之上,二是K8S
Docker不香吗为什么还要用K8s
Docker 虽好用,但面对强大的集群,成千上万的容器,突然感觉不香了。 这时候就需要我们的主角 Kubernetes 上场了,先来了解一下 K8s 的基本概念,后面再介绍实践,由浅入深步步为营
简单说明k8s和Docker之间的关系
,但最近发现k8s概念较多,命令也有些不够用了,故想借此机会写点东西,更全面认识并使用k8s。本篇文章目的:让你更全面了解k8s概念,以及学到在工作中常用的操作。整体更偏向于原理和应用。在
k8s是什么意思?kubeadm部署k8s集群(k8s部署)|PetaExpres
),Kubernetes提供了应用部署,规划,更新,维护的一种机制。 在Kubernetes中,我们可以创建多个容器,每个容器里面运行一个应用实例,然后通过内置的负载均衡策略,实现对这一组应用实例的管理、发现、访问,而这些细节都
发表于 07-19 13:14
•1860次阅读
什么是K3s和K8s?K3s和K8s有什么区别?
Kubernetes,通常缩写为 K8s,是领先的容器编排工具。该开源项目最初由 Google 开发,帮助塑造了现代编排的定义。该系统包括了部署和运行容器化系统所需的一切。
k8s生态链包含哪些技术
1. Apache APISIX Ingress 定义 在 K8s 生态中,Ingress 作为表示 K8s 流量入口的一种资源,想要让其生效,就需要有一个 Ingress Controller
K8S学习教程三:在PetaExpress KubeSphere 容器部署 Wiki 系统 wiki.js 并启用中文全文检索
K8S学习教程(三):在PetaExpress KubeSphere 容器部署 Wiki 系统 wiki.js 并启用中文全文检索 。
k8s可以部署私有云吗?私有云部署全攻略
Kubernetes(简称K8S)可以部署私有云。Kubernetes是一个开源的容器编排引擎,能够自动化容器的部署、扩展和管理,使得应用可以在各种环境中高效运行。通过使用Kubern
混合云部署k8s集群方法有哪些?
混合云部署k8s集群方法是首先需在本地与公有云分别建立K8s集群,并确保网络连接。接着,配置kubeconfig文件连接两集群,并安装云服务插件以实
k8s和docker区别对比,哪个更强?
部署、扩展、管理和应用生命周期管理能力,可实现高可用性和自动伸缩,两者常结合使用以优化容器化和应用管理。UU云小编将对k8s和docker区别进行详细对比:
一文带你彻底搞懂K8s网络
说实话,K8s 网络是我见过最让新手头疼的知识点,没有之一。记得我刚接触 K8s 那会儿,看着流量在 Pod、Service、Node 之间穿梭,完全是一脸懵逼。后来踩了无数坑,熬了无数夜,总算把这套网络模型摸透了。今天这篇文章
mysql部署在k8s上的实现方案

评论