kubernetes-v1.23.3 部署 MySQL-5.7.31

2023-10-03 16:12

本文主要是介绍kubernetes-v1.23.3 部署 MySQL-5.7.31,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • @[toc]
    • 部署 MySQL
      • 配置 mysql configmap
      • 配置 mysql svc
      • 配置 mysql deployment
      • 配置 mysql cronjob
    • 配置 mysql-web
      • 配置 mysql-web svc
      • 配置 mysql-web deployment

部署 MySQL

配置 mysql configmap

---
apiVersion: v1
data:mysqld.cnf: |-[mysqld]pid-file        = /var/run/mysqld/mysqld.pidsocket          = /var/run/mysqld/mysqld.sockdatadir         = /var/lib/mysqlbind-address   = 0.0.0.0server_id = 1918default-time-zone='+08:00'# Disabling symbolic-links is recommended to prevent assorted security riskssymbolic-links=0max_connections=1024default_storage_engine=innodbskip_external_lockinglower_case_table_names=1skip_host_cacheskip_name_resolvecharacter_set_server=utf8mb4max_allowed_packet = 12Msql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'# ---------- binlog & errorlog & slowlog ---------- #log_bin = mysql-binbinlog_format = ROWmax_binlog_size = 100mbinlog_cache_size = 4mmax_binlog_cache_size = 512mexpire_logs_days = 7log-error      = /var/lib/mysql/error.logslow-query-log = onslow_query_log_file = /var/lib/mysql/slow.loglong_query_time = 1[client]default-character-set=utf8mb4
kind: ConfigMap
metadata:annotations:labels:app: mysqlname: mysql-cmnamespace: bigdata

配置 mysql svc

---
apiVersion: v1
kind: Service
metadata:annotations:labels:app: mysqlname: mysql-svcnamespace: bigdata
spec:ports:- name: mysqlport: 3306protocol: TCPtargetPort: 3306selector:app: mysql

配置 mysql deployment

mysql 的数据目录使用的 hostpath 的方式,通过亲和性来绑定节点,需要提前给对应的节点打上 mysql= 这样的标签

kubectl label node <nodename> mysql=
---
apiVersion: apps/v1
kind: Deployment
metadata:annotations:labels:app: mysqlname: mysqlnamespace: bigdata
spec:replicas: 1selector:matchLabels:app: mysqltemplate:metadata:labels:app: mysqlspec:affinity:nodeAffinity:requiredDuringSchedulingIgnoredDuringExecution:nodeSelectorTerms:- matchExpressions:- key: mysqloperator: Existscontainers:- name: mysqlenv:- name: APP_NAMEvalue: mysql- name: NODE_NAMEvalueFrom:fieldRef:fieldPath: spec.nodeName- name: POD_NAMEvalueFrom:fieldRef:fieldPath: metadata.name- name: NAMESPACEvalueFrom:fieldRef:fieldPath: metadata.namespace- name: MYSQL_ROOT_USERvalue: root- name: MYSQL_ROOT_PASSWORDvalue: YWJjMTIzCg==- name: TZvalue: Asia/Shanghai- name: LANGvalue: en_US.UTF-8image: mysql:5.7.31imagePullPolicy: IfNotPresentlivenessProbe:exec:command:- /bin/bash- -c- mysql -u${MYSQL_ROOT_USER} -p${MYSQL_ROOT_PASSWORD} -e 'SELECT 1'initialDelaySeconds: 30periodSeconds: 30timeoutSeconds: 10ports:- containerPort: 3306name: mysqlprotocol: TCPreadinessProbe:exec:command:- /bin/bash- -c- mysql -u${MYSQL_ROOT_USER} -p${MYSQL_ROOT_PASSWORD} -e 'SELECT 1'initialDelaySeconds: 30periodSeconds: 30timeoutSeconds: 10volumeMounts:- mountPath: /var/lib/mysqlname: mysql-data-dir- mountPath: /etc/mysql/conf.d/name: mysql-configdnsPolicy: ClusterFirstrestartPolicy: AlwayssecurityContext: {}terminationGracePeriodSeconds: 10volumes:- name: mysql-data-dirhostPath:path: /data/k8s_data/mysqltype: DirectoryOrCreate- name: mysql-configconfigMap:name: mysql-cm

