在k8s中部署lcn集群
k8s部署lcn集群1.在git上拉取lcn5.0.2源码,git clonehttps://github.com/codingapi/tx-lcn.git2.更改txlcn-tm 下pom.xml中的打包插件,如下:<build><plugins><!-- springboot编译打包插件 -->...
k8s部署lcn集群
1.在git上拉取lcn5.0.2源码,git clone https://github.com/codingapi/tx-lcn.git
2.更改txlcn-tm 下pom.xml中的打包插件,如下:
<build>
<plugins>
<!-- springboot编译打包插件 -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<executable>true</executable>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
3.在跟目录下执行mvn clean package -Dmaven.test.skip=true 在Target目录下生成jar包 txlcn-tm-5.0.2.RELEASE.jar
4.将该jar包上传至可执行docker命令的服务器,并编写Dockerfile,如下:
###指定java8环境镜像
FROM java:8
###复制文件到容器app-springboot
ADD txlcn-tm-5.0.2.RELEASE.jar /lcn.jar
###声明启动端口号
EXPOSE 7970
EXPOSE 8070
###配置容器启动后执行的命令
ENTRYPOINT [ "bash", "-c", "java -jar /lcn.jar" ]
5.制作镜像,并上传至阿里云镜像仓库
(1)在Dockerfile和txlcn-tm-5.0.2.RELEASE.jar 包所在目录下,执行docker build ./
(2)docker tag [ImageID] registry.cn-hangzhou.aliyuncs.com/xxx/lcn-tm
(3)docker push registry.cn-hangzhou.aliyuncs.com/xxx/lcn-tm
6.编写docker-compose.yaml 如下:
version: "2"
services:
lcn:
image: registry.cn-hangzhou.aliyuncs.com/xxx/lcn-tm
volumes:
- ./conf:/usr/local/laoxu/docker-project/lcn
- /etc/localtime:/etc/localtime:ro
ports:
- "7970:7970"
- "8070:8070"
environment:
spring.profiles.active: dev
spring.config.additional-location: /usr/local/laoxu/docker_project/lcn/application-dev.properties
LONG: zh_CN.UTF-8
networks:
mysql1_extnetwork:
ipv4_address: 172.49.0.7
networks:
mysql1_extnetwork:
external: true
其中conf文件夹下生成application-dev.properties,内容如下:
spring.application.name=TransactionManager
server.port=7970
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://172.39.0.2:3306/tx-manager?characterEncoding=UTF-8
spring.datasource.username=root
spring.datasource.password=root
spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect
#第一次运行项目,初始化用create创建表,以后用none或者update
spring.jpa.hibernate.ddl-auto=none
#TxManager Ip,默认为127.0.0.1
tx-lcn.manager.host=0.0.0.0
#TM监听scoket端口,默认为8070
tx-lcn.manager.port=8070
#TM后台登录密码
tx-lcn.manager.admin-key=123456
#心跳检测时间(ms)
tx-lcn.manager.heart-time=15000
#分布式事务执行总时间(ms)
tx-lcn.manager.dtx-time=60000
#参数延迟删除时间ms
tx-lcn.message.netty.attr-delay-time=10000
#事务处理并发等级,默认为机器核心数5倍
tx-lcn.manager.concurrent-level=150
#redis地址
spring.redis.host=172.39.0.8
#redis端口
spring.redis.port=6379
#redis密码
spring.redis.password=redis
#是否启用日志
#tx-lcn.logger.enabled=true
#设置日志级别
#logging.level.com.codingapi=debug
tx-lcn.manager.seq-len=12
tx-lcn.manager.ex-url-enabled=false
tx-lcn.manager.ex-url=/provider/email-to/***@**.com
注意文件中的mysql及redis地址,应该换成k8s中相应的service name
7.使用kompose 将docker-compose.yml转化为k8s里的yaml文件
执行:
kompose -f ./docker-compose.yml convert
生成pvc,service,deployment 等yaml文件
根据k8s实际情况,对文件进行相应修改,如namespace,storageClassName等
8.将修改好的yaml文件在k8s master服务其上生成相应服务,即在yaml所在文件夹执行
kubectl apply -f ./
9.此时服务已生成,尚需要将application-dev.properties文件放到所置到实际挂载路径:
(1)执行kubectl get pod -n namespace -o wide 得到lcn的pod所在node
(2)通过 ping nodeId,可以得到node所在实际服务器IP地址
(3) 登录node所在服务器,执行mount |grep lcn 得到实际挂载地址,进入该地址,将application-dev.properties放置进来
10.在mysql中生成tx-manger数据库及对应表
create datebase tx-manger charset= utf8mb4;
use tx-manger;
CREATE TABLE `t_tx_exception` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `group_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, `unit_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, `mod_id` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, `transaction_state` tinyint(4) NULL DEFAULT NULL, `registrar` tinyint(4) NULL DEFAULT NULL, `remark` varchar(4096) NULL DEFAULT NULL, `ex_state` tinyint(4) NULL DEFAULT NULL COMMENT '0 未解决 1已解决', `create_time` datetime(0) NULL DEFAULT NULL, PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
11.修改lcn-deployment.yaml中的replicas数量,此为集群pod数量。服务会自动重启
好了,一个lcn在k8s部署完成了,进行实际测试吧。
更多推荐
所有评论(0)