一、概述
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文章
4011瀏覽量
68273 -
MySQL
+關注
關注
1文章
903瀏覽量
29450
原文標題: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
?1689次閱讀
什么是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上的實現方案

評論