一、概述 MySQL是一个关系型数据库管理系统,由瑞典MySQLAB公司开发,属于Oracle旗下产品。MySQL是最流行的关系型数据库管理系统之一,在WEB应用方面,MySQL是最好的RDBMS(RelationalDatabaseManagementSystem,关系数据库管理系统)应用软件之一。这里主要讲mysql部署在k8s上,mysql部署在k8s上的优势主要有以下几点:资源隔离动态弹性扩缩容环境一致性运维方便 官方文档:https:docs。oracle。comenusiaasmysqldatabasedocgettingstarted。html MySQL原理介绍也可以参考我这篇文章:MySQL原理介绍 二、开始部署(一主两从) 1)添加源helmrepoaddbitnamihttps:charts。bitnami。combitnamihelmpullbitnamimysqltarxfmysql9。3。3。tgz2)修改配置修改mysqlvalues。yaml。。。image:registry:myharbor。comrepository:bigdatamysqltag:8。0。30debian11r15。。。architecture:replication。。。primary:persistence:enabled:truesize:10GistorageClass:mysqllocalstorage目录需要提前在宿主机上创建local:name:mysql0host:local168182110path:optbigdataserversmysqldatadata1service:type:NodePortnodePorts:mysql:30306secondary:replicaCount:2persistence:enabled:truesize:10GistorageClass:mysqllocalstorage目录需要提前在宿主机上创建local:name:mysql1host:local168182111path:optbigdataserversmysqldatadata1name:mysql2host:local168182112path:optbigdataserversmysqldatadata1service:type:NodePortnodePorts:mysql:30307。。。metrics:parammetrics。enabledStartasidecarprometheusexporterenabled:trueimage:registry:myharbor。comrepository:bigdatamysqldexportertag:0。14。0debian11r33添加mysqltemplatespv。yaml{{range。Values。primary。persistence。local}}apiVersion:v1kind:PersistentVolumemetadata:name:{{。name}}labels:name:{{。name}}spec:storageClassName:{{。Values。primary。persistence。storageClass}}capacity:storage:{{。Values。primary。persistence。size}}accessModes:ReadWriteOncelocal:path:{{。path}}nodeAffinity:required:nodeSelectorTerms:matchExpressions:key:kubernetes。iohostnameoperator:Invalues:{{。host}}{{end}}{{range。Values。secondary。persistence。local}}apiVersion:v1kind:PersistentVolumemetadata:name:{{。name}}labels:name:{{。name}}spec:storageClassName:{{。Values。secondary。persistence。storageClass}}capacity:storage:{{。Values。secondary。persistence。size}}accessModes:ReadWriteOncelocal:path:{{。path}}nodeAffinity:required:nodeSelectorTerms:matchExpressions:key:kubernetes。iohostnameoperator:Invalues:{{。host}}{{end}}添加mysqltemplatesstorageclass。yamlkind:StorageClassapiVersion:storage。k8s。iov1metadata:name:{{。Values。primary。persistence。storageClass}}provisioner:kubernetes。ionoprovisioner3)开始安装创建持久化目录mkdirpoptbigdataserversmysqldatadata1先准备好镜像dockerpulldocker。iobitnamimysql:8。0。30debian11r15dockertagdocker。iobitnamimysql:8。0。30debian11r15myharbor。combigdatamysql:8。0。30debian11r15dockerpushmyharbor。combigdatamysql:8。0。30debian11r15mysqldexporterdockerpulldocker。iobitnamimysqldexporter:0。14。0debian11r33dockertagdocker。iobitnamimysqldexporter:0。14。0debian11r33myharbor。combigdatamysqldexporter:0。14。0debian11r33dockerpushmyharbor。combigdatamysqldexporter:0。14。0debian11r33开始安装helminstallmysql。mysqlnmysqlcreatenamespace NOTESNAME:mysqlLASTDEPLOYED:MonSep1923:57:182022NAMESPACE:mysqlSTATUS:deployedREVISION:1TESTSUITE:NoneNOTES:CHARTNAME:mysqlCHARTVERSION:9。3。3APPVERSION:8。0。30PleasebepatientwhilethechartisbeingdeployedTip:Watchthedeploymentstatususingthecommand:kubectlgetpodswnamespacemysqlServices:echoPrimary:mysqlprimary。mysql。svc。cluster。local:3306echoSecondary:mysqlsecondary。mysql。svc。cluster。local:3306Executethefollowingtogettheadministratorcredentials:echoUsername:rootMYSQLROOTPASSWORD(kubectlgetsecretnamespacemysqlmysqlojsonpath{。data。mysqlrootpassword}base64d)Toconnecttoyourdatabase:1。Runapodthatyoucanuseasaclient:kubectlrunmysqlclientrmttyirestartNeverimagemyharbor。combigdatamysql:8。0。30debian11r15namespacemysqlenvMYSQLROOTPASSWORDMYSQLROOTPASSWORDcommandbash2。Toconnecttoprimaryservice(readwrite):mysqlhmysqlprimary。mysql。svc。cluster。localurootpMYSQLROOTPASSWORD3。Toconnecttosecondaryservice(readonly):mysqlhmysqlsecondary。mysql。svc。cluster。localurootpMYSQLROOTPASSWORDToaccesstheMySQLPrometheusmetricsfromoutsidetheclusterexecutethefollowingcommands:kubectlportforwardnamespacemysqlsvcmysqlmetrics9104:9104curlhttp:127。0。0。1:9104metrics 查看pod状态kubectlgetpods,svcnmysqlowide 4)测试验证 【温馨提示】从库(slave)是只读的。就是简单的读写测试,还有就是pod挂了,能否正常拉起等等。这个测试验证比较简单。这里就不一步步的演示了。5)Prometheus监控 Prometheus:https:prometheus。k8s。localtargets?searchmysql 可以通过命令查看采集数据kubectlgetrawhttp:10。244。0。74:9104metricskubectlgetrawhttp:10。244。1。125:9104metricskubectlgetrawhttp:10。244。2。178:9104metrics Grafana:https:grafana。k8s。local 账号:admin,密码通过下面命令获取kubectlgetsecretnamespacegrafanagrafanaojsonpath{。data。adminpassword}base64echo 导入grafana模板,集群资源监控:7362 官方模块下载地址:https:grafana。comgrafanadashboards 6)卸载helmuninstallmysqlnmysqlkubectldeletepodnmysqlkubectlgetpodnmysqlawkNR1{print1}forcekubectlpatchnsmysqlp{metadata:{finalizers:null}}kubectldeletensmysqlforce 这里只是实现了mysql的主从,没有实现高可用,官方目前没有出mysqlokk8s高可用的实现方案,虽然网上也有高可用的实现方案,但是我们公司没真正去落地使用,所以不予评价网上的高可用的方案,有兴趣的小伙伴可以去试试,其实mysql在大数据领域一般只是作为元数据存储,主挂了,影响不是很大。目前也在研究mysqlonk8s的高可用实现方案,如果后期有mysqlonk8s高可用真正落地到生产环境中使用,到时候再来分享一下。MySQLonk8s环境部署就先这里了,有疑问的小伙伴欢迎给我留言