一、概述
MySQL
是一個關(guān)系型數(shù)據(jù)庫管理系統(tǒng),由瑞典 MySQL AB 公司開發(fā),屬于 Oracle 旗下產(chǎn)品。MySQL 是最流行的關(guān)系型數(shù)據(jù)庫管理系統(tǒng)之一,在 WEB 應(yīng)用方面,MySQL 是最好的 RDBMS (Relational Database Management System,關(guān)系數(shù)據(jù)庫管理系統(tǒng)) 應(yīng)用軟件之一。這里主要講 mysql 部署在 k8s 上,mysql 部署在 k8s 上的優(yōu)勢主要有以下幾點:
- 資源隔離
- 動態(tài)彈性擴縮容
- 環(huán)境一致性
- 運維方便
官方文檔:
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"
#目錄需要提前在宿主機上創(chuàng)建
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"
#目錄需要提前在宿主機上創(chuàng)建
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)開始安裝
#創(chuàng)建持久化目錄
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 監(jiān)控
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
導(dǎo)入 grafana 模板,集群資源監(jiān)控:7362
官方模塊下載地址:

6)卸載
helmuninstallmysql-nmysql
kubectldeletepod-nmysql`kubectlgetpod-nmysql|awk'NR>1{print$1}'`--force
kubectlpatchnsmysql-p'{"metadata":{"finalizers":null}}'
kubectldeletensmysql--force
總結(jié)
審核編輯:湯梓紅-
數(shù)據(jù)庫
+關(guān)注
關(guān)注
7文章
3882瀏覽量
65538 -
MySQL
+關(guān)注
關(guān)注
1文章
840瀏覽量
27310
原文標題:8 張圖詳解 MySQL 在 K8S 環(huán)境中部署與監(jiān)控
文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
全面提升,阿里云Docker/Kubernetes(K8S) 日志解決方案與選型對比
全面提升,阿里云Docker/Kubernetes(K8S) 日志解決方案與選型對比
OpenStack與K8s結(jié)合的兩種方案的詳細介紹和比較
Docker不香嗎為什么還要用K8s
簡單說明k8s和Docker之間的關(guān)系
k8s是什么意思?kubeadm部署k8s集群(k8s部署)|PetaExpres
什么是K3s和K8s?K3s和K8s有什么區(qū)別?
k8s生態(tài)鏈包含哪些技術(shù)

k8s架構(gòu)篇:服務(wù)部署模式是如何變遷的

K8S學(xué)習(xí)教程三:在PetaExpress KubeSphere 容器部署 Wiki 系統(tǒng) wiki.js 并啟用中文全文檢索

評論