os03 - gpulido-redhat/workshopclaro GitHub Wiki

OpenShift Dia 3

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


## Despliegue de webserver con contenido desde un git

Antes de desplegar el servidor web desde el cliente de openshift, ingresamos al git privado de la clase disponible en http://192.168.10.190:3000 y creamos una cuenta de alumno0X

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


## Laboratorio 01


- 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


## Despliegue de middleware con contenido desde un git

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


## Laboratorio 02


- 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


## Despliegue de middleware con aplicaciones incluidas

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


## Laboratorio 03


- 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


## Despliegue de aplicaciones en cluster

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


## Laboratorio 04


- 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


⚠️ **GitHub.com Fallback** ⚠️