经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » MySQL » 查看文章
Kubernetes 部署 Mysql 8.0 数据库(单节点)
来源:cnblogs  作者:公众号程序员白楠楠  时间:2021/2/18 15:26:46  对本文有异议

系统环境:

  • Mysql 版本:8.0.19

  • Kubernetes 版本:1.17.4

  • 操作系统版本:CentOS 7.8

一、简介

Mysql 是我们常用的关系型数据库,在项目开发、测试、部署到生成环境时,经常需要部署一套 Mysql 进行数据存储。这里介绍下如何在 Kubernetes 环境中部署用于开发、测试的环境的 Mysql 数据库,当然,部署的是单节点模式,并非用于生产环境的主从或集群模式。整理了一份328页MySQ学习笔记

单节点的 Mysql 部署简单,且配置存活探针,能保证快速检测 Mysql 是否可用,当不可用时快速进行重启。

二、Mysql 参数配置

在使用 Kubernetes 部署应用后,一般会习惯与将应用的配置文件外置,用 ConfigMap 存储,然后挂载进入镜像内部。这样,只要修改 ConfigMap 里面的配置,再重启应用就能很方便就能够使应用重新加载新的配置,很方便。

创建 ConfigMap 存储 Mysql 配置文件

创建 Kubernetes 的 ConfigMap 资源,用于存储 Mysql 的配置文件 my.cnf 内容:

mysql-config.yaml

  1. apiVersion: v1
  2. kind: ConfigMap
  3. metadata:
  4. name: mysql-config
  5. labels:
  6. app: mysql
  7. data:
  8. my.cnf: |-
  9. [client]
  10. default-character-set=utf8mb4
  11. [mysql]
  12. default-character-set=utf8mb4
  13. [mysqld]
  14. max_connections = 2000
  15. secure_file_priv=/var/lib/mysql
  16. sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

通过 Kubectl 工具部署 ConfigMap

通过 kubectl 工具部署 Kubernetes ConfigMap 资源,命令如下:

  • -n:指定部署应用的 Namespace 命名空间。

    $ kubectl create -f mysql-config.yaml -n mydlqcloud

三、Mysql 数据存储

Kubernetes 部署的应用一般都是无状态应用,部署后下次重启很可能会漂移到不同节点上,所以不能使用节点上的本地存储,而是徐亚网络存储对应用数据持久化,PV 和 PVC 是 Kubernetes 用于与储空关联的资源,可与不同的存储驱动建立连接,存储应用数据,所以接下来我们要创建 Kubernetes PV、PVC 资源。

创建 PV、PVC 绑定 Mysql 存储空间

PV 支持多种存储驱动,不同存储驱动的 PV 配置方式是不同的,需要根据你的存储系统来配置 PV 参数。这里用的是 NFS 存储(共享网络文件存储系统),可以按照以下方式进行配置:

mysql-storage.yaml

  1. ## PV
  2. apiVersion: v1
  3. kind: PersistentVolume
  4. metadata:
  5. name: mysql
  6. labels:
  7. app: mysql #设置 pv 的 label 标签
  8. spec:
  9. capacity:
  10. storage: 50Gi #设置 pv 存储资源大小
  11. accessModes:
  12. - ReadWriteOnce
  13. mountOptions:
  14. - hard
  15. - nfsvers=4.1
  16. nfs: #指定使用 NFS 存储驱动
  17. server: 192.168.2.11 #指定 NFS 服务器 IP 地址
  18. path: /nfs/mysql #指定 NFS 共享目录的位置,且需提前在该目录中创建 mysql 目录
  19. persistentVolumeReclaimPolicy: Retain
  20. ---
  21. ## PVC
  22. kind: PersistentVolumeClaim
  23. apiVersion: v1
  24. metadata:
  25. name: mysql
  26. spec:
  27. resources:
  28. requests:
  29. storage: 50Gi #设置 pvc 存储资源大小
  30. accessModes:
  31. - ReadWriteOnce
  32. selector:
  33. matchLabels:
  34. app: mysql #根据 Label 选择对应 PV

通过 Kubectl 工具部署 PV、PVC

通过 kubectl 工具部署 Kubernetes PV、PVC 资源,命令如下:

  • -n:指定部署应用的 Namespace 命名空间。

    $ kubectl create -f mysql-storage.yaml -n mydlqcloud

四、Kubernetes 部署 Mysql

创建 Deployment 部署 Mysql

创建用于 Kubernetes Deployment 来配置部署 Mysql 的参数,需要配置 Mysql 的镜像地址、名称、版本号,还要配置其 CPU 与 Memory 资源的占用,通过环境变量配置 Mysql 的 root 用户默认密码,配置探针监测应用可用性,配置 Volume 挂载之前创建的 PV、PVC、ConfigMap 资源等等,内容如下:

