利用Kubernetes(K8S)部署JAVA项目
<h1><strong><span style="font-family: 黑体">一、</span>jar<span style="font-family: 黑体">包和</span><span style="font-family: Arial">war</span><span style="font-family: 黑体">包区别</span></strong></h1><p><span style="font-size: 16px"><span style="font-family: 宋体">首先简单介绍一下</span>jar<span style="font-family: 宋体">包和</span><span style="font-family: Calibri">war</span><span style="font-family: 宋体">包区别,当时就没分清,导致部署总是傻傻分不清楚.</span><span style="font-family: Calibri"><br></span></span></p>
<p><span style="font-size: 16px"><strong>jar<span style="font-family: 宋体">包:</span></strong><span style="font-family: Calibri">jar</span><span style="font-family: 宋体">包就是</span><span style="font-family: Calibri">java</span><span style="font-family: 宋体">的类进行编译生成的</span><span style="font-family: Calibri">class</span><span style="font-family: 宋体">文件就行打包的压缩包。里面是一些</span><span style="font-family: Calibri">class</span><span style="font-family: 宋体">文件。当我们自己使用</span><span style="font-family: Calibri">maven</span><span style="font-family: 宋体">写一些</span><span style="font-family: Calibri">java</span><span style="font-family: 宋体">程序,进行打包生成</span><span style="font-family: Calibri">jar</span><span style="font-family: 宋体">包。同时在可以在其他的工程下使用,但是我们在这个工程依赖的</span><span style="font-family: Calibri">jar</span><span style="font-family: 宋体">包,在其他工程使用该</span><span style="font-family: Calibri">jar</span><span style="font-family: 宋体">包也要导入。</span></span></p>
<p><span style="font-size: 16px"><strong>war</strong><span style="font-family: 宋体"><strong>包:</strong>其实就是一个</span><span style="font-family: Calibri">web</span><span style="font-family: 宋体">程序进行打包便于部署的压缩包,里面包含我们</span><span style="font-family: Calibri">web</span><span style="font-family: 宋体">程序需要的一些东西,其中包括</span><span style="font-family: Calibri">web.xml</span><span style="font-family: 宋体">的配置文件,前端的页面文件,以及依赖的</span><span style="font-family: Calibri">jar</span><span style="font-family: 宋体">。文件数量对于</span><span style="font-family: Calibri">jar</span><span style="font-family: 宋体">包,这样便于我们部署工程,直接放到</span><span style="font-family: Calibri">tomcat</span><span style="font-family: 宋体">的</span><span style="font-family: Calibri">webapps</span><span style="font-family: 宋体">目录下,直接启动</span><span style="font-family: Calibri">tomcat</span><span style="font-family: 宋体">即可。同时可以使用</span><span style="font-family: Calibri">WinRAR</span><span style="font-family: 宋体">查看</span><span style="font-family: Calibri">war</span><span style="font-family: 宋体">包,直接将后缀</span><span style="font-family: Calibri">.war</span><span style="font-family: 宋体">改成</span><span style="font-family: Calibri">.rar</span></span></p>
<p><span style="font-size: 14pt"><span style="font-family: 宋体">原文链接:</span>https://blog.csdn.net/shu616048151/article/details/81136164</span></p>
<h1><strong><span style="font-family: 黑体">二、创建</span>JAVA<span style="font-family: 黑体">项目,并打包成</span><span style="font-family: Arial">jar</span><span style="font-family: 黑体">包</span></strong></h1>
<p> </p>
<p>我的目录结构</p>
<p><img src="https://img2018.cnblogs.com/blog/1455597/201910/1455597-20191018170754312-2060239874.png" alt=""></p>
<p> </p>
<p>这里是利用SpringBoot写的一个小DEMO,<span style="font-family: 宋体">不熟悉的,可以去看入门视频</span></p>
<p><span style="font-size: 14pt"><span style="font-family: 宋体">链接:</span>https://www.bilibili.com/video/av38657363/?p=6</span></p>
<h1><strong><span style="font-family: 黑体">三、创建</span>Dockerfile<span style="font-family: 黑体">文件</span></strong></h1>
<p><span style="font-size: 16px"><span style="font-family: 宋体">我看了这篇文章作为参考,但</span>COPY<span style="font-family: 宋体">时候,他的有</span><span style="font-family: Calibri">target/</span><span style="font-family: 宋体">目录,我不明白哪儿来的,折腾了半天</span></span></p>
<p><span style="font-size: 14pt"><span style="font-family: 宋体">文章链接:</span>https://cloud.tencent.com/developer/article/1512705</span></p>
<p>Dockerfile<span style="font-family: 宋体">文件</span></p>
<table border="1" cellspacing="0">
<tbody>
<tr>
<td valign="top" width="712">
<p>#<span style="font-family: 宋体">基础镜像,如果本地仓库没有,会从远程仓库拉取</span></p>
<p>FROM openjdk:8-jdk-alpine</p>
<p>#<span style="font-family: 宋体">容器中创建目录</span></p>
<p>RUN mkdir -p /usr/local/pasq</p>
<p>#<span style="font-family: 宋体">编译后的</span><span style="font-family: Calibri">jar</span><span style="font-family: 宋体">包</span><span style="font-family: Calibri">copy</span><span style="font-family: 宋体">到容器中创建到目录内</span></p>
<p>COPY target/demo1-0.0.1-SNAPSHOT.jar /usr/local/pasq/myapp.jar</p>
<p>#<span style="font-family: 宋体">指定容器启动时要执行的命令</span></p>
<p>ENTRYPOINT ["java","-jar","/usr/local/pasq/myapp.jar"]</p>
</td>
</tr>
<tr>
<td valign="top" width="712">
<p> <img src="https://img2018.cnblogs.com/blog/1455597/201910/1455597-20191018170934737-1420110778.png" alt=""></p>
<p>#<span style="font-family: 宋体">基础镜像,如果本地仓库没有,会从远程仓库拉取</span></p>
<p>FROM openjdk:8-jdk-alpine</p>
<p>#<span style="font-family: 宋体">容器中创建目录</span></p>
<p>RUN mkdir -p /usr/local/pasq</p>
<p>#<span style="font-family: 宋体">编译后的</span><span style="font-family: Calibri">jar</span><span style="font-family: 宋体">包</span><span style="font-family: Calibri">copy</span><span style="font-family: 宋体">到容器中创建到目录内</span></p>
<p>COPY demo1-0.0.1-SNAPSHOT.jar /usr/local/pasq/myapp.jar</p>
<p>#<span style="font-family: 宋体">指定容器启动时要执行的命令</span></p>
<p>ENTRYPOINT ["java","-jar","/usr/local/pasq/myapp.jar"]</p>
</td>
</tr>
<tr>
<td valign="top" width="712">
<p>我所遇到的问题,开始对于<span style="font-family: Calibri">jar</span><span style="font-family: 宋体">包的位置没有相对于</span><span style="font-family: Calibri">dockerfile</span><span style="font-family: 宋体">文件,导致一直不能创建成功</span></p>
</td>
</tr>
</tbody>
</table>
<p> </p>
<h1><strong>四、构建镜像</strong></h1>
<h2><span style="font-family: 黑体">1、构建命令</span></h2>
<div class="cnblogs_code">
<pre><span style="font-size: 16px">docker build -f Dockerfile文件位置 -<span style="color: rgba(0, 0, 0, 1)">t 镜像名:版本 . 【末尾有个点,一点要注意】
docker build </span>-f /myDir/Dockerfile3 -t myapp:1.0 .</span><br><br></pre>
<p><span style="font-size: 16px">Dockerfile一般位于构建上下文的根目录下,</span></p>
<p><span style="font-size: 16px">-f指定该文件的位置</span></p>
<p><span style="font-size: 16px">-t参数指定构建成后,镜像的仓库、标签等</span></p>
<p><span style="font-size: 16px">利用docker images命令查看自己所构建的镜像</span></p>
</div>
<h2><span style="font-size: 16px"><span style="font-family: 宋体">2、镜像推送</span>push<span style="font-family: 宋体">、获取</span><span style="font-family: Calibri">pull</span></span></h2>
<p><span style="font-size: 16px"><span style="font-family: 宋体">镜像推送</span><span style="font-family: 宋体">,我是自己做了个</span>harbor<span style="font-family: 宋体">仓库,</span><span style="font-family: Calibri">hub.lqz.com</span><span style="font-family: 宋体">是我的仓库地址</span></span></p>
<p><span style="font-size: 16px">视频地址链接:<span style="text-decoration: underline">https://www.bilibili.com/video/av66617940/?p=14</span></span></p>
<p><span style="font-size: 16px">登录仓库:docker login hub.lqz.com</span></p>
<p><span style="font-size: 16px"> <img src="https://img2018.cnblogs.com/blog/1455597/201910/1455597-20191018171342433-1006815399.png" alt=""></span></p>
<p><span style="font-size: 16px">标记镜像:docker tag myapp:1.0 hub.lqz.com/library/myapp:1.0</span></p>
<p><span style="font-size: 16px">推送镜像:docker push hub.lqz.com/library/myapp:1.0</span></p>
<p><span style="font-size: 16px"> <img src="https://img2018.cnblogs.com/blog/1455597/201910/1455597-20191018171354574-297559916.png" alt=""></span></p>
<p><span style="font-size: 16px">获取镜像:docker pull hub.lqz.com/library/myapp:1.0</span></p>
<p> <img src="https://img2018.cnblogs.com/blog/1455597/201910/1455597-20191018171402140-985796484.png" alt=""></p>
<p> </p>
<p><span style="font-size: 16px">仓库命令</span></p>
<p> <img src="https://img2018.cnblogs.com/blog/1455597/201910/1455597-20191018171408487-589676420.png" alt=""></p>
<p> </p>
<p><img src="https://img2018.cnblogs.com/blog/1455597/201910/1455597-20191018171413968-717280386.png" alt=""></p>
<p> </p>
<h1><strong><span style="font-family: 黑体">五、</span>Deployment<span style="font-family: 黑体">,</span><span style="font-family: Arial">Service</span><span style="font-family: 黑体">的</span><span style="font-family: Arial">yaml</span><span style="font-family: 黑体">文件</span></strong></h1>
<h2><span style="font-size: 18pt"><strong>1<span style="font-family: 宋体">、</span><span style="font-family: Calibri">Deployment.</span><span style="font-family: Calibri">yaml</span></strong></span></h2>
<p><span style="font-size: 16px">deployment<span style="font-family: 宋体">为申明式,所以构建用</span><span style="font-family: Calibri">apply</span></span></p>
<p><span style="font-size: 16px"><span style="font-family: 宋体">一般将</span>Deployment<span style="font-family: 宋体">,</span><span style="font-family: Calibri">Service</span><span style="font-family: 宋体">写在一起,但我太菜,初步选择了分开写</span><span style="font-family: Calibri">(</span><span style="font-family: 宋体">其中</span><span style="font-family: Calibri">service</span><span style="font-family: 宋体">选择了</span><span style="font-family: Calibri">nodePort)</span></span></p>
<table border="1" cellspacing="0">
<tbody>
<tr>
<td valign="top" width="712">
<p><span style="font-size: 16px"># vim svc-deployment.yaml</span></p>
<p><span style="font-size: 16px">apiVersion: apps/v1</span></p>
<p><span style="font-size: 16px">kind: Deployment</span></p>
<p><span style="font-size: 16px">metadata:</span></p>
<p><span style="font-size: 16px"> name: myapp-deploy</span></p>
<p><span style="font-size: 16px"> namespace: default</span></p>
<p><span style="font-size: 16px">spec:</span></p>
<p><span style="font-size: 16px"> replicas: 3</span></p>
<p><span style="font-size: 16px"> selector:</span></p>
<p><span style="font-size: 16px"> matchLabels:</span></p>
<p><span style="font-size: 16px"> app: myapp</span></p>
<p><span style="font-size: 16px"> release: stabel</span></p>
<p><span style="font-size: 16px"> template:</span></p>
<p><span style="font-size: 16px"> metadata:</span></p>
<p><span style="font-size: 16px"> labels:</span></p>
<p><span style="font-size: 16px"> app: myapp</span></p>
<p><span style="font-size: 16px"> release: stabel</span></p>
<p><span style="font-size: 16px"> env: test</span></p>
<p><span style="font-size: 16px"> spec:</span></p>
<p><span style="font-size: 16px"> containers:</span></p>
<p><span style="font-size: 16px"> - name: myapp</span></p>
<p><span style="font-size: 16px"> image: hub.lqz.com/library/nginx:latest</span></p>
<p><span style="font-size: 16px"> imagePullPolicy: IfNotPresent</span></p>
<p><span style="font-size: 16px"> ports:</span></p>
<p><span style="font-size: 16px"> - name: http</span></p>
<p><span style="font-size: 16px"> containerPort: 80</span></p>
</td>
</tr>
<tr>
<td valign="top" width="712">
<p><span style="font-size: 16px">创建: <span style="font-family: Calibri">kubectl apply -f svc-deployment.yaml</span></span></p>
</td>
</tr>
</tbody>
</table>
<h2><span style="font-size: 18pt"><strong>2<span style="font-family: 宋体">、</span><span style="font-family: Calibri">service.yaml</span></strong></span></h2>
<table border="1" cellspacing="0">
<tbody>
<tr>
<td valign="top" width="712">
<p><span style="font-size: 16px"># vim svc-nodePort.yaml</span></p>
<p><span style="font-size: 16px">apiVersion: v1</span></p>
<p><span style="font-size: 16px">kind: Service</span></p>
<p><span style="font-size: 16px">metadata:</span></p>
<p><span style="font-size: 16px"> name: myapp</span></p>
<p><span style="font-size: 16px"> namespace: default</span></p>
<p><span style="font-size: 16px">spec:</span></p>
<p><span style="font-size: 16px"> type: NodePort</span></p>
<p><span style="font-size: 16px"> selector:</span></p>
<p><span style="font-size: 16px"> app: myapp</span></p>
<p><span style="font-size: 16px"> release: stabel</span></p>
<p><span style="font-size: 16px"> ports:</span></p>
<p><span style="font-size: 16px"> - name: http</span></p>
<p><span style="font-size: 16px"> port: 8080</span></p>
<p><span style="font-size: 16px"> targetPort: 8080</span></p>
<p><span style="font-size: 16px"> nodePort: 30080</span></p>
<p><span style="font-size: 16px"> </span></p>
<p><span style="font-size: 16px">创建<span style="font-family: Calibri">svc: kubectl apply -f </span>svc-nodePort.yaml</span></p>
</td>
</tr>
</tbody>
</table>
<p><span style="font-size: 16px"><span style="font-family: 宋体"><strong>问题:</strong>在构建过程中,</span>svc-nodePort.yaml<span style="font-family: 宋体">一直没写</span><span style="font-family: Calibri">nodePort</span><span style="font-family: 宋体">,导致创建成功,但一直访问失败,需要更加熟悉熟悉</span></span></p>
<p><span style="font-size: 16px"> </span></p>
<p><span style="font-size: 16px"><span style="font-family: 宋体">查看</span>pod<span style="font-family: 宋体">,看是否构建成功</span></span></p>
<p><span style="font-size: 16px"> <img src="https://img2018.cnblogs.com/blog/1455597/201910/1455597-20191018171723544-1963285846.png" alt=""></span></p>
<p><span style="font-size: 16px"><span style="font-family: 宋体">查看</span>svc<span style="font-family: 宋体">,并访问</span><span style="font-family: Calibri">nodePort</span></span></p>
<p><span style="font-size: 16px"> <img src="https://img2018.cnblogs.com/blog/1455597/201910/1455597-20191018171731425-2100527759.png" alt=""></span></p>
<p><span style="font-size: 16px"><span style="font-family: 宋体">最后,访问</span> ip<span style="font-family: 宋体">地址:</span><span style="font-family: Calibri">30080</span><span style="font-family: 宋体">(根据自身设置的为准)</span></span></p>
<p><span style="font-size: 16px"> <img src="https://img2018.cnblogs.com/blog/1455597/201910/1455597-20191018171740640-425717612.png" alt=""></span></p>
<p><span style="font-size: 16px"><span style="font-family: 宋体">访问成功,但没页面,根据我的</span>jar<span style="font-family: 宋体">包,加</span><span style="font-family: Calibri">/hello</span><span style="font-family: 宋体">,访问成功</span></span></p>
<p><span style="font-size: 16px"> <img src="https://img2018.cnblogs.com/blog/1455597/201910/1455597-20191018171751504-339423346.png" alt=""></span></p>
<h1><span style="font-size: 18pt">六、总结</span></h1>
<p><span style="font-size: 16px"><span style="font-family: 宋体"> 看起来就一点的篇幅,本以为很快就能搞定的东西,写出来也花了我近一个小时,果然,什么事都不能想当然啊。这只是一个很基础的练习,没有添加太多的东西,但我却在其中周周转转了一两周之久,网上也没有找到适合我自己这种超级小白的资料,每一个现在看起来超级白痴的问题,在当时却足以让我寸步难行。自学这种事,可真</span>TMD<span style="font-family: 宋体">让人眼瞎,理不清主干思想,抓不住重点,把握不住节奏,做的也不够完善。但无论怎么样,那怕自己是一只胖菜鸟,今天也终于挥动了一下翅膀,不值得骄傲,却值得留念</span><span style="font-family: Calibri">!</span></span></p>
<p><span style="font-size: 16px"> <span style="font-family: 宋体">望每一个在学习道路上踽踽独行的人都能守得云开见月明!</span></span></p>
<p><span style="font-size: 16px"><span style="font-family: 宋体"> 2019-10-18打卡,今天也是FPX 小凤凰S9小组第一出现的日子,小IG,RNG冲鸭!!!<br></span></span></p>
<p> </p>
</div>
<div id="MySignature" role="contentinfo">
万丈高楼平地起,勿在浮沙筑高台!<br><br>
来源:https://www.cnblogs.com/LiuQizhong/p/11699528.html
頁:
[1]