在OpenShift中部署Java应用程序

看来是这样吗?我们将fabric8-maven-plugin连接到项目,然后进行:在OpenShift中构建,运行应用程序。但是当我学习时,我想对这个过程有更多的了解,然后我希望对在OpenShift中构建和部署应用程序的过程有更多的控制和自由。因此,以下情况证明具有此类功能。

  • 我自己用工具(Maven,Gradle等)构建工件。
  • 我通过Dockerfile控制Docker Image的创建
  • Openshift中的构建和部署过程是在模板中配置的,即 任何容器规格,吊舱均可定制。
  • 因此,流程本身可以转移到外部组件,部署系统

当然,为此,我使用了OpenShift本身的可用功能,这些功能很多。
所以我准备了一个Java工件,然后准备了一个具有所需特性和功能的Dockerfile。

Docker文件

FROM openjdk

MAINTAINER Rylkov Alexander <arylkov@.>

COPY demo.springboot.mvn-0.0.1-SNAPSHOT.jar /deployments/app.jar

ENV JAVA_OPTS="$JAVA_OPTS -Xms500m -Xmx1024m"

EXPOSE 8080
EXPOSE 5005

ENTRYPOINT ["sh", "-c", "java $JAVA_OPTS -jar /deployments/app.jar" ]

因此,该文件夹中将有两个文件:工件和Dockerfile



,这些文件的构成是有条件的,例如,如果在Dockerfile中需要用于Docker映像的其他文件,我们在此处添加它们。现在,在Dockerfile中指定了基本的Java映像和Spring引导应用程序,两个端口都已打开,等等。

在这一步,我们可以选择/自由选择构建应用程序和组装Docker映像的工具。

接下来,我为应用程序准备OpenShift模板,此操作可以是一次性的,只需要参数化即可。由于它包含创建,启动和操作应用程序的所有可能,因此我们将通过它管理这些过程。对我来说这将非常简单,并且由三个最必要的配置组成

  • 图像流
  • 构建配置
  • 部署配置

模板java-app-sample
kind: Template
apiVersion: v1
metadata:
  labels:
    app: java-app-sample
  name: java-app-sample
  annotations:
    description: >-
      This example shows how to create a simple Java application in openshift
    tags: java
parameters:
  - name: APP_NAME
    description: application name
    value: app-sample
    required: true
objects:
  - kind: ImageStream
    apiVersion: v1
    metadata:
      name: "${APP_NAME}"
    spec:
      tags:
        - from:
            kind: DockerImage
            name: 172.30.1.1:5000/myproject/${APP_NAME}:latest
          name: latest
  - kind: BuildConfig
    apiVersion: v1
    metadata:
      name: "${APP_NAME}"
      labels:
        name: "${APP_NAME}"
    spec:
      source:
        binary: {}
        type: Binary
      strategy:
        type: Docker
      output:
        to:
          kind: DockerImage
          name: 172.30.1.1:5000/myproject/${APP_NAME}:latest
      postCommit: {}
      resources: {}
  - kind: DeploymentConfig
    apiVersion: v1
    metadata:
      name: "${APP_NAME}"
    spec:
      strategy:
        type: Rolling
        rollingParams:
          updatePeriodSeconds: 1
          intervalSeconds: 1
          timeoutSeconds: 120
        resources: {}
      replicas: 1
      selector:
        app: "${APP_NAME}"
      template:
        metadata:
          labels:
            app: "${APP_NAME}"
        spec:
          containers:
            - name: "${APP_NAME}"
              image: 172.30.1.1:5000/myproject/${APP_NAME}:latest
              ports:
                - containerPort: 8080
                  protocol: TCP
                - containerPort: 5005
                  protocol: TCP
              env:
                - name: TZ
                  value: Europe/Moscow
              resources:
                limits:
                  cpu: '0.5'
                  memory: 1000Mi
                requests:
                  cpu: '0.2'
                  memory: 500Mi
              imagePullPolicy: Always
          restartPolicy: Always
          dnsPolicy: ClusterFirst
    triggers:
      - type: ConfigChange
        imageChangeParams:
          automatic: true
          containerNames:
            - "${APP_NAME}"
          from:
            kind: ImageStreamTag
            name: 172.30.1.1:5000/myproject/${APP_NAME}:latest
      - type: ImageChange
    status: {}


在模板中,以一些容器参数为例,例如,资源/限制,TZ环境变量,指定了一个模板参数-应用程序名称(APP_NAME)。注册表泊坞地址是为minishift版本指定的(我在本地将其用于开发172.30.1.1►000/ myproject /)和其他名称,

但对于我的情况,最重要的地方在此处显示

  - kind: BuildConfig
    spec:
      source:
        binary: {}
        type: Binary
      strategy:
        type: Docker

BuildConfig表示源将为二进制文件,并管理Docker映像准备策略-Dockerfile(类型:Docker)

让我们在OpenShift中创建此模板

 oc create -f template.yaml


该模板将显示在模板目录中(可以从Web UI控制台组织该过程,但不能在此处进行组织)。



使用此模板,我们将创建一个应用程序(实际上,这只是一个名称,仅此而已)

oc new-app java-app-sample -p APP_NAME=app-sample

指定模板名称和应用程序名称参数



我的三个配置已创建。

我们开始在容器中组装和部署应用程序。

>oc start-build app-sample --from-dir . --follow

从指示二进制文件和Dockerfile的文件夹中执行非常重要,仅--from-dir参数指示整个文件夹将准备好加载到OpenShift中,以在Docker注册表中构建和部署映像。该命令还有其他参数,例如来自归档文件的参数。



我们看到文件夹的内容已加载到OpenShift中,OpenShift启动了Docker进程以为Dockerfile准备映像,最后将映像放置在Docker注册表中。

该应用程序是



OpenShift Web控制台中启动的,该容器参数 是在日志



中的配置环境变量



指定的配置中指定的。



因此,在没有其他插件的情况下,我们具有最大的控制权和选择自由度,我们设法将应用程序放置在OpenShift中。

用料

安装Minishift
以了解OpenShift,建议从Minishift开始

All Articles