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

相关文章

闲置电脑也能活出第二春?鲁大师AiNAS让你动动手指就能轻松部署

对于大多数人而言,在这个“数据爆炸”的时代或多或少都遇到过存储告急的情况,这使得“存储焦虑”不再是个别现象,而将会是随着软件的不断臃肿而越来越普遍的情况。从不少手机厂商都开始将存储上限提升至1TB可以见得,我们似乎正处在互联网信息飞速增长的阶段,对于存储的需求也将会不断扩大。对于苹果用户而言,这一问题愈发严峻,毕竟512GB和1TB版本的iPhone可不是人人都消费得起的,因此成熟的外置存储方案开

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置

MySQL数据库宕机,启动不起来,教你一招搞定!

作者介绍:老苏,10余年DBA工作运维经验,擅长Oracle、MySQL、PG、Mongodb数据库运维(如安装迁移,性能优化、故障应急处理等)公众号:老苏畅谈运维欢迎关注本人公众号,更多精彩与您分享。 MySQL数据库宕机,数据页损坏问题,启动不起来,该如何排查和解决,本文将为你说明具体的排查过程。 查看MySQL error日志 查看 MySQL error日志,排查哪个表(表空间

阿里开源语音识别SenseVoiceWindows环境部署

SenseVoice介绍 SenseVoice 专注于高精度多语言语音识别、情感辨识和音频事件检测多语言识别: 采用超过 40 万小时数据训练,支持超过 50 种语言,识别效果上优于 Whisper 模型。富文本识别:具备优秀的情感识别,能够在测试数据上达到和超过目前最佳情感识别模型的效果。支持声音事件检测能力,支持音乐、掌声、笑声、哭声、咳嗽、喷嚏等多种常见人机交互事件进行检测。高效推

MySQL高性能优化规范

前言:      笔者最近上班途中突然想丰富下自己的数据库优化技能。于是在查阅了多篇文章后,总结出了这篇! 数据库命令规范 所有数据库对象名称必须使用小写字母并用下划线分割 所有数据库对象名称禁止使用mysql保留关键字(如果表名中包含关键字查询时,需要将其用单引号括起来) 数据库对象的命名要能做到见名识意,并且最后不要超过32个字符 临时库表必须以tmp_为前缀并以日期为后缀,备份

Kubernetes PodSecurityPolicy:PSP能实现的5种主要安全策略

Kubernetes PodSecurityPolicy:PSP能实现的5种主要安全策略 1. 特权模式限制2. 宿主机资源隔离3. 用户和组管理4. 权限提升控制5. SELinux配置 💖The Begin💖点点关注,收藏不迷路💖 Kubernetes的PodSecurityPolicy(PSP)是一个关键的安全特性,它在Pod创建之前实施安全策略,确保P

[MySQL表的增删改查-进阶]

🌈个人主页:努力学编程’ ⛅个人推荐: c语言从初阶到进阶 JavaEE详解 数据结构 ⚡学好数据结构,刷题刻不容缓:点击一起刷题 🌙心灵鸡汤:总有人要赢,为什么不能是我呢 💻💻💻数据库约束 🔭🔭🔭约束类型 not null: 指示某列不能存储 NULL 值unique: 保证某列的每行必须有唯一的值default: 规定没有给列赋值时的默认值.primary key:

K8S(Kubernetes)开源的容器编排平台安装步骤详解

K8S(Kubernetes)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。以下是K8S容器编排平台的安装步骤、使用方式及特点的概述: 安装步骤: 安装Docker:K8S需要基于Docker来运行容器化应用程序。首先要在所有节点上安装Docker引擎。 安装Kubernetes Master:在集群中选择一台主机作为Master节点,安装K8S的控制平面组件,如AP

什么是Kubernetes PodSecurityPolicy?

@TOC 💖The Begin💖点点关注,收藏不迷路💖 1、什么是PodSecurityPolicy? PodSecurityPolicy(PSP)是Kubernetes中的一个安全特性,用于在Pod创建前进行安全策略检查,限制Pod的资源使用、运行权限等,提升集群安全性。 2、为什么需要它? 默认情况下,Kubernetes允许用户自由创建Pod,可能带来安全风险。