在Kubernetes上的Tomcat中部署WAR

时间:2019-01-24 07:31:47

标签: java docker tomcat kubernetes

我需要创建一个Multibranch Jenkins作业以在Tomcat中部署一个应在Kubernetes上运行的.war文件。基本上,我需要以下内容:

  1. 在Kubernetes平台上安装Tomcat的方法。
  2. 在这个新安装的Tomcat上部署我的war文件。

我需要利用{{1}}来做到这一点。

PS:我对Kubernetes和Docker知识还很陌生,也需要基本的细节。我尝试查找教程,但未获得满意的文章。

任何帮助都会受到高度赞赏。

1 个答案:

答案 0 :(得分:6)

Docker部分

您可以使用tomcat docker official image

在您的Dockerfile中,只需将战争文件复制到/usr/local/tomcat/webapps/目录中即可:

FROM tomcat

COPY app.war /usr/local/tomcat/webapps/

构建它:

docker build --no-cache -t <REGISTRY>/<IMAGE>:<TAG> .

构建映像后,将其推送到您选择的Docker注册表中。

docker push <REGISTRY>/<IMAGE>:<TAG>

Kubernetes部分

1)这是用于您的tomcat图像的简单kubernetes Deployment

apiVersion: apps/v1
kind: Deployment
metadata:
  name: tomcat-deployment
  labels:
    app: tomcat
spec:
  replicas: 1
  selector:
    matchLabels:
      app: tomcat
  template:
    metadata:
      labels:
        app: tomcat
    spec:
      containers:
      - name: tomcat
        image: <REGISTRY>/<IMAGE>:<TAG>
        ports:
        - containerPort: 8080

此部署定义将基于您的tomcat映像创建一个pod。

将其放入yml文件,然后执行kubectl create -f yourfile.yml进行创建。

2)创建一个Service

kind: Service
apiVersion: v1
metadata:
  name: tomcat-service
spec:
  selector:
    app: tomcat
  ports:
  - protocol: TCP
    port: 80
    targetPort: 8080

您现在可以使用http://tomcat-service.your-namespace/app访问集群中的Pod(因为您的战争称为app.war

3)如果您拥有Ingress controller,则可以创建一个Ingress ressource,以将应用程序公开到集群之外:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: tomcat-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - http:
      paths:
      - path: /app
        backend:
          serviceName: tomcat-service
          servicePort: 80

现在使用http://ingress-controller-ip/app

访问应用程序