本文主要是介绍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
文章目录
- @[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的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!