当前位置:   article > 正文

MySQL 在 K8S 环境中部署与监控,一篇搞定它!_mysql svc.cluster.local

mysql svc.cluster.local

一、概述

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

MySQL 原理介绍也可以参考这篇文章:

https://www.cnblogs.com/liugp/p/16500048.html

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

1)添加源

  1. helm repo add bitnami https://charts.bitnami.com/bitnami
  2. helm pull bitnami/mysql
  3. tar -xf mysql-9.3.3.tgz

2)修改配置

修改mysql/values.yaml

  1. ...
  2. image:
  3.   registry: myharbor.com
  4.   repository: bigdata/mysql
  5.   tag: 8.0.30-debian-11-r15
  6. ...
  7. architecture: replication
  8. ...
  9. primary:
  10.   persistence:
  11.     enabled: true
  12.     size10Gi
  13.     storageClass: "mysql-local-storage"
  14.     # 目录需要提前在宿主机上创建
  15.     local:
  16.     - name: mysql-0
  17.       host: "local-168-182-110"
  18.       path: "/opt/bigdata/servers/mysql/data/data1"
  19.   service:
  20.     type: NodePort
  21.     nodePorts:
  22.       mysql: "30306"
  23. secondary:
  24.   replicaCount: 2
  25.   persistence:
  26.     enabled: true
  27.     size10Gi
  28.     storageClass: "mysql-local-storage"
  29.     # 目录需要提前在宿主机上创建
  30.     local:
  31.     - name: mysql-1
  32.       host: "local-168-182-111"
  33.       path: "/opt/bigdata/servers/mysql/data/data1"
  34.     - name: mysql-2
  35.       host: "local-168-182-112"
  36.       path: "/opt/bigdata/servers/mysql/data/data1"
  37.   service:
  38.     type: NodePort
  39.     nodePorts:
  40.       mysql: "30307"
  41. ...
  42. metrics:
  43.   ## @param metrics.enabled Start a side-car prometheus exporter
  44.   ##
  45.   enabled: true
  46.   image:
  47.     registry: myharbor.com
  48.     repository: bigdata/mysqld-exporter
  49.     tag: 0.14.0-debian-11-r33

添加mysql/templates/pv.yaml

  1. {{- range .Values.primary.persistence.local }}
  2. ---
  3. apiVersion: v1
  4. kind: PersistentVolume
  5. metadata:
  6.   name: {{ .name }}
  7.   labels:
  8.     name: {{ .name }}
  9. spec:
  10.   storageClassName: {{ $.Values.primary.persistence.storageClass }}
  11.   capacity:
  12.     storage: {{ $.Values.primary.persistence.size }}
  13.   accessModes:
  14.     - ReadWriteOnce
  15.   local:
  16.     path: {{ .path }}
  17.   nodeAffinity:
  18.     required:
  19.       nodeSelectorTerms:
  20.         - matchExpressions:
  21.             - key: kubernetes.io/hostname
  22.               operator: In
  23.               values:
  24.                 - {{ .host }}
  25. ---
  26. {{- end }}
  27. {{- range .Values.secondary.persistence.local }}
  28. ---
  29. apiVersion: v1
  30. kind: PersistentVolume
  31. metadata:
  32.   name: {{ .name }}
  33.   labels:
  34.     name: {{ .name }}
  35. spec:
  36.   storageClassName: {{ $.Values.secondary.persistence.storageClass }}
  37.   capacity:
  38.     storage: {{ $.Values.secondary.persistence.size }}
  39.   accessModes:
  40.     - ReadWriteOnce
  41.   local:
  42.     path: {{ .path }}
  43.   nodeAffinity:
  44.     required:
  45.       nodeSelectorTerms:
  46.         - matchExpressions:
  47.             - key: kubernetes.io/hostname
  48.               operator: In
  49.               values:
  50.                 - {{ .host }}
  51. ---
  52. {{- end }}

添加mysql/templates/storage-class.yaml

  1. kind: StorageClass
  2. apiVersion: storage.k8s.io/v1
  3. metadata:
  4.   name: {{ .Values.primary.persistence.storageClass }}
  5. provisioner: kubernetes.io/no-provisioner

