k8s部署mysql5.7单机版并初始化sql,NodePort/ClusterIP/Headless和Ingress发布
注意
==可行方式 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发布相关推荐
- Docker实践(五)docker部署MySQL5.7
目录 1,安装 2,选择镜像 3,下载镜像. 4,准备部署 5,创建并启动 6,测试 使用docker容器部署mysql5.7 1,安装 没有docker,首先安装docker,参照Docker简单实 ...
- 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分钟内快速部署MySQL5.6.35数据库实践
3分钟内快速部署MySQL5.6.35数据库实践 1.下载软件 wget -q http://mirrors.sohu.com/mysql/MySQL-5.6/mysql-5.6.35-linux-g ...
- mysql5.7.23权限问题_部署MySQL5.7时的权限问题
本周部署MySQL5.7的时候遇到这样的问题,在初始化的时候,总是失败,并且报错: 2019-01-09T09:47:13.957685Z 0 [ERROR] InnoDB: Operating sy ...
- K8S部署工具:KubeOperator集群部署
K8S部署工具:KubeOperator集群部署 集群信息⚓︎ 项目: 选择集群所属项目 供应商: 支持裸金属(手动模式)和部署计划(自动模式) 版本: 支持版本管理中最新的两个 Kubernetes ...
- K8S部署工具:KubeOperator集群规划-自动模式
K8S部署工具:KubeOperator集群规划-自动模式 KubeOperator 支持两种 Kubernetes 集群部署方式,一种是自动模式,另外一种是手动模式,我们推荐使用自动模式.在自动模式 ...
- docker 部署rabbitmq,k8s部署rabbitmq集群,跟踪和监控rabbitmq
全栈工程师开发手册 (作者:栾鹏) 架构系列文章 rabbit原理和架构可以参考https://blog.csdn.net/luanpeng825485697/article/details/8208 ...
- 动手| 一个人脸识别的K8s部署实践
Kubernetes含金量最高CKA首个包过培训班文末报名啦! 伙计们,请搬好小板凳坐好,下面将是一段漫长的旅程,期望你能够乐在其中. -- Hannibal 简介 伙计们,请搬好小板凳坐好,下面将是 ...
- 阿里云后台部署全过程-3-mysql、supervisor初始化
本文已收录至我的个人网站:阿里云后台部署全过程-3-mysql.supervisor初始化 mysql是我用的关系数据库,是主流数据库之一. supervisor是一个进程管理工具,.py后缀的Pyt ...
最新文章
- 修改注释里的作者名字
- bootstrap中点击左边展开
- “让Keras更酷一些!”:层中层与mask
- gdt描述_GDT(Global Descriptor Table)全局描述符表
- Java 工具包收藏
- JavaScript学习之ES6学习之Promise
- 人脸识别FAR值重新认识
- SQL Server 自定义字符串分割函数
- wildfly ejb开发环境搭建(一):wildfly安装及数据源配置
- k近邻算法的原理、示例与分析
- TI KeyStone C66x开发板的Xilinx FPGA下载器接口、LED指示灯
- 如何在iis中设置可以在网页上面直接下载安卓app并自动安装
- aircrack-ng 介绍、功能测试及部分源码分析
- hugo使用katex
- DiskPart 常用操作【Windows】
- 【从零开始玩量化17】如何python+QMT完成自动化交易?(全网最详细入门教程)
- 终于找到一个可以用的TexturePacker 破解版,不容易啊。
- 【AR】开始使用Vuforia进行Android开发(3)
- STM32野火教程学习笔记
- 1.拖延症早睡早起篇
热门文章
- Python多线程爬虫教你如何快速下载表情包,告别斗图斗不赢的烦恼!
- 80+开源数据集资源汇总(包含目标检测、医学影像、关键点检测、工业检测等方向)
- js 中 Maximum call stack size exceeded
- Jquery-ui的Resizable属性详解
- java——OOAD
- 超性能服务器,绝地求生国服超性能服务器是什么_超性能服务器介绍
- Cisco Unified Computing System (UCS) 数据中心第二部分即将开始
- mysql tpch_MySQL tpch测试工具简要手册
- 一次局域网***全过程
- 地下饮用水除硝酸盐技术、生活用水提质增效