k8s部署jar包_利用Kubernetes(K8S)部署JAVA项目

一、jar包和war包区别

首先简单介绍一下jar包和war包区别,当时就没分清,导致部署总是傻傻分不清楚.

jar包:jar包就是java的类进行编译生成的class文件就行打包的压缩包。里面是一些class文件。当我们自己使用maven写一些java程序,进行打包生成jar包。同时在可以在其他的工程下使用,但是我们在这个工程依赖的jar包,在其他工程使用该jar包也要导入。

war包:其实就是一个web程序进行打包便于部署的压缩包,里面包含我们web程序需要的一些东西,其中包括web.xml的配置文件,前端的页面文件,以及依赖的jar。文件数量对于jar包,这样便于我们部署工程,直接放到tomcat的webapps目录下,直接启动tomcat即可。同时可以使用WinRAR查看war包,直接将后缀.war改成.rar

二、创建JAVA项目,并打包成jar包

我的目录结构

这里是利用SpringBoot写的一个小DEMO,不熟悉的,可以去看入门视频

三、创建Dockerfile文件

我看了这篇文章作为参考,但COPY时候,他的有target/目录,我不明白哪儿来的,折腾了半天

Dockerfile文件

#基础镜像,如果本地仓库没有,会从远程仓库拉取

FROM openjdk:8-jdk-alpine

#容器中创建目录

RUN mkdir -p /usr/local/pasq

#编译后的jar包copy到容器中创建到目录内

COPY target/demo1-0.0.1-SNAPSHOT.jar /usr/local/pasq/myapp.jar

#指定容器启动时要执行的命令

ENTRYPOINT [“java”,”-jar”,”/usr/local/pasq/myapp.jar”]

#基础镜像,如果本地仓库没有,会从远程仓库拉取

FROM openjdk:8-jdk-alpine

#容器中创建目录

RUN mkdir -p /usr/local/pasq

#编译后的jar包copy到容器中创建到目录内

COPY demo1-0.0.1-SNAPSHOT.jar /usr/local/pasq/myapp.jar

#指定容器启动时要执行的命令

ENTRYPOINT [“java”,”-jar”,”/usr/local/pasq/myapp.jar”]

我所遇到的问题,开始对于jar包的位置没有相对于dockerfile文件,导致一直不能创建成功

四、构建镜像

1、构建命令

docker build -f Dockerfile文件位置 -t 镜像名:版本 . 【末尾有个点,一点要注意】

docker build-f /myDir/Dockerfile3 -t myapp:1.0 .

Dockerfile一般位于构建上下文的根目录下,

-f指定该文件的位置

-t参数指定构建成后,镜像的仓库、标签等

利用docker images命令查看自己所构建的镜像

2、镜像推送push、获取pull

镜像推送,我是自己做了个harbor仓库,hub.lqz.com是我的仓库地址

登录仓库:docker login hub.lqz.com

标记镜像:docker tag myapp:1.0 hub.lqz.com/library/myapp:1.0

推送镜像:docker push hub.lqz.com/library/myapp:1.0

获取镜像:docker pull hub.lqz.com/library/myapp:1.0

仓库命令

五、Deployment,Service的yaml文件

1、Deployment.yaml

deployment为申明式,所以构建用apply

一般将Deployment,Service写在一起,但我太菜,初步选择了分开写(其中service选择了nodePort)

[root@master manifests]# vim svc-deployment.yaml

apiVersion: apps/v1

kind: Deployment

metadata:

name: myapp-deploy

namespace: default

spec:

replicas: 3

selector:

matchLabels:

app: myapp

release: stabel

template:

metadata:

labels:

app: myapp

release: stabel

env: test

spec:

containers:

- name: myapp

image: hub.lqz.com/library/nginx:latest

imagePullPolicy: IfNotPresent

ports:

- name: http

containerPort: 80

创建: kubectl apply -f svc-deployment.yaml

2、service.yaml

[root@master manifests]# vim svc-nodePort.yaml

apiVersion: v1

kind: Service

metadata:

name: myapp

namespace: default

spec:

type: NodePort

selector:

app: myapp

release: stabel

ports:

- name: http

port: 8080

targetPort: 8080

nodePort: 30080

创建svc: kubectl apply -fsvc-nodePort.yaml

问题:在构建过程中,svc-nodePort.yaml一直没写nodePort,导致创建成功,但一直访问失败,需要更加熟悉熟悉

查看pod,看是否构建成功

查看svc,并访问nodePort

最后,访问   ip地址:30080(根据自身设置的为准)

访问成功,但没页面,根据我的jar包,加/hello,访问成功