Meta:
Conocer el flujo de trabajo de openshift
Objetivos:
- Automatizar el despliegue de aplicaciones con openshift
Secciones:
- Gestión aplicaciones
Laboratorios:
-Despliegue de webserver con contenido desde un git
-Despliegue de middleware con contenido desde un git
-Despliegue de middleware con aplicaciones incluidas
-Despliegue de aplicaciones en cluster
Requisitos:
- Satellite
- RHEL client
Ingresamos los datos del usuario0X
Iniciamos sesion con el usuario creado
Creamos un nuevo repositorio
Nombremos este repositorio website y que no sea privado
Con el repositorio creado pero sin archivos ingresamos a nuestro estacion linux e iniciamos sesion con el usuario alumno0X
# oc login -u alumno08
Cambiamos al proyecto website0X
# oc project website08
Descargamos el contenido del repositorio website desde el ftp del salon
# wget ftp://192.168.10.190/openshift/website.tar.gz
Descomprimimos e ingresamos al contenido
# tar -xzvf website.tar.gz
# cd website/
Procedemos a poblar el repositorio del gIt con nuestros archivos descargados, si tuviera problemas para cargar los archivos use el usuario root o el comando sudo + git o sino reemplazar la opcion -u por -f
# touch README.md
# git init
# git add *
# git commit -m "first commit"
# git remote add origin http://192.168.10.190:3000/alumno08/website.git
# git push -u origin master
Regresamos a la pagina del git y validamos la creacion del contenido web
En el terminal logueado, descargamos desde el ftp del salon una imagen de podman de php
# cd
# wget ftp://192.168.10.190/openshift/php-70-rhel7.tar
Cargamos esta imagen en el podman local
# podman load -i php-70-rhel7.tar
Verificamos la disponibilidad de la imagen
# podman image list
Importamos esta imagen a nuestro proyecto website
# oc import-image registry.access.redhat.com/rhscl/php-70-rhel7 --confirm
# oc get is
Desplegamos esta imagen en un app llamado website y que su contruccion referencie a nuestro git con el contenido propio
# oc new-app php-70-rhel7~http://192.168.10.190:3000/alumno08/website.git --name=website
Verificamos el despliegue de la aplicacion
# oc logs -f buildconfig/website
Publicamos la aplicacion
# oc expose service/website
Verificamos la ruta de publicacion para validarla por navegador web
# oc get routes
Ingresamos a un navegador y verificamos
Como parte del ejercicio, vamos a actualizar el contenido web y mostrar el flujo de redespliegue de aplicaciones sin afectar el sistema en produccion, para ello primero ingresamos a la carpeta de website y actualizamos algun contenido
# cd website/
# vi index.html
Cambiamos alguna linea del index como Our Company como Alumno0X Company
Registramos el cambio en el git y lo sincronizamos, si tuviera problemas para cargar los archivos use el usuario root o el comando sudo + git o sino reemplazar la opcion -u por -f
# git add inde x.html
# git commit -m "actualizacion 01" index.html
# git push -u origin master
Como el despliegue sique apuntando al mismo git, solo debemos invocar un redespliegue
# oc start-build website
Verificamos el proceso de actualizacion
# oc logs -f buildconfig/website
Ingresamos a un navegador y verificamos el cambio
- Crear el usuario alumno0X en el git del salon http://192.168.10.190:3000
- Crear un repositorio llamado website y poblarlo con el archivo comprimido descargado desde el ftp del salon
- Desplegar con openshift un servidor php con la imagen de podman disponible en el ftp del salon
- Actualizar alguna pagina del repositorio git y actualizar el despliegue del servidor web
- Despues de validar su trabajo recupere los recursos con oc delete all --all
Vamos a reutilizar la cuenta de alumno0X del git del salon y creamos un nuevo repositorio
Creamos el repositorio no privado llamado jboss
Volvemos al cliente openshift y nos logueamos a la plataforma
# oc login -u alumno08
Cambiamos al proyecto jboss08
# oc project jboss08
Descargamos el contenido del repositorio jboss desde el ftp del salon
# wget ftp://192.168.10.190/openshift/jboss.tar.gz
Descomprimimos e ingresamos al contenido
# tar -xzvf jboss.tar.gz
# cd jboss/
Procedemos a poblar el repositorio del gIt con nuestros archivos descargados, si tuviera problemas para cargar los archivos use el usuario root o el comando sudo + git o sino reemplazar la opcion -u por -f
# touch README.md
# git init
# git add *
# git commit -m "first commit"
# git remote add origin http://192.168.10.190:3000/alumno08/jboss.git
# git push -u origin master
Regresamos a la pagina del git y validamos la creacion del contenido web
Para despliegue de jboss con openshift, necesitamos componentes adiconales al recurso en git, el primero de ellos es el template de despliegue, el cual esta cargado en el proyecto openshift y podemos examinar con el comando
# oc get template eap73-basic-s2i -n openshift -o yaml
Al examinar el template vemos que este utiliza la imagen jboss-eap73-openshift:7.3 como base para el despliegue, por lo tanto debemos verificar si esa imagen existe en el sistema
# oc get is jboss-eap73-openshift -n openshift -o yaml
Con los compoenentes disponibles en la plataforma, podemos realizar el despliegue
# oc new-app --template=eap73-basic-s2i -p SOURCE_REPOSITORY_URL=http://192.168.10.190:3000/alumno08/jboss.git -p SOURCE_REPOSITORY_REF=master -p CONTEXT_DIR=kitchensink
Validamos el correcto despliegue de la aplicacion con
# oc logs -f buildconfig/eap-app-build-artifacts
Una vez finalizado el despliegue despues de 2 o 3 minutos, monitorizamos los pods creados hasta que aparesca uno diferente a los build o deploy con
# watch oc get pods
Una vez se cree el pod que no sea build ni deploy, verificamos la direccion url con
# oc get routes
Considerar la navegacion por https
Con el comando oc get pods, identificamos el pod que no sea deploy o build y la hacemos una sesion remota
[root@client08 ~]# oc get pods
NAME READY STATUS RESTARTS AGE
eap-app-1-deploy 0/1 Completed 0 4m13s
eap-app-1-kd55b 1/1 Running 0 4m11s
eap-app-2-build 0/1 Completed 0 5m16s
eap-app-build-artifacts-1-build 0/1 Completed 0 7m13s
[root@client08 ~]# oc rsh eap-app-1-kd55b
Desde el terminal del pod descargamos un proyeco de prueba desde el ftp
$ cd /tmp
$ curl ftp://192.168.10.190/openshift/sample.war -o sample.war
Ingresamos a al jboss-cli del pod
$ /opt/eap/bin/jboss-cli.sh --connect
Verificamos los proyectos deplegados
deployment-info
En la lista de proyectos, solo debera aparecer el ROOT.war que es la ventana de inicio default, ahora agregamos el proyecto sample.war
deploy sample.war
Volvemos a verficar la lista de proyectos desplegados
deployment-info
Desde un navegados volvemos a examinar el jboss pero ahora el sitio /sample
- Crear un repositorio git llamado jboss y poblarlo con el archivo comprimido descargado desde el ftp del salon
- Desplegar el servidor jboss con los recursos disponibles desde openshift
- Descargue el sample.war desde su servidor ftp y agreguelo como proyecto de jboss
- Despues de validar su trabajo recupere los recursos con oc delete all --all
En este ejercicio vamos a crear un servidor de aplicaciones, pero con aplicaciones precargadas desde el inicio
Nos logueamos al proyecto tomcat0X donde realizaremos las operaciones
# oc project tomcat08
Creamos un directorio para el despliegue de aplicaciones
# mkdir tomcat
# cd tomcat
Descargamos desde el ftp del salon un proyecto llamado calendar
# wget ftp://192.168.10.190/openshift/calendar.war
Renombramos el proyecto calendar a ROOT el cual sera definido como el proyecto default
# mv calendar.war ROOT.war
Creamos el directorio deployments y colocamos ahi el ROOT.war
# mkdir deployments
# mv ROOTwar deployments/
# ls deployments/
Verificamos que contamos con una imagen de tomcat8 en el proyecto openshift
# oc get imagestream -n openshift | grep tomcat8
Con la imagen seleccionada, importamos esta imagen en nuestro proyecto tomcat0X
# oc import-image image-registry.openshift-image-registry.svc:5000/openshift/jboss-webserver31-tomcat8-openshift:1.0 --confirm
Construimos la imagen llamada tomcat8 la cual sera la base del despliegue, recuerdemos estar parados dentro de la carpeta tomcat
# oc new-build jboss-webserver31-tomcat8-openshift:1.0 --name=tomcat8 --binary=true
# oc start-build tomcat8 --from-dir=. --follow=true --wait=true
Varificamos la construccion de la imgen y su disponibilidad
# oc get is
Con la imagen lista, hacemos un despliegue llamado calendar tomando la imagen de tomcat8 que ya incluye al calendar.war
# oc new-app tomcat8 --name calendar
Publicamos la aplicacion calendar
# oc expose service/calendar
Verificamos la ruta
# oc get routes
Validamos con un navegador web
- En el proyecto tomcat0X construya su imagen de tomcat8 con el proyecto calendar.war como como aplicacion default
- Despliegue y valide su aplicacion con el calendario como pagina default
- Despues de validar su trabajo recupere los recursos con oc delete all --all
En este ejemplo vamos a desplegar un webserver que se comporte como un cluste de altadisponibilidad
Primero nos logueamos al git del salon http://192.168.10.190:3000
Creamos un nuevo repositorio
Creamos el repositorio cluster
Iniciamos el contenido del git desde el terminal de linux
# mkdir cluster
# cd cluster/
# touch README.md
# git init
# git add README.md
Creamos el archivo index,php con un contenido que nos permita distinguir cada nodo de cluster
# vi index.php
<?php
echo gethostname();
echo php_uname('n');
?>
Guardamos los cambios en el git
# git add index.php
# git commit -m "first commit"
# git remote add origin http://192.168.10.190:3000/alumno08/cluster.git
# git push -u origin master
Nos logueamos al proyecto cluster0X
# oc project cluster08
Desplegamos el webserver con el contenido desde el git
# oc new-app --template=cakephp-example -p SOURCE_REPOSITORY_URL=http://192.168.10.190:3000/alumno08/cluster.git
Verificamos los pods creados, esperemos al menos 1 minuto a que el pod que no sea build o deploy termine de iniciar como 1/1
# oc get pods
Cuando el pod este listo lo podemos validar visitanto el url que aparece en
# oc get routes
Validamos que el index.php nos muestre un hostname similar al pod que lo aloja
Como nuestro cluster solo cuenta con 1 nodo inicial, validemos que el deploymentConfig con
# oc get dc
# oc get dc/cakephp-example -o yaml | grep replicas
Podemos modificar el dc para que tenga 3 replicas en lugar de 1
# oc scale --replicas=3 dc/cakephp-example
abrimos nuevas pestañas de navegador en modo incognito y verificamos que otros nodos resuelvan las peticiones del cluster
En caso el navegador no refresque la nueva sesion, borre cache o sino intente con el explorador por linea de comandos
# curl http://cakephp-example-cluster08.apps.cluster.opennovalabs.pe
- En el proyecto cluster0X despliegue un cluster de php con su contenido propio que permita identificar el nodo consultado
- Modifique el cluster para que cuente con 4 nodos de cluster y valide la disponibilidad de mas de 1 nodo
- Despues de validar su trabajo recupere los recursos con oc delete all --all
- Despues de validar su trabajo recupere los recursos con oc delete secrets cakephp-example