3)开始安装

  1. # 创建持久化目录
  2. mkdir -p /opt/bigdata/servers/mysql/data/data1
  3. # 先准备好镜像
  4. docker pull docker.io/bitnami/mysql:8.0.30-debian-11-r15
  5. docker tag docker.io/bitnami/mysql:8.0.30-debian-11-r15 myharbor.com/bigdata/mysql:8.0.30-debian-11-r15
  6. docker push myharbor.com/bigdata/mysql:8.0.30-debian-11-r15
  7. # mysqld-exporter
  8. docker pull docker.io/bitnami/mysqld-exporter:0.14.0-debian-11-r33
  9. docker tag docker.io/bitnami/mysqld-exporter:0.14.0-debian-11-r33 myharbor.com/bigdata/mysqld-exporter:0.14.0-debian-11-r33
  10. docker push myharbor.com/bigdata/mysqld-exporter:0.14.0-debian-11-r33
  11. # 开始安装
  12. helm install mysql ./mysql -n mysql --create-namespace

NOTES

  1. NAME: mysql
  2. LAST DEPLOYED: Mon Sep 19 23:57:18 2022
  3. NAMESPACE: mysql
  4. STATUS: deployed
  5. REVISION: 1
  6. TEST SUITE: None
  7. NOTES:
  8. CHART NAME: mysql
  9. CHART VERSION: 9.3.3
  10. APP VERSION: 8.0.30
  11. ** Please be patient while the chart is being deployed **
  12. Tip:
  13.   Watch the deployment status using the command: kubectl get pods -w --namespace mysql
  14. Services:
  15.   echo Primary: mysql-primary.mysql.svc.cluster.local:3306
  16.   echo Secondary: mysql-secondary.mysql.svc.cluster.local:3306
  17. Execute the following to get the administrator credentials:
  18.   echo Username: root
  19.   MYSQL_ROOT_PASSWORD=$(kubectl get secret --namespace mysql mysql -o jsonpath="{.data.mysql-root-password}" | base64 -d)
  20. To connect to your database:
  21.   1Run a pod that you can use as a client:
  22.       kubectl run mysql-client --rm --tty -i --restart='Never' --image  myharbor.com/bigdata/mysql:8.0.30-debian-11-r15 --namespace mysql --env MYSQL_ROOT_PASSWORD=$MYSQL_ROOT_PASSWORD --command -- bash
  23.   2To connect to primary service (read/write):
  24.       mysql -h mysql-primary.mysql.svc.cluster.local -uroot -p"$MYSQL_ROOT_PASSWORD"
  25.   3To connect to secondary service (read-only):
  26.       mysql -h mysql-secondary.mysql.svc.cluster.local -uroot -p"$MYSQL_ROOT_PASSWORD"
  27. To access the MySQL Prometheus metrics from outside the cluster execute the following commands:
  28.     kubectl port-forward --namespace mysql svc/mysql-metrics 9104:9104 &
  29.     curl http://127.0.0.1:9104/metrics

查看pod状态

kubectl get pods,svc -n mysql -owide

 

4)测试验证

【温馨提示】从库(slave)是只读的。就是简单的读写测试,还有就是pod挂了,能否正常拉起等等。这个测试验证比较简单。这里就不一步步的演示了。

5)Prometheus监控

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

可以通过命令查看采集数据

  1. kubectl get --raw http://10.244.0.74:9104/metrics
  2. kubectl get --raw http://10.244.1.125:9104/metrics
  3. kubectl get --raw http://10.244.2.178:9104/metrics

Grafana:https://grafana.k8s.local/ 账号:admin,密码通过下面命令获取

kubectl get secret --namespace grafana grafana -o jsonpath="{.data.admin-password}" | base64 --decode ; echo

导入grafana模板,集群资源监控:7362

官方模块下载地址:

https://grafana.com/grafana/dashboards/

6)卸载

  1. helm uninstall mysql -n mysql 
  2. kubectl delete pod -n mysql `kubectl get pod -n mysql |awk 'NR>1{print $1}'--force
  3. kubectl patch ns mysql -'{"metadata":{"finalizers":null}}'
  4. kubectl delete ns mysql --force

这里只是实现了mysql 的主从,没有实现高可用,官方目前没有出mysql ok k8s高可用的实现方案,虽然网上也有高可用的实现方案,但是我们公司没真正去落地使用,所以不予评价网上的高可用的方案,有兴趣的小伙伴可以去试试,其实mysql在大数据领域一般只是作为元数据存储,主挂了,影响不是很大。

目前也在研究mysql on k8s 的高可用实现方案,如果后期有mysql on k8s高可用真正落地到生产环境中使用,到时候再来分享一下。MySQL on k8s 环境部署就先这里了,有疑问的小伙伴欢迎给我留言~

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/578924
推荐阅读
相关标签
  

闽ICP备14008679号