注意

==可行方式 mysql-nodeport-ingress.yaml ==

初始化sql

  • 只有容器首次启动时才会执行/docker-entrypoint-initdb.d下的文件
  • 若非首次启动,删除挂在的data目录,再新建data

mysql配置文件my.cnf

  • 使用configmap创建my.cnf文件,使用volumeMounts挂载绑定了configmap的volume

volumeMounts挂载绑定了configmap的volume

  • subPath方式使用configmap,cm的内容更新不会同步到挂在点
  • 不使用subPath方式,更新ConfigMap后,volumeMounts挂载的Volume,大约10s左右更新

selector label

  • selector使用labels不使用name
  • svc和rc的selector都是选择pod的label,svc不选择rc的label
  • ingress-nginx规则基于service.name,不基于label
#检查svc端点
kubectl get endpoints svc-mysql7 -n xcrj-dev#查看ingress-controller中配置的规则
kubectl get pod -n ingress-nginx
kubectl exec -it ingress-nginx-controller-87f56f98f-ktvrf -n ingress-nginx -- /bin/bash
cd /etc/nginx
cat nginx.conf | grep mysql

nfs-server

sudo su -
mkdir -p /root/data/mysql7/init
mkdir -p /root/data/mysql7/sql
mkdir -p /root/data/mysql7/data
#cd /root/data/mysql7
#chmod 777 init
#chmod 777 sql
#chmod 777 data
#加入的内容见下
vim /etc/exports
service nfs-kernel-server restart

/etc/exports 末尾加入内容

/root/data/mysql7 *(insecure,rw,async,no_root_squash)

初始化sql

下面的sql文件需要放入nfs-server的/root/data/mysql7/init目录下

roleme.sql

