本篇以实际场景介绍如何发布无状态工作负载,并连接有状态数据库,并配合使用持久存储,在本片教程中,我们使用Local PV作为持久存储介质,在生产使用中建议使用Ceph存储。
创建持久存储类
选择Local存储,如下:
创建持久存储卷:在新建存储卷界面,选择第一步中创建的持久存储类
选择LocalPV所在节点以及LocalPV的目录,这里LocalPV所在节点即想要把容器数据持久化到哪一个k8s节点上,LocalPV的目录即是我们所选节点上的指定目录。
注意此目录需要在我们所选择节点上存在,若不存在需要手动在改节点上创建目录。
创建MySQL有状态服务并使用持久存储卷:
出现新建存储卷界面,我们创建MySQL的流程如下:
点击新建PVC后,我们需要格外注意下图中的注意点。
StorageClasss名称:必须和第二步中创建的持久存储卷使用同一个StorageClass。
所需容量:这里选择的容量不能超过第二步中创建的持久存储卷的容量。
然后开始设置MySQL容器的参数,依次输入MySQL容器名称、选择MySQL镜像及版本号,需要格外注意挂载点的名称和容器路径。
其中数据卷选择刚刚添加的数据卷。
MySQL容器的数据目录为/Var/lib/mysql,所以容器路径输入这个目录。
设置容器的资源参数及环境变量,MySQL容器正常运行我们必须要设置MYSQL_ROOT_PASSWORD这个环境变量,设置root用户密码,同时如果需要在MySQL容器启动后帮我们创建一个database,我们可以使用MYSQL_DATABASE这个环境变量。
最后一步,我们为MySQL容器配置集群内访问方式,所以我们选择类型为ClusterIP。
注意服务端口可以直接与容器端口相同。
创建web无状态工作负载并连接数据库
1、web工作负载配置
我们使用的web工作负载使用的配置文件如下:
spring:
jpa:
show-sql: false
open-in-view: true
datasource:
driver-class-name:"com.mysql.cj.jdbc.Driver"
jdbc-url:
"jdbc:mysql://{MYSQL_HOST}:MYSQLHOST:{MYSQL_PORT}/test?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&useSSL=false"
username: "${MYSQL_USERNAME}"
password:"${MYSQL_PASSWORD}"
在上述配置中,我们通过读取环境变量来设置应用所需的MySQL主机IP、端口、用户名、密码。
2、创建无状态工作负载
这里我们只介绍无状态工作负载的环境变量怎么设置,其他的参数配置与MySQL的类似:
查看MySQL容器(可选)
进入k8s集群,通过命令查看我们刚刚创建出来的MySQL容器。
执行命令进入这个MySQL容器。
执行MySQL命令连接MySQL客户端,此处的参数分别为:-h后面的参数为我们在3.1步骤中创建的MySQL工作负载名称,-u指定用户为root用户,-p参数指定root用户的密码,指定的密码为我们在3.1中创建MySQL容器时指定的MYSQL_ROOT_PASSWORD这个环境变量的值。
查看MySQL中的database,即可看到我们在3.1中通过MYSQL_DATABASE这个环境变量创建的database。
验证MySQL容器的持久存储(可选)
创建一个database 容器化Web访问MySQL(LocalPV)连续指定两次exit命令分别退出MySQL客户端和MySQL容器。
我们可以在容器界面上重新部署MySQL容器,然后查看数据是否仍然存在。