在 Kubernetes Docker 集群上部署 Java Spring Boot 或者 Tomcat_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > 在 Kubernetes Docker 集群上部署 Java Spring Boot 或者 Tomcat

在 Kubernetes Docker 集群上部署 Java Spring Boot 或者 Tomcat

 2018/10/17 21:45:40  wpp65  程序员俱乐部  我要评论(0)
  • 摘要:简介本文档介绍如何将SpringBoot或者JavaWeb应用通过Docker部署到Kubernetes集群。相关环境安装及准备本文不做介绍本文中Kubernets集群有两个节点192.168.210.128master192.168.210.129minion-1部署流程为1.打包应用2.Push应用3.部署应用4.发布服务相关技术介绍Kubernetes(kubelet,kubeadm,kubectl)DockerJDKMavenDockerfileMaven创建应用可以到http
  • 标签:net Java Tomcat Spring
简介
本文档介绍如何将Spring Boot 或者 Java Web 应用通过 Docker 部署到Kubernetes 集群。

相关环境安装及准备本文不做介绍

本文中Kubernets 集群有两个节点
192.168.210.128 master
192.168.210.129 minion-1

部署流程为
1. 打包应用
2. Push 应用
3. 部署应用
4. 发布服务




相关技术介绍
Kubernetes(kubelet,kubeadm,kubectl)
Docker
JDK
Maven
Dockerfile Maven


创建应用

可以到 http://start.spring.io/ 创建一个SpringBoot 的应用,在创建的时候,请选择Web 依赖,以方便部署到 Kubernetes 之后可以查看效果。

修改打包方式JAR为WAR
Spring Boot 应用默认打包方式为 jar,本示例为了演示如何在Tomcat中部署,需要将打包方式修改为war。
修改pom.xml文件
class="java"><groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>

<name>demo</name>
<description>Demo project for Spring Boot</description>


修改应用
修改Spring Boot 应用的 main 函数所在的类,使DemoApplication继承 SpringBootServletInitializer,这样可以演示如何以Java Web(Tomcat)方式来部署应用。添加RestController和RequestMapping方便后续查看部署结果。

@SpringBootApplication
@RestController
public class DemoApplication extends SpringBootServletInitializer {

   @RequestMapping("/")
   public String home() {
      return "Hello Docker World";
   }

   public static void main(String[] args) {
      SpringApplication.run(DemoApplication.class, args);
   }
}


验证应用
启动Spring Boot 应用,浏览器访问 http://localhost:8080/


打包Docker Image
添加Dockerfile Maven 依赖
修改pom.xml, 添加Dockerfile Maven 依赖。
dockerfile-maven-plugin 用于打包和上传 Docker Image。
<!-- tag::plugin[] -->
<plugin>
   <groupId>com.spotify</groupId>
   <artifactId>dockerfile-maven-plugin</artifactId>
   <version>1.3.6</version>
   <configuration>
      <repository>example/${project.artifactId}</repository>
      <buildArgs>
         <WAR_FILE>target/${project.build.finalName}.war</WAR_FILE>
      </buildArgs>
   </configuration>
</plugin>
<!-- end::plugin[] -->


Dockerfile Spring Boot 方式
FROM openjdk:8-jdk-alpine
VOLUME /tmp
ARG WAR_FILE
COPY ${WAR_FILE} app.war
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.war"]

Dockerfile Tomcat 方式
FROM tomcat:8
ARG WAR_FILE
COPY ${WAR_FILE} /usr/local/tomcat/webapps/app.war
CMD ["catalina.sh", "run"]


使用Maven build 应用
[root@localhost ~]# mvn clean install

使用dockerfile-maven-plugin打包并上传Docker镜像

[root@localhost ~]# mvn dockerfile:build



Image 上传完成后run image查看结果
[root@localhost ~]# docker images



[root@localhost ~]# docker run -p 8080:8080 -t example/demo


Spring Boot 方式访问
http://192.168.210.128:8080/


Java Web(Tomcat)方式访问
http://192.168.210.128:8080/

http://192.168.210.128:8080/app/

删除Container
根据 Container ID 先停止 Container,然后再删除 Container。
[root@localhost ~]# docker stop container_id


[root@localhost ~]# docker rm container_id

删除Image
根据Image ID 删除 Image
[root@localhost ~]# docker rmi image_id


部署Docker Image到Kubernetes

创建YAML文件
创建Kubernetes部署文件example-demo.yaml,其中包括deployment和service

apiVersion: apps/v1beta2
kind: Deployment
metadata:
  name: example-demo
  labels:
    app: example-demo
spec:
  replicas: 1
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      app: example-demo
  template:
    metadata:
      labels:
        app: example-demo
    spec:
      containers:
      - name: example-demo
        image: example/demo:latest
        ports:
        - containerPort: 8080
          protocol: TCP
        livenessProbe:
          httpGet:
            path: /
            port: 8080
          initialDelaySeconds: 30
          timeoutSeconds: 30
        imagePullPolicy: IfNotPresent
      # Comment the following tolerations if Dashboard must not be deployed on master
      tolerations:
      - key: node-role.kubernetes.io/master
        effect: NoSchedule

---
apiVersion: v1
kind: Service
metadata:
  name: example-demo
  labels:
    app: example-demo
spec:
  ports:
    - port: 8080
      targetPort: 8080
  selector:
    app: example-demo
  type: NodePort


部署Docker Image
[root@localhost ~]# kubectl create -f example-demo.yaml


查看Pod状态
[root@localhost ~]# kubectl get pods


[root@localhost ~]# kubectl describe pod example-demo-85fbc4b89d-rq8sr


查看Service
[root@localhost ~]# kubectl get services


[root@localhost ~]# kubectl describe service example-demo


验证部署结果



上一篇: 微信小程序的搜索高亮、自定义导航条等踩坑记录 下一篇: 没有下一篇了!
发表评论
用户名: 匿名