1. 准备工作
1.k8s的前置内容需要提前了解
2.mysql的初始化数据
3.docerk相关知识点需要了解
2. 部署步骤
- 初始化数据文件准备,准备了nacos的一张表sql脚本,需要修改一点点内容
文件名称:init-nacos.sql
部分内容显示:
主要创建表之前加了创建
CREATE DATABASE IF NOT EXISTS nacos DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_general_ci;
use nacos;
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for config_info
-- ----------------------------
DROP TABLE IF EXISTS `config_info`;
CREATE TABLE `config_info` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
`data_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'data_id',
`group_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,
`content` longtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'content',
`md5` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'md5',
`gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
`src_user` text CHARACTER SET utf8 COLLATE utf8_bin NULL COMMENT 'source user',
`src_ip` varchar(50) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'source ip',
`app_name` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,
`tenant_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT '' COMMENT '租户字段',
`c_desc` varchar(256) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,
`c_use` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,
`effect` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,
`type` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,
`c_schema` text CHARACTER SET utf8 COLLATE utf8_bin NULL,
`encrypted_data_key` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '秘钥',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE INDEX `uk_configinfo_datagrouptenant`(`data_id`, `group_id`, `tenant_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_bin COMMENT = 'config_info' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of config_info
-- ----------------------------
- Dockerfile编写
首次启动容器时,将创建具有指定名称的新数据库,并使用提供的配置变量进行初始化。此外,它将执行扩展名为 /docker-entrypoint-initdb.d 中的扩展名 .sh、.sql 和 .sql.gz 的文件。文件将按字母顺序执行。您可以通过将 SQL 转储挂载到该目录中来轻松填充 mysql 服务,并为包含贡献数据的自定义映像提供。默认情况下,SQL 文件将导入到 MYSQL_DATABASE 变量指定的数据库中。
FROM mysql:5.7
#mysql官方指定的初始化方法
COPY init-nacos.sql /docker-entrypoint-initdb.d/init-nacos.sql
RUN chmod 777 /docker-entrypoint-initdb.d/init-nacos.sql
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo 'Asia/Shanghai' > /etc/timezone
# 可以设置最大连接数等相关配置
RUN echo "max_connections=11000" >> /etc/mysql/mysql.conf.d/mysqld.cnf && echo "max_user_connections=10000" >> /etc/mysql/mysql.conf.d/mysqld.cnf
- 制作镜像
目前的制作镜像的文件结构
执行制作镜像命令:
docker build -t lyb/mysql:k8s .
- 创建k8s的namespace
kubectl create namespace lyb
- mysql的pod,service,deploy yaml编写
文件名称:k8s-mysql.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: mysql #为该Deployment设置key为app,value为mysql的标签
name: mysql-dm
namespace: lyb
spec:
replicas: 1 #副本数量
selector: #标签选择器,与上面的标签共同作用
matchLabels: #选择包含标签app:mysql的资源
app: mysql
template: #这是选择或创建的Pod的模板
metadata: #Pod的元数据
labels: #Pod的标签,上面的selector即选择包含标签app:mysql的Pod
app: mysql
spec: #期望Pod实现的功能(即在pod中部署)
# nodeName: yx188 # 指定节点运行,单机版k8s不需要指定
containers: #生成container,与docker中的container是同一种
- name: mysql-container
image: lyb/mysql:k8s #使用镜像mysql: 创建container,该container默认3306端口可访问
imagePullPolicy: Never #使用本地镜像
ports:
- containerPort: 3306 # 开启本容器的3306端口可访问
env:
- name: MYSQL_ROOT_PASSWORD
value: "123456"
volumeMounts: #挂载持久存储卷
- name: mysql-data #挂载设备的名字,与volumes[*].name 需要对应
mountPath: /var/lib/mysql #挂载到容器的某个路径下
volumes:
- name: mysql-data
nfs:
server: nfs 客户端的ip
path: nfs的共享文件夹
---
apiVersion: v1
kind: Service
metadata:
labels:
app: mysql
name: svc-mysql # 服务名称
namespace: lyb
spec:
ports:
- port: 3306 #写mysql本身端口
name: mysql
protocol: TCP
targetPort: 3306 # 容器mysql对外开放的端口 上面的dm已经指定了
nodePort: 31091 #外网访问的端口
selector:
app: mysql #选择包含标签app:mysql的资源
type: NodePort
- 创建mysql的pod,svc,deploy
kubectl apply -f k8s-mysql.yml
3. 验证
使用navicat连接,端口是31091,可以看到有一个名称为nacos的数据库即可,而且重启pod再也不会执行init-nacos.sql那个脚本