0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

mysql部署在k8s上的實現(xiàn)方案

馬哥Linux運維 ? 來源:博客園 ? 作者: 大數(shù)據(jù)老司機 ? 2022-09-26 10:39 ? 次閱讀

一、概述

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

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"
#目錄需要提前在宿主機上創(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

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 狀態(tài)

kubectlgetpods,svc-nmysql-owide
efdfd37a-3c16-11ed-9e49-dac502259ad0.png

4)測試驗證

【溫馨提示】從庫(slave)是只讀的。就是簡單的讀寫測試,還有就是 pod 掛了,能否正常拉起等等。這個測試驗證比較簡單。這里就不一步步的演示了。

5)Prometheus 監(jiān)控

Prometheus:

https://prometheus.k8s.local/targets?search=mysql

f00c274a-3c16-11ed-9e49-dac502259ad0.png
可以通過命令查看采集數(shù)據(jù)

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

導(dǎo)入 grafana 模板,集群資源監(jiān)控: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

總結(jié)

這里只是實現(xiàn)了 mysql 的主從,沒有實現(xiàn)高可用,官方目前沒有出 mysql ok k8s 高可用的實現(xiàn)方案,雖然網(wǎng)上也有高可用的實現(xiàn)方案,但是我們公司沒真正去落地使用,所以不予評價網(wǎng)上的高可用的方案,有興趣的小伙伴可以去試試,其實 mysql 在大數(shù)據(jù)領(lǐng)域一般只是作為元數(shù)據(jù)存儲,主掛了,影響不是很大。目前也在研究 mysql on k8s 的高可用實現(xiàn)方案,如果后期有 mysql on k8s 高可用真正落地到生產(chǎn)環(huán)境中使用,到時候再來分享一下。MySQL on k8s 環(huán)境部署就先這里了,有疑問的小伙伴歡迎給我留言~

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 數(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)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    全面提升,阿里云Docker/Kubernetes(K8S) 日志解決方案與選型對比

    簡單、輕量、高性價比的部署與運維方法;而k8sDocker之上,更進一步提供了對管理基礎(chǔ)設(shè)施的抽象,形成了真正意義的一站式部署與運維
    發(fā)表于 02-28 12:49

    全面提升,阿里云Docker/Kubernetes(K8S) 日志解決方案與選型對比

    簡單、輕量、高性價比的部署與運維方法;而k8sDocker之上,更進一步提供了對管理基礎(chǔ)設(shè)施的抽象,形成了真正意義的一站式部署與運維
    發(fā)表于 02-28 12:50

    OpenStack與K8s結(jié)合的兩種方案的詳細介紹和比較

    OpenStack與K8S結(jié)合主要有兩種方案。一是K8S部署OpenStack平臺之上,二是K8S
    的頭像 發(fā)表于 10-14 09:38 ?2.8w次閱讀

    Docker不香嗎為什么還要用K8s

    Docker 雖好用,但面對強大的集群,成千上萬的容器,突然感覺不香了。 這時候就需要我們的主角 Kubernetes 上場了,先來了解一下 K8s 的基本概念,后面再介紹實踐,由淺入深步步為營
    的頭像 發(fā)表于 06-02 11:56 ?3588次閱讀

    簡單說明k8s和Docker之間的關(guān)系

    ,但最近發(fā)現(xiàn)k8s概念較多,命令也有些不夠用了,故想借此機會寫點東西,更全面認識并使用k8s。本篇文章目的:讓你更全面了解k8s概念,以及學(xué)到在工作中常用的操作。整體更偏向于原理和應(yīng)用。
    的頭像 發(fā)表于 06-24 15:48 ?3583次閱讀

    K8S(kubernetes)學(xué)習(xí)指南

    K8S(kubernetes)學(xué)習(xí)指南
    發(fā)表于 06-29 14:14 ?0次下載

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

    ),Kubernetes提供了應(yīng)用部署,規(guī)劃,更新,維護的一種機制。 Kubernetes中,我們可以創(chuàng)建多個容器,每個容器里面運行一個應(yīng)用實例,然后通過內(nèi)置的負載均衡策略,實現(xiàn)對這一組應(yīng)用實例的管理、發(fā)現(xiàn)、訪問,而這些細節(jié)都
    發(fā)表于 07-19 13:14 ?1244次閱讀

    什么是K3sK8sK3sK8s有什么區(qū)別?

    Kubernetes,通??s寫為 K8s,是領(lǐng)先的容器編排工具。該開源項目最初由 Google 開發(fā),幫助塑造了現(xiàn)代編排的定義。該系統(tǒng)包括了部署和運行容器化系統(tǒng)所需的一切。
    的頭像 發(fā)表于 08-03 10:53 ?8078次閱讀

    k8s生態(tài)鏈包含哪些技術(shù)

    1. Apache APISIX Ingress 定義 ? K8s 生態(tài)中,Ingress 作為表示 K8s 流量入口的一種資源,想要讓其生效,就需要有一個 Ingress Controller
    的頭像 發(fā)表于 08-07 10:56 ?1412次閱讀
    <b class='flag-5'>k8s</b>生態(tài)鏈包含哪些技術(shù)

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

    kubernetes,簡稱 K8s,是用 8 代替中間 8 個字符 “ubernete” 而成的縮寫,是一個開源的,用于管理云平臺中多個主機上的容器化的應(yīng)用,Kubernetes 的目標是讓
    的頭像 發(fā)表于 10-15 15:39 ?780次閱讀
    <b class='flag-5'>k8s</b>架構(gòu)篇:服務(wù)<b class='flag-5'>部署</b>模式是如何變遷的

    K8S落地實踐經(jīng)驗分享

    k8s 即 Kubernetes,是一個開源的容器編排引擎,用來對容器化應(yīng)用進行自動化部署、 擴縮和管理。
    的頭像 發(fā)表于 01-02 11:45 ?1410次閱讀
    <b class='flag-5'>K8S</b>落地實踐經(jīng)驗分享

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

    K8S學(xué)習(xí)教程(三):PetaExpress KubeSphere 容器部署 Wiki 系統(tǒng) wiki.js 并啟用中文全文檢索? 。
    的頭像 發(fā)表于 07-08 17:03 ?861次閱讀
    <b class='flag-5'>K8S</b>學(xué)習(xí)教程三:<b class='flag-5'>在</b>PetaExpress KubeSphere 容器<b class='flag-5'>部署</b> Wiki 系統(tǒng) wiki.js 并啟用中文全文檢索

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

    Kubernetes(簡稱K8S)可以部署私有云。Kubernetes是一個開源的容器編排引擎,能夠自動化容器的部署、擴展和管理,使得應(yīng)用可以各種環(huán)境中高效運行。通過使用Kubern
    的頭像 發(fā)表于 10-25 09:32 ?363次閱讀

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

    混合云部署k8s集群方法是首先需本地與公有云分別建立K8s集群,并確保網(wǎng)絡(luò)連接。接著,配置kubeconfig文件連接兩集群,并安裝云服務(wù)插件以
    的頭像 發(fā)表于 11-07 09:37 ?370次閱讀

    k8s和docker區(qū)別對比,哪個更強?

    部署、擴展、管理和應(yīng)用生命周期管理能力,可實現(xiàn)高可用性和自動伸縮,兩者常結(jié)合使用以優(yōu)化容器化和應(yīng)用管理。UU云小編將對k8s和docker區(qū)別進行詳細對比:
    的頭像 發(fā)表于 12-11 13:55 ?446次閱讀

    電子發(fā)燒友

    中國電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會員交流學(xué)習(xí)
    • 獲取您個性化的科技前沿技術(shù)信息
    • 參加活動獲取豐厚的禮品