一、jar包介绍

        Jar 包(Java Archive)是 Java 平台中用于打包和分发 Java 相关资源的归档文件格式,本质是一种基于 ZIP 压缩的文件,主要用于整合多个 Java 类文件、资源文件(如配置文件、图片等)、元数据等,方便 Java 程序的存储、传输和运行。

核心作用

  • 整合资源:将一个 Java 项目的多个.class文件(编译后的字节码)、依赖库、配置文件等打包成单一文件,避免文件零散管理的麻烦。
  • 便于分发:一个 Jar 包即可包含完整的 Java 程序或类库,简化传输和部署流程(比如第三方框架、工具类库通常以 Jar 包形式提供)。
  • 支持运行:通过指定入口类,Jar 包可直接作为可执行程序运行(无需手动逐个加载类文件)。

二、镜像制作

        在IDEA使用maven打包的jar包是无法直接使用k8s执行的,需要先将jar包制作成镜像,再上传至harbor仓库管理,k8s则是拉取对应镜像创建deployment、pod、service完成启动。

        jar包需要使用docker制作镜像,需要先创建Dockerfile文件,具体如下

# 指使用jdk1.8的java镜像,在容器中安装java
from dockerhub.kubekey.local/tiangang/java:1.8
#作者
MAINTAINER author

VOLUME /tmp

ADD api-monitor-1.0.0-SNAPSHOT.jar  api-monitor.jar

RUN touch /api-monitor.jar
#容器暴露端口
EXPOSE 8000
#自定义环境变量
ENV TZ=Asia/Shanghai
RUN ln -sf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
#应用启动命令
ENTRYPOINT [ "java","-Xmx512m","-Xms512m","-jar","api-monitor.jar","--spring.cloud.nacos.config.namespace=stand"]

完成Dockerfile文件之后,执行build命令完成镜像制作

docker build -t dockerhub.kubekey.local/tiangang/api-monitor:1.0 .
#结尾的 . 表示当前路径

再执行push命令将镜像推送到harbor仓库具体的目录

docker push dockerhub.kubekey.local/tiangang/api-monitor:1.0

三、创建deployment.yaml和service.yaml

        deployment.yaml文件,用于创建jar的控制器和对应的pod容器,在文件中指明了控制器deployment的资源大小、标签、创建的容器镜像、启动命令等,后续对容器水平扩容时可对deployment.yaml文件进行修改。

         service.yaml文件,用于负责负载均衡和服务发现,暴露jar的端口号和访问模式,其中,端口号可分pod容器对service暴露的端口,service对k8s集群暴露的端口,以及访问模式。
 

apiVersion: apps/v1
kind: Deployment
metadata:
  name: zhongchuan141-monitor
  namespace: zhongchaun141
  labels:
    app: zhongchuan141-monitor
spec:
  replicas: 1
  selector:
    matchLabels:
      app: zhongchuan141-monitor
  template:
    metadata:
      labels:
        app: zhongchuan141-monitor
    spec:
      containers:
      - name: zhongchuan141-monitor
        image: dockerhub.kubekey.local/tiangang/api-monitor:1.0
        command: ["java",
                  "-Xms256m",
                  "-Xmx512m",
                  "-Dspring.cloud.nacos.config.namespace=stand",
                  "-Dspring.cloud.nacos.config.server-addr=zhongchuan141-nacos:8848",
                  "-jar",
                  "/api-monitor.jar"]
        ports:
        - containerPort: 8000
        resources:
          requests:
            memory: "1Gi"
            cpu: "500m"
          limits:
            memory: "2Gi"
            cpu: "1000m"
         # 健康检查(可选,确保服务存活)
        livenessProbe:  # 存活探针(检测服务是否崩溃,失败则重启容器)
          httpGet:
            path: /actuator/health  # 需Jar包内有健康检查接口(如Spring Boot Actuator)
            port: 8080
          initialDelaySeconds: 60   # 启动后延迟60秒开始检查
          periodSeconds: 10         # 每10秒检查一次
        readinessProbe:  # 就绪探针(检测服务是否可接收请求,失败则从Service移除)
          httpGet:
            path: /actuator/health
            port: 8080
          initialDelaySeconds: 30
          periodSeconds: 5
---
apiVersion: v1
kind: Service
metadata:
  name: zhongchuan141-monitor
  namespace: zhongchuan141
spec:
  selector:
    app: zhongchuan141-monitor
  ports:
  - port: 8000
    targetPort: 8000
    nodePort: 31800
  type: NodePort

四、注意事项

        jar后端包需要nacos做配置管理时,需要再deployment文件中用command指定nacos的命名空间、IP地址、端口以及jar包在镜像中的具体位置,这里的IP地址和端口可以直接写nacos的service名称和对集群内部暴露的端口号。

        nacos中的yaml文件,记录存储的是工作节点的IP和服务对外暴露的端口,即java服务连接数据库、redis、nginx所用的均为对外暴露的端口。

更多推荐