• Kubernetes 部署 Mysql 8.0 数据库(单节点)


    系统环境:

    • Mysql 版本:8.0.19

    • Kubernetes 版本:1.17.4

    • 操作系统版本:CentOS 7.8

    一、简介

    Mysql 是我们常用的关系型数据库,在项目开发、测试、部署到生成环境时,经常需要部署一套 Mysql 进行数据存储。这里介绍下如何在 Kubernetes 环境中部署用于开发、测试的环境的 Mysql 数据库,当然,部署的是单节点模式,并非用于生产环境的主从或集群模式。整理了一份328页MySQ学习笔记

    单节点的 Mysql 部署简单,且配置存活探针,能保证快速检测 Mysql 是否可用,当不可用时快速进行重启。

    二、Mysql 参数配置

    在使用 Kubernetes 部署应用后,一般会习惯与将应用的配置文件外置,用 ConfigMap 存储,然后挂载进入镜像内部。这样,只要修改 ConfigMap 里面的配置,再重启应用就能很方便就能够使应用重新加载新的配置,很方便。

    创建 ConfigMap 存储 Mysql 配置文件

    创建 Kubernetes 的 ConfigMap 资源,用于存储 Mysql 的配置文件 my.cnf 内容:

    mysql-config.yaml

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: mysql-config
      labels:
        app: mysql
    data:
      my.cnf: |-
        [client]
        default-character-set=utf8mb4
        [mysql]
        default-character-set=utf8mb4
        [mysqld] 
        max_connections = 2000
        secure_file_priv=/var/lib/mysql
        sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
    

    通过 Kubectl 工具部署 ConfigMap

    通过 kubectl 工具部署 Kubernetes ConfigMap 资源,命令如下:

    • -n:指定部署应用的 Namespace 命名空间。

      $ kubectl create -f mysql-config.yaml -n mydlqcloud

    三、Mysql 数据存储

    Kubernetes 部署的应用一般都是无状态应用,部署后下次重启很可能会漂移到不同节点上,所以不能使用节点上的本地存储,而是徐亚网络存储对应用数据持久化,PV 和 PVC 是 Kubernetes 用于与储空关联的资源,可与不同的存储驱动建立连接,存储应用数据,所以接下来我们要创建 Kubernetes PV、PVC 资源。

    创建 PV、PVC 绑定 Mysql 存储空间

    PV 支持多种存储驱动,不同存储驱动的 PV 配置方式是不同的,需要根据你的存储系统来配置 PV 参数。这里用的是 NFS 存储(共享网络文件存储系统),可以按照以下方式进行配置:

    mysql-storage.yaml

    ## PV
    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: mysql
      labels:
        app: mysql             #设置 pv 的 label 标签
    spec:
      capacity:          
        storage: 50Gi          #设置 pv 存储资源大小 
      accessModes:       
      - ReadWriteOnce
      mountOptions:
      - hard
      - nfsvers=4.1    
      nfs:                     #指定使用 NFS 存储驱动
        server: 192.168.2.11   #指定 NFS 服务器 IP 地址
        path: /nfs/mysql       #指定 NFS 共享目录的位置,且需提前在该目录中创建 mysql 目录
      persistentVolumeReclaimPolicy: Retain  
    ---
    ## PVC
    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: mysql
    spec:
      resources:
        requests:
          storage: 50Gi        #设置 pvc 存储资源大小
      accessModes:
      - ReadWriteOnce
      selector:
        matchLabels:
          app: mysql           #根据 Label 选择对应 PV
    

    通过 Kubectl 工具部署 PV、PVC

    通过 kubectl 工具部署 Kubernetes PV、PVC 资源,命令如下:

    • -n:指定部署应用的 Namespace 命名空间。

      $ kubectl create -f mysql-storage.yaml -n mydlqcloud

    四、Kubernetes 部署 Mysql

    创建 Deployment 部署 Mysql

    创建用于 Kubernetes Deployment 来配置部署 Mysql 的参数,需要配置 Mysql 的镜像地址、名称、版本号,还要配置其 CPU 与 Memory 资源的占用,通过环境变量配置 Mysql 的 root 用户默认密码,配置探针监测应用可用性,配置 Volume 挂载之前创建的 PV、PVC、ConfigMap 资源等等,内容如下:

    mysql-deploy.yaml

    ## Service
    apiVersion: v1
    kind: Service
    metadata:
      name: mysql
      labels:
        app: mysql
    spec:
      type: NodePort
      ports:
      - name: mysql
        port: 3306
        targetPort: 3306
        nodePort: 30336
      selector:
        app: mysql
    ---
    ## Deployment
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: mysql
      labels:
        app: mysql
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: mysql
      template:
        metadata:
          labels:
            app: mysql
        spec:     
          containers:
          - name: mysql
            image: mysql:8.0.19
            ports:
            - containerPort: 3306
            env:
            - name: MYSQL_ROOT_PASSWORD    ## 配置Root用户默认密码
              value: "123456"
            resources:
              limits:
                cpu: 2000m
                memory: 512Mi
              requests:
                cpu: 2000m
                memory: 512Mi
            livenessProbe:
              initialDelaySeconds: 30
              periodSeconds: 10
              timeoutSeconds: 5
              successThreshold: 1
              failureThreshold: 3
              exec:
                command: ["mysqladmin", "-uroot", "-p${MYSQL_ROOT_PASSWORD}", "ping"]
            readinessProbe:  
              initialDelaySeconds: 10
              periodSeconds: 10
              timeoutSeconds: 5
              successThreshold: 1
              failureThreshold: 3
              exec:
                command: ["mysqladmin", "-uroot", "-p${MYSQL_ROOT_PASSWORD}", "ping"]
            volumeMounts:
            - name: data
              mountPath: /var/lib/mysql
            - name: config
              mountPath: /etc/mysql/conf.d/my.cnf
              subPath: my.cnf
            - name: localtime
              readOnly: true
              mountPath: /etc/localtime
          volumes:
          - name: data
            persistentVolumeClaim:
              claimName: mysql
          - name: config      
            configMap:
              name: mysql-config
          - name: localtime
            hostPath:
              type: File
              path: /etc/localtime
    

    参数简介:

    • ports: 配置镜像映射端口。

    • env: 镜像环境变量配置,其中 MYSQL_ROOT_PASSWORD 是 Mysql 镜像用于配置 root 用户默认密码变量。

    • resources: 配置 CPU、Memory 资源限制,可以通过配置该值来配置 Pod 的 QoS 级别。

    • livenessProbe: 配置存活探针,定时检测 Mysql 应用运行状态,如果检测到 Mysql 挂掉将进行重启操作。

    • readinessProbe: 配置就绪探针,定时检测 Mysql 应用启动状态,如果启动成功将允许流量涌入,启动失败将进行重启操作。

    • command: 探针执行探测时执行的探测命令。

    • volumeMounts: 存储卷挂载配置,用于镜像内存储的挂载配置,与 volumes 中对于的 name 进行绑定。

    • volumes: 存储卷配置,可配置使用 pvc、hostPath、emptyDir、nfs 等存储,需要配置 name 值与 VolumeMounts 进行绑定。

    通过 Kubectl 工具部署 PV、PVC

    通过 kubectl 工具部署 Deployment 来创建 Msyql,命令如下:

    • -n:指定部署应用的 Namespace 命名空间。

      $ kubectl create -f mysql-deploy.yaml -n mydlqcloud

    五、测试 Mysql 是否能够正常使用

    接下来启动个 Mysql 镜像,使用里面的 Msyql 客户端工具,对部署在 Kubernetes 中的 Mysql 进行连接,测试是否能够正常可用。

    这里本人 Kubernetes 集群地址为 192.168.2.11 部署的 Mysql 的 NodePort 端口号为 30336,所以这里启动一个对应版本的 Mysql 镜像,然后进入镜像内部,输入 Mysql 登录命令进行测试。

    运行一个 mysql 镜像,并且进入镜像内部:

    $ docker run -it mysql:8.0.19 /bin/bash
    

    在镜像内部命令行中输入 mysql 登录命令,测试是否能够正常登录:

    $ mysql -h 192.168.2.11 -P 30336 --user=root --password=123456
    

    显示如下:

    Welcome to the MySQL monitor.  Commands end with ; or g.
    Your MySQL connection id is 592
    Server version: 8.0.19 MySQL Community Server - GPL
    
    Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
    
    Oracle is a registered trademark of Oracle Corporation and/or its
    affiliates. Other names may be trademarks of their respective
    owners.
    
    Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.
    
    mysql>
    

    可以看到,已经成功连接数据库,说明数据库能正常使用。整理了一份328页MySQ学习笔记

    示例地址:



  • 相关阅读:
    js解析json数据
    json.stringify
    [Eclipse的Maven项目搭建,仅为测试Maven功能]如何在Eclipse下搭建Maven项目
    在 Windows 中配置Maven:
    jsp引入文件时候经常遇到的${ctx}
    <%%> <%! %> <%=%> <%-- --%> jsp中jstl一些运用
    Spring MVC之@RequestBody, @ResponseBody 详解
    Spring MVC之@RequestMapping 详解
    Spring MVC之@RequestParam @RequestBody @RequestHeader 等详
    @RequiresPermissions 解释
  • 原文地址:https://www.cnblogs.com/bainannan/p/14359403.html
Copyright © 2020-2023  润新知