配置 mysql cronjob

  • 和 deployment 的一样,需要给节点打上 mysql-back= 的标签
  • 注意 schedule 的时间是和 controller-manager 组件的时区一样的,如果是 kubeadm 部署的,就要注意容器内的时间是不是和本地相差八小时
---
apiVersion: batch/v1
kind: CronJob
metadata:name: mysql-backupnamespace: bigdata
spec:schedule: "0 1 * * *"successfulJobsHistoryLimit: 3failedJobsHistoryLimit: 3jobTemplate:spec:template:spec:affinity:nodeAffinity:requiredDuringSchedulingIgnoredDuringExecution:nodeSelectorTerms:- matchExpressions:- key: mysql-backoperator: Existscontainers:- name: mysql-backupimagePullPolicy: IfNotPresentimage: mysql:5.7.31env:- name: MYSQL_ROOT_USERvalue: root- name: MYSQL_ROOT_PASSWORDvalue: YWJjMTIzCg==- name: MYSQL_HOSTvalue: mysql-svc.bigdata.svc.cluster.local- name: TZvalue: Asia/Shanghai- name: LANGvalue: en_US.UTF-8command:- /bin/sh- -c- |set -exmysqldump --host=${MYSQL_HOST} --user=${MYSQL_ROOT_USER} \--password=${MYSQL_ROOT_PASSWORD} \--routines --all-databases --single-transaction \> /mysql-backup/mysql-$(date +"%Y%m%dT%H_%M_%S").sql && find /mysql-backup/ -type f -mtime +3 -exec rm -rf {} \;volumeMounts:- name: mysql-backupmountPath: /mysql-backuprestartPolicy: OnFailurevolumes:- name: mysql-backuphostPath:path: /data/k8s_data/mysql-backtype: DirectoryOrCreate

配置 mysql-web

  • phpmyadmin-github
  • phpmyadmin-docker-github
  • 这个是 mysql 的图形化界面

配置 mysql-web svc

  • 如果有 ingress,可以配置成 clusterip 的模式
  • 如果没有 ingress,可以配置成 nodeport 的模式
  • 下面两个都配置了,可以各取所需
    • 下面的 nodeport 配置了 30003 端口,需要检查一下自己本地有没有被占用,也可以自己随意修改,端口范围值一般是 30000-32767,具体要看 apiserver 的配置
---
apiVersion: v1
kind: Service
metadata:namespace: bigdataname: phpmyadminlabels:app: phpmyadmin
spec:ports:- port: 80targetPort: 80protocol: TCPname: httpselector:app: phpmyadmin
---
apiVersion: v1
kind: Service
metadata:namespace: bigdataname: phpmyadmin-nplabels:app: phpmyadmin
spec:type: NodePortports:- port: 80targetPort: 80protocol: TCPname: http-npnodePort: 30003selector:app: phpmyadmin

配置 mysql-web deployment

  • 下面的 PMA_HOST 需要替换成自己的 mysql 地址
  • 下面的 PMA_PORT 需要替换成自己的 mysql 端口
---
apiVersion: apps/v1
kind: Deployment
metadata:annotations:labels:app: phpmyadminname: phpmyadminnamespace: bigdata
spec:replicas: 1selector:matchLabels:app: phpmyadmintemplate:metadata:annotations:labels:app: phpmyadminspec:containers:- name: phpmyadminimage: phpmyadmin/phpmyadmin:latestimagePullPolicy: IfNotPresentports:- containerPort: 80env:- name: PMA_HOSTvalue: mysql-svc.bigdata.svc.cluster.local- name: PMA_PORTvalue: "3306"

