美文网首页
基于kuberantes部署web应用

基于kuberantes部署web应用

作者: do_young | 来源:发表于2018-12-05 16:44 被阅读19次

    #背景
    有一个轻量级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配置文件,就可以将应用的服务开放出来了。

    相关文章

      网友评论

          本文标题:基于kuberantes部署web应用

          本文链接:https://www.haomeiwen.com/subject/scrszftx.html