Openshift. Creación de imagen Java y despliegue sin GIT.

Habitualmente estamos acostumbrados a las facilidades que nos da Openshift (y Kubernetes) a la hora de crear imágenes y desplegarlas cuando nuestro código fuente está en GIT. Pero se nos puede dar el caso en el que nuestro código esté en otro repositorio, y queramos automatizar la creación y despliegue de imágenes lo máximo posible. En este post intentaremos facilitar un poco el camino para llevarlo a cabo.

La estratégia que vamos a utilizar es considerar que previamente nos hemos descargado a una ubicación local el binario (jar) que vamos a desplegar.

Para crear la imagen primero debemos crear un espacio de configuración donde le vamos a decir que imagen base vamos a utilizar, denominado buildconfig (bc), y que estrategia vamos a seguir para el despliegue de nuestro código:

  • –name: Nombre de la nueva imagen.
  • –binary:True para especificar que le vamos a pasar un binario y no una ubicacion de git con el código fuente.
  • –strategy: Estrategia de construcción de imagen. (source=s2i)
  • –image-stream: Imagen base.
oc new-build --name <nombre-imagen> --binary=true --strategy=source --image-stream openshift/openjdk18-openshift:1.5

Queremos que la imagen se cree con un tag específico en lugar del tag «latest». Para esto vamos a modificar el BuildConfig que se ha creado para especificar la versión que queremos.

oc patch bc/<nombre-imagen> --patch '{"spec": { "output":  { "to": {"name":"<nombre-imagen>:1.0.0"}}}}' -n <namespace>

Tras esto creamos la imagen. Para la creación de la imagen usaremos la aplicación s2i que Openshift trae integrada. En este caso solo tenemos que ejecutar el comando start-build, al que le indicamos la imagen y le pasamos el jar que queremos ejecutar en la nueva imagen.

oc start-build <nombreimagen> --from-file=<path_al_binario>/binario.jar

Ahora la imagen ya ha sido creada, pero no se está ejecutando. Para ejecutarla:

oc new-app <nombreimagen>:<versión> 

Con esto ya tenemos la imagen ejecutándose, pero aún no es accesible, para hacerla accesible:

oc expose svc/<nombreimagen>

Puede ser que necesitemos pasarle algún valor a la imagen para la correcta ejecución. Tenemos 2 formas de hacer esto, o bien incorporamos las variables en el própio comando oc new-app haciendo uso de la opción -e :

oc new-app <nombreimagen>:<versión> -e variable=valor… variable=valor -n 

Otra opción, puede ser pasárselos una vez desplegada la imagen. Esto implica la recreación de los pods que estén corriendo con esa imagen para que coja los cambios.

oc set env dc/<nombreimagen> vble1=valor1 vble2=valor2 ... vblen=valorn

Si queremos incorporar Secretos, lo primero a hacer, es crear un fichero con los secretos, por ejemplo:

apiVersion: v1
kind: Secret
metadata:
  name: test-secret-json
  namespace: c360-inte-bck
data:
  username: dmFsdWUtMQ0K
  password: dmFsdWUtMQ0KDQo=
stringData:
  hostname: myapp.mydomain.com
  secret.properties: |-
    property1=valueA
    property2=valueB

Lo guardamos en local y lo aplicamos a nuestro openshift:

oc create secret generic  --from-file= <nombreficherosecrets>.json

Con esto ya tenemos una imagen corriendo en nuestro entorno de openshift. Para saber como acceder a nuestra aplicación, tenemos que preguntar a openshift que ruta le ha dado al ejecutar el comando oc expose

oc get route <nombreimagen>

Esto es todo. He intentado generalizar las instrucciones, te las dejo todas juntas por para que veas la secuencia completa. Si detectas algún error o tienes alguna sugerencia/mejora, no dudes en dejarnos un comentario.

Que pases un feliz día.

Chuleta de comandos utilizados:

----Crear  Imagen----
oc new-build --name <nombre-imagen> --binary=true --strategy=source --image-stream openshift/openjdk18-openshift:1.5

oc patch bc/<nombre-imagen> --patch '{"spec": { "output": { "to": {"name":"<nombre-imagen>-<versiónmajor>:<X.Y.Z-R>"}}}}' -n <namespace>

oc start-build <nombre-imagen> --from-file=<ruta>/<nombreservicio>.jar -n <namespace>

----Despliegue----
oc new-app <nombre-imagen>:<X.Y.Z-R> -e variable=valor... variable=valor -n <namespace>

oc expose svc/<nombre-imagen> --name=<nombre-imagen>

Read More

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *