# 部署 nacos-mysql

前提条件

部署 nacos-mysql 之前,请确保您的环境已经满足 环境准备 中的要求。

# 创建 StatefulSet

按照如下步骤创建 nacos-mysql StatefulSet:

  • 在 Kuboard 界面进入名称空间 spring-blade 之后,点击菜单 名称空间 -> spring-blade -> 常用操作 -> 创建工作负载 ,如下图所示:

    并填写表单:

    字段名称 字段值 备注
    工作负载类型 StatefulSet
    工作负载分层 持久层 填写后将自动添加 k8s.kuboard.cn/layer 标签
    工作负载名称 nacos-mysql 填写后将自动添加 k8s.kuboard.cn/name 标签
    副本数 1

    image-20210501181648619

  • 切换到 容器信息 标签,如下图所示:

    点击左侧的 添加工作容器 按钮,添加一个工作容器,并填写表单:

    字段名称 字段值 备注
    名称 mysql
    容器镜像 从其他镜像仓库加载镜像(不使用用户名密码)
    容器镜像-->镜像仓库 swr.cn-east-2.myhuaweicloud.com
    容器镜像-->镜像路径 blade/nacos-mysql
    容器镜像-->镜像标签 5.7
    镜像拉取策略 始终拉取新镜像(Always)
    环境变量 MYSQL_ALLOW_EMPTY_PASSWORD=1
    MYSQL_DATABASE=nacos_test
    MYSQL_USER=nacos
    MYSQL_PASSWORD=nacos
    类型为 ,点击 名值对 按钮可添加一组
    资源请求/限制 内存资源请求:100Mi
    内存资源限制:1000Mi
    容器端口 mysql
    3306

    image-20210501182754535

    启用 健康检查 ,如下图所示:

    image-20210501183908989

    点击 容器启动检查探针启用 按钮,如下图所示:

    并填写表单:

    字段名称 字段值 备注
    探针类型 命令行
    Command mysql -h 127.0.0.1 -e 'select 1'
    初始延迟(秒) 30
    不健康阈值 20 执行探测频率 * 不健康阈值 = 10 * 20 = 200秒,
    容器创建 200 秒后,Command
    mysql -h 127.0.0.1 -e 'select 1'
    如果仍未执行成功,kubelet 将认为该容器启动失败,
    并强制重启该容器。

    image-20210501184519436

    按照同样的方式,启用 容器存活检查探针 ,表单内容如下所示:

    字段名称 字段值 备注
    探针类型 命令行
    Command mysqladmin ping
    初始延迟(秒) 30
    不健康阈值 3 连续3此失败后,kubelet 将认为该容器已经不健康,并强制重启该容器

    按照同样的方式,启用 容器就绪检查探针 ,表单内容如下所示:

    字段名称 字段值 备注
    探针类型 命令行
    Command mysql -h 127.0.0.1 -e 'select 1'
    初始延迟(秒) 30
    健康阈值 2 探针连续执行成功 2 次以后,kubelet 认为该容器已就绪,并将其添加到对应 Service (如果有)的 Endpoint 中,Service 此时可以分发流量到该容器
    不健康阈值 3 探针连续执行失败 3 此以后,kubelet 认为该容器已经不健康,并强制重启该容器

    完成 健康检查 的设置以后,界面截图如下所示:

    image-20210501191122507

  • 切换到 存储挂载 标签页,如下图所示: image-20210501191649020 点击上图中 添加存储卷声明模板 按钮,如下图所示:

    填写表单:

    字段名称 字段值 备注
    名称 data
    存储类 cephfs-raspberry * 下拉选择,根据您集群环境的不同,此参数的值可以
    不一样,但是对应的存储类必须为有效的存储类,并
    能够动态提供存储卷
    分配模式 动态分配
    读写模式 可被多节点读写
    总量 2Gi
    mysql 容器中的挂载类型 读写
    mysql 容器中的挂载路径 /var/lib/mysql

    image-20210501191830399

  • 切换到 高级设置 标签页,如下图所示:

    并填写表单:

    字段名称 字段值 备注
    容器组管理策略 Parallel 不按容器组的序号顺序更新容器组。(此为测试环境,mysql 只部署
    一个副本,不考虑主从的情况,否则此参数不能选择 Parallel
    历史版本数量 10
    更新策略 滚动更新(RollingUpdate)
    分割点 0 从序号为 0 的容器组开始更新 StatefulSet 中的所有容器组

    image-20210501192537254

  • 切换到 服务/应用路由 标签页,如下图所示:

    并填写表单:

    字段名称 字段值 备注
    服务类型 Headless 无头 Service,专用于 StatefulSet
    端口 mysql
    TCP
    3306
    3306
    将容器的 3306 端口映射到 Service 的 3306 端口

    image-20210501193259832

  • 点击 保存 按钮,依据界面提示完成保存操作

# 验证部署结果

  • 完成保存后,并等候一定的时间,界面显示如下:

    从界面中我们可以看到多个失败事件:

    • FailedSchedule,原因是容器组所需要的存储卷声明尚未成功绑定,待存储类动态提供存储卷之后,容器组就立刻进入 已调度 的状态;
    • Unhealthy,点击 追踪日志 的按钮,可以看到,此 mysql 容器在第一次启动时会执行数据初始化的工作,因此启动过程耗时较长,图中显示,整个启动过程中,kubelet 执行了 2 次失败的 Startup probe failed 容器启动检查探针,只要这个次数在前面定义的 容器启动检查探针 --> 不健康阈值 的范围之内,kubelet 仍将继续等待该容器的启动,否则 kublet 将强制重启该容器。

      在截图中,容器启动检查探针 只失败了两次(实际执行了三次,第三次执行结果为成功,并为生成事件,但是变更了容器的状态),容器就成功启动了; 在您的安装过程中,依据容器启动的时间长短,容器启动检查探针 失败的次数可能所有不同。

    image-20210501193803996

  • 点击上图中的 bash 按钮,界面显示如下:

    下图显示的内容为进入 bash 界面之后执行了如下指令的结果:

    mysql
    show databases;
    show tables;
    
    1
    2
    3

    image-20210501194542057

  • 至此,我们可以认为 nacos-mysql 部署成功。

    下一步,请 部署 nacos

更新时间: 2021-05-04 18:20:16