1. 准备工作

1.k8s的前置内容需要提前了解
2.mysql的初始化数据
3.docerk相关知识点需要了解

2. 部署步骤

  1. 初始化数据文件准备,准备了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
-- ----------------------------

  1. 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
  1. 制作镜像
    目前的制作镜像的文件结构
    在这里插入图片描述
    执行制作镜像命令:
docker build -t lyb/mysql:k8s .
  1. 创建k8s的namespace
kubectl create namespace lyb
  1. 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


  1. 创建mysql的pod,svc,deploy
    kubectl apply -f k8s-mysql.yml

3. 验证

使用navicat连接,端口是31091,可以看到有一个名称为nacos的数据库即可,而且重启pod再也不会执行init-nacos.sql那个脚本

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