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部署完成了,进行实际测试吧。

Logo

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

更多推荐