Despliegue de aplicaciones Java en OpenShift

Parece que esto es así? Conectamos fabric8-maven-plugin al proyecto y vamos: compilar, ejecutar la aplicación en OpenShift. Pero cuando estudié, quería comprender mejor este proceso, y luego quería más control y libertad sobre el proceso de construcción y despliegue de la aplicación en OpenShift. Por lo tanto, el siguiente escenario resultó con tales características.

  • Construyo el artefacto yo mismo, con mi herramienta (maven, gradle, etc.)
  • Yo controlo la creación de Docker Image a través del Dockerfile
  • El proceso de compilación e implementación en Openshift se configura en la plantilla, es decir cualquier especificación de contenedor, pod son personalizables.
  • Por lo tanto, el proceso en sí puede transferirse a un ensamblaje externo, sistema de implementación

Por supuesto, para esto utilizo las funciones disponibles de OpenShift, que son abundantes.
Entonces, tengo un artefacto java preparado, luego preparo un Dockerfile con las características y la funcionalidad que necesito

Dockerfile

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" ]

Por lo tanto, habrá dos archivos en la carpeta: el artefacto y el Dockerfile.



La composición de los archivos es condicional, si, por ejemplo, en Dockerfile se necesitan archivos adicionales para la imagen de Docker, los agregamos aquí. Ahora, en el Dockerfile, se especifican la imagen básica de Java y mi aplicación de arranque Spring, dos puertos están abiertos, etc.

En este paso, tenemos la opción / libertad en la herramienta para construir la aplicación y ensamblar la imagen del acoplador.

Luego, preparo la plantilla OpenShift para la aplicación, esta operación puede ser de una sola vez, solo necesita ser parametrizada. Dado que puede contener todo lo posible para crear, iniciar y operar la aplicación, administraremos estos procesos a través de ella. Será bastante simple para mí y constará de las tres configuraciones más necesarias.

  • Imagestream
  • Buildconfig
  • DeploymentConfig

Plantilla 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: {}


En la plantilla, algunos parámetros del contenedor se indican como un ejemplo, por ejemplo, recursos / límites, variable de entorno TZ, se especifica un parámetro de plantilla: nombre de la aplicación (APP_NAME). La dirección del acoplador del registro se especifica para la versión minishift (la uso localmente para el desarrollo 172.30.1.1/10000/myproject/) y otros.

Pero para mi escenario, lo más importante se indica aquí

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

BuildConfig dice que la fuente serán los archivos binarios, y para administrar la estrategia de preparación de imágenes de Docker - Dockerfile (tipo: Docker) Creemos

esta plantilla en OpenShift

 oc create -f template.yaml


Esta plantilla aparecerá en el directorio de plantillas (será posible organizar el proceso desde la consola de la interfaz de usuario web, pero no aquí).



Con esta plantilla, crearemos una aplicación (de hecho, esto es solo un nombre y no más)

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

especifique el nombre de la plantilla y el parámetro del nombre de la aplicación



Se han creado tres de mis configuraciones.

Iniciamos el proceso de montaje y despliegue de la aplicación en el contenedor.

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

Es importante ejecutar desde la carpeta donde se indican el archivo binario y el Dockerfile, solo el parámetro --from-dir indica que toda la carpeta estará preparada para cargar en OpenShift para construir e implementar la imagen en el registro de Docker. Hay otros parámetros de este comando, por ejemplo, del archivo.



Vemos que el contenido de la carpeta se cargó en OpenShift, que lanzó el proceso Docker para preparar la imagen para el Dockerfile y finalmente colocó la imagen en el registro de Docker.

La aplicación comenzó



en la consola web de OpenShift Los parámetros del contenedor



especificados en la configuración especificada en la variable de entorno de configuración



en el registro



Por lo tanto, sin complementos adicionales, con el máximo control y libertad de elección, logramos colocar la aplicación en OpenShift.

Materiales

Instalando Minishift
para aprender sobre OpenShift, recomiendo comenzar con Minishift

All Articles