mysql-deploy.yaml

  1. ## Service
  2. apiVersion: v1
  3. kind: Service
  4. metadata:
  5. name: mysql
  6. labels:
  7. app: mysql
  8. spec:
  9. type: NodePort
  10. ports:
  11. - name: mysql
  12. port: 3306
  13. targetPort: 3306
  14. nodePort: 30336
  15. selector:
  16. app: mysql
  17. ---
  18. ## Deployment
  19. apiVersion: apps/v1
  20. kind: Deployment
  21. metadata:
  22. name: mysql
  23. labels:
  24. app: mysql
  25. spec:
  26. replicas: 1
  27. selector:
  28. matchLabels:
  29. app: mysql
  30. template:
  31. metadata:
  32. labels:
  33. app: mysql
  34. spec:
  35. containers:
  36. - name: mysql
  37. image: mysql:8.0.19
  38. ports:
  39. - containerPort: 3306
  40. env:
  41. - name: MYSQL_ROOT_PASSWORD ## 配置Root用户默认密码
  42. value: "123456"
  43. resources:
  44. limits:
  45. cpu: 2000m
  46. memory: 512Mi
  47. requests:
  48. cpu: 2000m
  49. memory: 512Mi
  50. livenessProbe:
  51. initialDelaySeconds: 30
  52. periodSeconds: 10
  53. timeoutSeconds: 5
  54. successThreshold: 1
  55. failureThreshold: 3
  56. exec:
  57. command: ["mysqladmin", "-uroot", "-p${MYSQL_ROOT_PASSWORD}", "ping"]
  58. readinessProbe:
  59. initialDelaySeconds: 10
  60. periodSeconds: 10
  61. timeoutSeconds: 5
  62. successThreshold: 1
  63. failureThreshold: 3
  64. exec:
  65. command: ["mysqladmin", "-uroot", "-p${MYSQL_ROOT_PASSWORD}", "ping"]
  66. volumeMounts:
  67. - name: data
  68. mountPath: /var/lib/mysql
  69. - name: config
  70. mountPath: /etc/mysql/conf.d/my.cnf
  71. subPath: my.cnf
  72. - name: localtime
  73. readOnly: true
  74. mountPath: /etc/localtime
  75. volumes:
  76. - name: data
  77. persistentVolumeClaim:
  78. claimName: mysql
  79. - name: config
  80. configMap:
  81. name: mysql-config
  82. - name: localtime
  83. hostPath:
  84. type: File
  85. path: /etc/localtime

参数简介:

  • ports: 配置镜像映射端口。

  • env: 镜像环境变量配置,其中 MYSQL_ROOT_PASSWORD 是 Mysql 镜像用于配置 root 用户默认密码变量。

  • resources: 配置 CPU、Memory 资源限制,可以通过配置该值来配置 Pod 的 QoS 级别。

  • livenessProbe: 配置存活探针,定时检测 Mysql 应用运行状态,如果检测到 Mysql 挂掉将进行重启操作。

  • readinessProbe: 配置就绪探针,定时检测 Mysql 应用启动状态,如果启动成功将允许流量涌入,启动失败将进行重启操作。

  • command: 探针执行探测时执行的探测命令。

  • volumeMounts: 存储卷挂载配置,用于镜像内存储的挂载配置,与 volumes 中对于的 name 进行绑定。

  • volumes: 存储卷配置,可配置使用 pvc、hostPath、emptyDir、nfs 等存储,需要配置 name 值与 VolumeMounts 进行绑定。

通过 Kubectl 工具部署 PV、PVC

通过 kubectl 工具部署 Deployment 来创建 Msyql,命令如下:

  • -n:指定部署应用的 Namespace 命名空间。

    $ kubectl create -f mysql-deploy.yaml -n mydlqcloud

五、测试 Mysql 是否能够正常使用

接下来启动个 Mysql 镜像,使用里面的 Msyql 客户端工具,对部署在 Kubernetes 中的 Mysql 进行连接,测试是否能够正常可用。

这里本人 Kubernetes 集群地址为 192.168.2.11 部署的 Mysql 的 NodePort 端口号为 30336,所以这里启动一个对应版本的 Mysql 镜像,然后进入镜像内部,输入 Mysql 登录命令进行测试。

运行一个 mysql 镜像,并且进入镜像内部:

  1. $ docker run -it mysql:8.0.19 /bin/bash

在镜像内部命令行中输入 mysql 登录命令,测试是否能够正常登录:

  1. $ mysql -h 192.168.2.11 -P 30336 --user=root --password=123456

显示如下:

  1. Welcome to the MySQL monitor. Commands end with ; or \g.
  2. Your MySQL connection id is 592
  3. Server version: 8.0.19 MySQL Community Server - GPL
  4. Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
  5. Oracle is a registered trademark of Oracle Corporation and/or its
  6. affiliates. Other names may be trademarks of their respective
  7. owners.
  8. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
  9. mysql>

可以看到,已经成功连接数据库,说明数据库能正常使用。整理了一份328页MySQ学习笔记

示例地址:



原文链接:http://www.cnblogs.com/bainannan/p/14359403.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号