DROP DATABASE IF EXISTS `roleme`;
CREATE DATABASE IF NOT EXISTS `roleme` DEFAULT CHARACTER SET utf8mb4 DEFAULT COLLATE utf8mb4_general_ci;
use `roleme`;SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;-- ----------------------------
-- Table structure for roles
-- ----------------------------
DROP TABLE IF EXISTS `roles`;
CREATE TABLE `roles`  (`id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键',`name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '名称',PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;-- ----------------------------
-- Records of roles
-- ----------------------------
INSERT INTO `roles` VALUES (1, 'admin');
INSERT INTO `roles` VALUES (2, 'common');
INSERT INTO `roles` VALUES (3, 'visitor');SET FOREIGN_KEY_CHECKS = 1;

userme.sql

/*Navicat Premium Data TransferSource Server         : ddddSource Server Type    : MySQLSource Server Version : 50741Source Host           : localhost:49157Source Schema         : usermeTarget Server Type    : MySQLTarget Server Version : 50741File Encoding         : 65001Date: 24/02/2023 23:14:37
*/
DROP DATABASE IF EXISTS `userme`;
CREATE DATABASE IF NOT EXISTS `userme` DEFAULT CHARACTER SET utf8mb4 DEFAULT COLLATE utf8mb4_general_ci;
use `userme`;SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;-- ----------------------------
-- Table structure for users
-- ----------------------------
DROP TABLE IF EXISTS `users`;
CREATE TABLE `users`  (`id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键',`username` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '用户名',`password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '密码',PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin ROW_FORMAT = Dynamic;-- ----------------------------
-- Records of users
-- ----------------------------
INSERT INTO `users` VALUES (1, 'xcrj1', 'pwd1');
INSERT INTO `users` VALUES (2, 'xcrj2', 'pwd2');
INSERT INTO `users` VALUES (3, 'xcrj3', 'pwd3');SET FOREIGN_KEY_CHECKS = 1;

mysql-nodeport-ingress.yaml

#将mysql-nodeport-ingress.yaml文件放入master节点目录
kubectl apply -f mysql-nodeport-ingress.yaml
#修改windows下的 C:\Windows\System32\drivers\etc\hosts 文件
#加入 192.168.66.20 mysql.xcrj.com
#使用 命令行 连接测试 IP方式 域名方式
mysql -h192.168.66.20 -P32762 -uroot -p
mysql -hmysql.xcrj.com -P32762 -uroot -p
#使用 navicat 连接测试 IP方式 域名方式

mysql-nodeport-ingress.yaml

---
apiVersion: v1
kind: Namespace
metadata:name: xcrj-dev
---
apiVersion: v1
kind: PersistentVolume
metadata:namespace: xcrj-devname: pv-mysql7
spec:capacity:storage: 2Gi accessModes:- ReadWriteMany persistentVolumeReclaimPolicy: Retain storageClassName: nfsnfs: path: /root/data/mysql7server: 192.168.66.30
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:namespace: xcrj-devname: pvc-mysql7
spec:accessModes:- ReadWriteManystorageClassName: nfs  resources:requests:storage: 2Gi
---
kind: ConfigMap
apiVersion: v1
metadata:namespace: xcrj-devname: cm-mysql7
data:my.cnf: |[client]default-character-set=utf8mb4[mysql]default-character-set=utf8mb4[mysqld]pid-file        = /var/run/mysqld/mysqld.pidsocket          = /var/run/mysqld/mysqld.sockdatadir         = /var/lib/mysqlcharacter-set-server = utf8mb4collation-server = utf8mb4_unicode_ciinit_connect='SET NAMES utf8mb4'skip-character-set-client-handshake = true#log-bin=bin-logmax_connections=5000default-time-zone='+8:00'
---
apiVersion: v1
kind: ReplicationController
metadata:namespace: xcrj-devname: rc-mysql7
spec:replicas: 1selector:app: lmysql7 #选择pod的labeltemplate:metadata:name: mysql7labels:app: lmysql7spec:containers:- name: mysql7image: mysql:5.7imagePullPolicy: IfNotPresentports:- containerPort: 3306env:- name: MYSQL_ROOT_PASSWORDvalue: xcrj_mysql_pwdvolumeMounts: # 1个pvc下 n个子路径- name: data-mysqlsubPath: datamountPath: /var/lib/mysql- name: data-mysqlsubPath: sqlmountPath: /sql- name: data-mysqlsubPath: initmountPath: /docker-entrypoint-initdb.d #docker容器首次执行时会运行这个目录下的所有sql文件- name: cnf-mysql #volume使用configmap#subPath: my.cnf #subPath方式使用configmap,cm的内容更新不会同步到挂在点#mountPath: /etc/mysql/conf.d/my.cnfmountPath: /etc/mysql/conf.d #conf.d是目录,不使用subPath方式,更新ConfigMap后,volumeMounts挂载的Volume,大约10s左右更新volumes:- name: data-mysqlpersistentVolumeClaim:claimName: pvc-mysql7 # pvc名称- name: cnf-mysqlconfigMap:name: cm-mysql7items:- key: my.cnf #自定义keypath: my.cnf #configMap下文件名
---
apiVersion: v1
kind: Service
metadata:namespace: xcrj-devname: svc-mysql7
spec:type: NodePortselector:app: lmysql7 #根据labels选择,注意 svc选择pod的label不是rc的labelports: - name: port-tcpprotocol: TCP #默认TCPport: 3306 #k8s网络内部端口映射targetPort: 3306 #需要暴露的目标端口nodePort: 32762 #有效范围30000-32767
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:namespace: xcrj-devname: ingress-mysql7
spec:rules:- host: mysql.xcrj.comhttp:paths:- path: / pathType: Prefixbackend:service:name: svc-mysql7port:number: 32762 #代理到nodePort

mysql-clusterIp-ingress.yaml

ReplicationController 引用clusterIp svc

todo(ingress-nginx-controller 32676 mysql.nacos.com 无法正常访问)
原因:ingress-nginx-controller 支持 headless svc http转发,支持nodeport svc tcp转发,不支持 headless svc tcp转发,不支持clusterIp svc tcp转发

---
apiVersion: v1
kind: Namespace
metadata:name: xcrj-dev
---
apiVersion: v1
kind: PersistentVolume
metadata:namespace: xcrj-devname: pv-mysql7
spec:capacity:storage: 2Gi accessModes:- ReadWriteMany persistentVolumeReclaimPolicy: Retain storageClassName: nfsnfs: path: /root/data/mysql7server: 192.168.66.30
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:namespace: xcrj-devname: pvc-mysql7
spec:accessModes:- ReadWriteManystorageClassName: nfs  resources:requests:storage: 2Gi
---
kind: ConfigMap
apiVersion: v1
metadata:namespace: xcrj-devname: cm-mysql7
data:my.cnf: |[client]default-character-set=utf8mb4[mysql]default-character-set=utf8mb4[mysqld]pid-file        = /var/run/mysqld/mysqld.pidsocket          = /var/run/mysqld/mysqld.sockdatadir         = /var/lib/mysqlcharacter-set-server = utf8mb4collation-server = utf8mb4_unicode_ciinit_connect='SET NAMES utf8mb4'skip-character-set-client-handshake = true#log-bin=bin-logmax_connections=5000default-time-zone='+8:00'
---
apiVersion: v1
kind: ReplicationController
metadata:namespace: xcrj-devname: rc-mysql7
spec:replicas: 1selector:app: lmysql7 #选择pod的labeltemplate:metadata:name: mysql7labels:app: lmysql7spec:containers:- name: mysql7image: mysql:5.7imagePullPolicy: IfNotPresentports:- containerPort: 3306env:- name: MYSQL_ROOT_PASSWORDvalue: xcrj_mysql_pwdvolumeMounts: # 1个pvc下 n个子路径- name: data-mysqlsubPath: datamountPath: /var/lib/mysql- name: data-mysqlsubPath: sqlmountPath: /sql- name: data-mysqlsubPath: initmountPath: /docker-entrypoint-initdb.d #docker容器首次执行时会运行这个目录下的所有sql文件- name: cnf-mysql #volume使用configmap#subPath: my.cnf #subPath方式使用configmap,cm的内容更新不会同步到挂在点#mountPath: /etc/mysql/conf.d/my.cnfmountPath: /etc/mysql/conf.d #conf.d是目录,不使用subPath方式,更新ConfigMap后,volumeMounts挂载的Volume,大约10s左右更新volumes:- name: data-mysqlpersistentVolumeClaim:claimName: pvc-mysql7 # pvc名称- name: cnf-mysqlconfigMap:name: cm-mysql7items:- key: my.cnf #自定义keypath: my.cnf #configMap下文件名
---
apiVersion: v1
kind: Service
metadata:namespace: xcrj-devname: svc-mysql7
spec:type: ClusterIP #默认ClusterIPselector:app: lmysql7 #根据labels选择,注意 svc选择pod的label不是rc的labelports: - name: port-tcpprotocol: TCP #默认TCPport: 32763 #内部端口映射targetPort: 3306 #目标端口
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:namespace: xcrj-devname: ingress-mysql7
spec:rules:- host: mysql.xcrj.comhttp:paths:- path: / pathType: Prefixbackend:service:name: svc-mysql7port:number: 32763

mysql-headless-ingress.yaml

StatefulSet 引用headless svc

todo(ingress-nginx-controller 32676 mysql.nacos.com 无法正常访问)
原因:ingress-nginx-controller 支持 headless svc http转发,支持nodeport svc tcp转发,不支持 headless svc tcp转发,不支持clusterIp svc tcp转发

---
apiVersion: v1
kind: Namespace
metadata:name: xcrj-dev
---
apiVersion: v1
kind: PersistentVolume
metadata:namespace: xcrj-devname: pv-mysql7
spec:capacity:storage: 2Gi accessModes:- ReadWriteMany persistentVolumeReclaimPolicy: Retain storageClassName: nfsnfs: path: /root/data/mysql7server: 192.168.66.30
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:namespace: xcrj-devname: pvc-mysql7
spec:accessModes:- ReadWriteManystorageClassName: nfs  resources:requests:storage: 2Gi
---
kind: ConfigMap
apiVersion: v1
metadata:namespace: xcrj-devname: cm-mysql7
data:my.cnf: |[client]default-character-set=utf8mb4[mysql]default-character-set=utf8mb4[mysqld]pid-file        = /var/run/mysqld/mysqld.pidsocket          = /var/run/mysqld/mysqld.sockdatadir         = /var/lib/mysqlcharacter-set-server = utf8mb4collation-server = utf8mb4_unicode_ciinit_connect='SET NAMES utf8mb4'skip-character-set-client-handshake = true#log-bin=bin-logmax_connections=5000default-time-zone='+8:00'
---
apiVersion: v1
kind: Service
metadata:namespace: xcrj-devname: svc-mysql7annotations:service.alpha.kubernetes.io/tolerate-unready-endpoints: "true"
spec:selector:app: lmysql7clusterIP: Noneports:- port: 3306protocol: TCPname: tcp-mysqltargetPort: 3306
---
apiVersion: apps/v1
kind: StatefulSet
metadata:namespace: xcrj-devname: ss-mysql7
spec:serviceName: svc-mysql7 #statefulset引用headless svcreplicas: 1selector:matchLabels: app: lmysql7 #选择pod的labeltemplate:metadata:name: mysql7labels:app: lmysql7spec:containers:- name: mysql7image: mysql:5.7imagePullPolicy: IfNotPresentports:- containerPort: 3306env:- name: MYSQL_ROOT_PASSWORDvalue: xcrj_mysql_pwdvolumeMounts: # 1个pvc下 n个子路径- name: data-mysqlsubPath: datamountPath: /var/lib/mysql- name: data-mysqlsubPath: sqlmountPath: /sql- name: data-mysqlsubPath: initmountPath: /docker-entrypoint-initdb.d #docker容器首次执行时会运行这个目录下的所有sql文件- name: cnf-mysql #volume使用configmap#subPath: my.cnf #subPath方式使用configmap,cm的内容更新不会同步到挂在点#mountPath: /etc/mysql/conf.d/my.cnfmountPath: /etc/mysql/conf.d #conf.d是目录,不使用subPath方式,更新ConfigMap后,volumeMounts挂载的Volume,大约10s左右更新volumes:- name: data-mysqlpersistentVolumeClaim:claimName: pvc-mysql7 # pvc名称- name: cnf-mysqlconfigMap:name: cm-mysql7items:- key: my.cnf #自定义keypath: my.cnf #configMap下文件名
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:namespace: xcrj-devname: ingress-mysql7annotations:kubernetes.io/ingress.class: nginx
spec:rules: - host: mysql.xcrj.comhttp:paths:- path: /pathType: Prefixbackend:service:name: svc-mysql7port:number: 3306

k8s部署mysql5.7单机版并初始化sql,NodePort/ClusterIP/Headless和Ingress发布相关推荐

  1. Docker实践(五)docker部署MySQL5.7

    目录 1,安装 2,选择镜像 3,下载镜像. 4,准备部署 5,创建并启动 6,测试 使用docker容器部署mysql5.7 1,安装 没有docker,首先安装docker,参照Docker简单实 ...

  2. k8s部署前后端分离项目

    文章目录 1. 项目准备 1.1 后端项目 1.1.1 数据库表 1.1.2 SpringBoot项目 1.2 前端项目 1.2.1 页面 1.2.2 nginx代理 1.2.3 页面效果 2. Do ...

  3. 3分钟内快速部署MySQL5.6.35数据库实践

    3分钟内快速部署MySQL5.6.35数据库实践 1.下载软件 wget -q http://mirrors.sohu.com/mysql/MySQL-5.6/mysql-5.6.35-linux-g ...

  4. mysql5.7.23权限问题_部署MySQL5.7时的权限问题

    本周部署MySQL5.7的时候遇到这样的问题,在初始化的时候,总是失败,并且报错: 2019-01-09T09:47:13.957685Z 0 [ERROR] InnoDB: Operating sy ...

  5. K8S部署工具:KubeOperator集群部署

    K8S部署工具:KubeOperator集群部署 集群信息⚓︎ 项目: 选择集群所属项目 供应商: 支持裸金属(手动模式)和部署计划(自动模式) 版本: 支持版本管理中最新的两个 Kubernetes ...

  6. K8S部署工具:KubeOperator集群规划-自动模式

    K8S部署工具:KubeOperator集群规划-自动模式 KubeOperator 支持两种 Kubernetes 集群部署方式,一种是自动模式,另外一种是手动模式,我们推荐使用自动模式.在自动模式 ...

  7. docker 部署rabbitmq,k8s部署rabbitmq集群,跟踪和监控rabbitmq

    全栈工程师开发手册 (作者:栾鹏) 架构系列文章 rabbit原理和架构可以参考https://blog.csdn.net/luanpeng825485697/article/details/8208 ...

  8. 动手| 一个人脸识别的K8s部署实践

    Kubernetes含金量最高CKA首个包过培训班文末报名啦! 伙计们,请搬好小板凳坐好,下面将是一段漫长的旅程,期望你能够乐在其中. -- Hannibal 简介 伙计们,请搬好小板凳坐好,下面将是 ...

  9. 阿里云后台部署全过程-3-mysql、supervisor初始化

    本文已收录至我的个人网站:阿里云后台部署全过程-3-mysql.supervisor初始化 mysql是我用的关系数据库,是主流数据库之一. supervisor是一个进程管理工具,.py后缀的Pyt ...

最新文章

  1. 修改注释里的作者名字
  2. bootstrap中点击左边展开
  3. “让Keras更酷一些!”:层中层与mask
  4. gdt描述_GDT(Global Descriptor Table)全局描述符表
  5. Java 工具包收藏
  6. JavaScript学习之ES6学习之Promise
  7. 人脸识别FAR值重新认识
  8. SQL Server 自定义字符串分割函数
  9. wildfly ejb开发环境搭建(一):wildfly安装及数据源配置
  10. k近邻算法的原理、示例与分析
  11. TI KeyStone C66x开发板的Xilinx FPGA下载器接口、LED指示灯
  12. 如何在iis中设置可以在网页上面直接下载安卓app并自动安装
  13. aircrack-ng 介绍、功能测试及部分源码分析
  14. hugo使用katex
  15. DiskPart 常用操作【Windows】
  16. 【从零开始玩量化17】如何python+QMT完成自动化交易?(全网最详细入门教程)
  17. 终于找到一个可以用的TexturePacker 破解版,不容易啊。
  18. 【AR】开始使用Vuforia进行Android开发(3)
  19. STM32野火教程学习笔记
  20. 1.拖延症早睡早起篇

热门文章

  1. Python多线程爬虫教你如何快速下载表情包,告别斗图斗不赢的烦恼!
  2. 80+开源数据集资源汇总(包含目标检测、医学影像、关键点检测、工业检测等方向)
  3. js 中 Maximum call stack size exceeded
  4. Jquery-ui的Resizable属性详解
  5. java——OOAD
  6. 超性能服务器,绝地求生国服超性能服务器是什么_超性能服务器介绍
  7. Cisco Unified Computing System (UCS) 数据中心第二部分即将开始
  8. mysql tpch_MySQL tpch测试工具简要手册
  9. 一次局域网***全过程
  10. 地下饮用水除硝酸盐技术、生活用水提质增效