pod 变成 running 之后,就可以通过 ip 加 nodeport 的方式来访问了,使用 mysql 数据库内的用户名和密码登录,可以自己先提前在 mysql 数据库里面创建好

这篇关于kubernetes-v1.23.3 部署 MySQL-5.7.31的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/582

相关文章

通过Docker容器部署Python环境的全流程

《通过Docker容器部署Python环境的全流程》在现代化开发流程中,Docker因其轻量化、环境隔离和跨平台一致性的特性,已成为部署Python应用的标准工具,本文将详细演示如何通过Docker容... 目录引言一、docker与python的协同优势二、核心步骤详解三、进阶配置技巧四、生产环境最佳实践

Nginx部署HTTP/3的实现步骤

《Nginx部署HTTP/3的实现步骤》本文介绍了在Nginx中部署HTTP/3的详细步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录前提条件第一步:安装必要的依赖库第二步:获取并构建 BoringSSL第三步:获取 Nginx

MySQL的JDBC编程详解

《MySQL的JDBC编程详解》:本文主要介绍MySQL的JDBC编程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言一、前置知识1. 引入依赖2. 认识 url二、JDBC 操作流程1. JDBC 的写操作2. JDBC 的读操作总结前言本文介绍了mysq

Linux下MySQL数据库定时备份脚本与Crontab配置教学

《Linux下MySQL数据库定时备份脚本与Crontab配置教学》在生产环境中,数据库是核心资产之一,定期备份数据库可以有效防止意外数据丢失,本文将分享一份MySQL定时备份脚本,并讲解如何通过cr... 目录备份脚本详解脚本功能说明授权与可执行权限使用 Crontab 定时执行编辑 Crontab添加定

MySQL中On duplicate key update的实现示例

《MySQL中Onduplicatekeyupdate的实现示例》ONDUPLICATEKEYUPDATE是一种MySQL的语法,它在插入新数据时,如果遇到唯一键冲突,则会执行更新操作,而不是抛... 目录1/ ON DUPLICATE KEY UPDATE的简介2/ ON DUPLICATE KEY UP

MySQL分库分表的实践示例

《MySQL分库分表的实践示例》MySQL分库分表适用于数据量大或并发压力高的场景,核心技术包括水平/垂直分片和分库,需应对分布式事务、跨库查询等挑战,通过中间件和解决方案实现,最佳实践为合理策略、备... 目录一、分库分表的触发条件1.1 数据量阈值1.2 并发压力二、分库分表的核心技术模块2.1 水平分

Python与MySQL实现数据库实时同步的详细步骤

《Python与MySQL实现数据库实时同步的详细步骤》在日常开发中,数据同步是一项常见的需求,本篇文章将使用Python和MySQL来实现数据库实时同步,我们将围绕数据变更捕获、数据处理和数据写入这... 目录前言摘要概述:数据同步方案1. 基本思路2. mysql Binlog 简介实现步骤与代码示例1

redis-sentinel基础概念及部署流程

《redis-sentinel基础概念及部署流程》RedisSentinel是Redis的高可用解决方案,通过监控主从节点、自动故障转移、通知机制及配置提供,实现集群故障恢复与服务持续可用,核心组件包... 目录一. 引言二. 核心功能三. 核心组件四. 故障转移流程五. 服务部署六. sentinel部署

使用shardingsphere实现mysql数据库分片方式

《使用shardingsphere实现mysql数据库分片方式》本文介绍如何使用ShardingSphere-JDBC在SpringBoot中实现MySQL水平分库,涵盖分片策略、路由算法及零侵入配置... 目录一、ShardingSphere 简介1.1 对比1.2 核心概念1.3 Sharding-Sp

MySQL 表空却 ibd 文件过大的问题及解决方法

《MySQL表空却ibd文件过大的问题及解决方法》本文给大家介绍MySQL表空却ibd文件过大的问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考... 目录一、问题背景:表空却 “吃满” 磁盘的怪事二、问题复现:一步步编程还原异常场景1. 准备测试源表与数据