基于kuberantes部署web应用

2018-12-05  本文已影响19人  do_young

#背景
有一个轻量级J2EE开发的应用程序,以前是以集群的方式跑在虚拟主机的tocmat上的。现在需要将其应用容器化,并运行在kubernates环境中。
要实现该目标,需要解决以下几个问题:
1.工程的容器化。(包括工程及tomact制作成镜像,并结合起来。)
2.容器化的应用集群部署。
3.将集群服务反向代理为统一访问入口。

该文档对以上问题的解决方式如下:
1.将tomcat与工程分开为独立镜像,工程镜像为initContainers方式附属在tomcat容器上。这样当工程更新时,只需要更新工程镜像本身就好了。
2.使用Deploymen对容器应用的集群部署。
3.使用Service对集群进行反向代理。(使用反向代理的描述不太准确,请客官不要太纠结于这个细节,明白我要表示的浅显的意思就可以了。)
下面是具体的实现步骤

实现步骤

制作tomcat镜像

大家都知道,在docker的官方镜像中就有tomcat的官方镜像,我们可以直接使用

docker pull tomcat:latest#或具体的版本号

命令就要以获取,但基本镜像在使用的时候,根据实际需要,需要做一些简单的改造,这个根据实际的需求来。以下是我基于tocmat的官方镜像进行的一些配置修改的Dockerfile:

FROM tomcat:latest
MAINTAINER doyoung<11790379@qq.com>
ARG DOCUMENT_PATH
ARG UPLOAD_PATH
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo "Asia/Shanghai" >> /etc/timezone
RUN rm /usr/local/tomcat/bin/catalina.sh
ADD catalina.sh /usr/local/tomcat/bin/
RUN chmod +x /usr/local/tomcat/bin/catalina.sh
RUN rm /usr/local/tomcat/conf/logging.properties
ADD logging.properties /usr/local/tomcat/conf/
WORKDIR /usr/local/tomcat/webapps/
RUN rm /usr/local/tomcat/conf/server.xml
ADD server.xml /usr/local/tomcat/conf/

RUN rm /usr/local/tomcat/conf/web.xml
ADD web.xml /usr/local/tomcat/conf/
VOLUME $DOCUMENT_PATH
VOLUME $UPLOAD_PATH
EXPOSE 8080
EXPOSE 443

然后通过简单的命令就可以生成一个自定义的tomcat镜像了。

docker build -t going/tomcat:latest --build-arg DOCUMENT_PATH=/root/project/go-nifty/document --build-arg UPLOAD_PATH=/root/project/go-nifty/upload .

生成工程镜像

这个只需要使用各种方式,将工程生成war包,然后使用最小的镜像将工程复制到镜像中即可,以下工程生成镜像的Dockerfile

FROM busybox:latest
MAINTAINER doyoung<duyang@going100.com>
ADD ./build/go-nifty.war ./

通过docker命令生成工程镜像

docker build -t going/go-nifty:latest -f DockerfileForQuestion .

部署工程

创建一个xx-deplyment.yaml文件,编辑如下:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: go-nifty-web-deployment
  namespace: default
spec:
  replicas: 2
  selector:
    matchLabels:
      tier: go-nifty-web
  template:
    metadata:
      labels:
        tier: go-nifty-web
    spec:
      initContainers:
      - image: going/go-nifty:latest
        imagePullPolicy: IfNotPresent
        name: war
        command: ["cp", "/go-nifty.war", "/app"]
        volumeMounts:
        - mountPath: /app
          name: app-volume      
      containers:
      - name: go-nifty-web-containers
        image: going/tomcat:v1
        imagePullPolicy: IfNotPresent
        ports:
          - containerPort: 8080
          - containerPort: 443
        volumeMounts:
          - mountPath: /usr/local/tomcat/webapps
            name: app-volume          
          - mountPath: /root/project/go-nifty/document
            name: document
          - mountPath: /root/project/go-nifty/upload
            name: upload    
          - mountPath: /usr/local/tomcat/logs
            name: logs               
      volumes:
      - name: app-volume
        emptyDir: {}                       

参照以上创建好deployment配置文件以后,就可用使用命令,部署应用了。

kubectl create -f xx-deployment.ymal

创建服务

创建一个xx-service.ymal文件,编辑如下:

apiVersion: v1
kind: Service
metadata:
  name: go-nifty-web-service
  namespace: default
spec:
  type: NodePort
  ports:
  - port: 80
    targetPort: 8080
    name: go-nifty-web-port
    nodePort: 80
  - port: 443
    targetPort: 443
    name: go-nifty-web-https-port
    nodePort: 443    
  selector:
    tier: go-nifty-web

通过以上的service配置文件,就可以将应用的服务开放出来了。

上一篇下一篇

猜你喜欢

热点阅读