os02 - gpulido-redhat/workshopclaro GitHub Wiki

Red Hat Openshift Container Platform - Openshift and Kubernetes

Meta:
- Entendimiento de Kubernetes y Openshift.

Objetivos:
- Conceptos de Kubernetes y Openshift (Teórico)

Secciones:
- Introducción a tecnología de Kubernetes. (Teórico)
- Introducción a Red Hat Openshift Container platform. (Teórico)
- Administrando contenedores con Openshift. (Demostración)

Laboratorios:
- Creando contenedores en Openshift. (Teórico)

Introducción a tecnología de Kubernetes. (Teórico)

¿Qué es kubernetes?

Kubernetes o k8s o "kube" para ser breves, es una plataforma open source que automatiza las operaciones de los contenedores de Linux. Elimina muchos de los procesos manuales involucrados en la implementación y escalabilidad de las aplicaciones en contenedores. En otras palabras, puede crear un clúster de grupos de hosts que ejecutan contenedores de Linux, y Kubernetes lo ayuda a administrar con facilidad y eficacia esos clústeres. Estos clústeres pueden abarcar hosts en nubes públicas, privadas o híbridas. Por este motivo, Kubernetes es la plataforma ideal para alojar aplicaciones nativas de la nube que requieren una expansión rápida

¿Por qué necesito Kubernetes y qué puede hacer por mi?

Kubernetes tiene varias características. Puedes pensar en Kubernetes como:

  • una plataforma de contenedores
  • una plataforma de microservicios
  • una plataforma portable de nube

Kubernetes ofrece un entorno de administración centrado en contenedores. Kubernetes orquesta la infraestructura de cómputo, redes y almacenamiento para que las cargas de trabajo de los usuarios no tengan que hacerlo. Esto ofrece la simplicidad de las Plataformas como Servicio (PaaS) con la flexibilidad de la Infraestructura como Servicio (IaaS) y permite la portabilidad entre proveedores de infraestructura.

Arquitectura Kubernetes

Tipos de recursos Kubernetes

Los recursos kubernetes pueden tener definiciones en json o yaml dentro de archivos de configuración donde se indica su metadata y especificaciones. Entre ellos tenemos:

Pod

Un Pod (como una vaina de ballenas o una vaina de guisantes) es un grupo de uno o más contenedores, con almacenamiento compartido y recursos de red, y una especificación sobre cómo ejecutar los contenedores.

Ejemplo de podfile.yaml

apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  containers:
  - name: nginx
    image: nginx:1.14.2
    ports:
    - containerPort: 80

Service

Un servicio es una abstracción que define un conjunto lógico de pods y una política para acceder a ellos. El conjunto de pods a los que se dirige un servicio suele estar determinado por un selector. El servicio funge como un balanceador de carga interno para la red de pods.

Ejemplo de un service.yaml

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  selector:
    app: MyApp
  ports:
    - protocol: TCP
      port: 80
      targetPort: 9376

Ingress (Kubernetes)

Ingress expone rutas HTTP y HTTPS desde fuera del clúster a servicios dentro del clúster. El enrutamiento del tráfico se controla mediante reglas definidas en el recurso Ingress.

Ejemplo de ingress.yaml

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: minimal-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - http:
      paths:
      - path: /testpath
        pathType: Prefix
        backend:
          service:
            name: test
            port:
              number: 80

Route (Openshift)

Los enrutadores OpenShift proporcionan asignación de nombre de host externo y equilibrio de carga a los servicios a través de protocolos que pasan información distintiva directamente al enrutador; el nombre de host debe estar presente en el protocolo para que el enrutador determine dónde enviarlo.

Ejemplo de route.yaml

apiVersion: v1
kind: Route
metadata:
  name: frontend
spec:
  host: www.example.com
  path: "/test" 
  to:
    kind: Service
    name: frontend

Deployment y DeploymentConfig

Describe el estado deseado de un componente particular de la aplicación como una plantilla de Pod.

ReplicationController y ReplicaSets

Garantiza que se esté ejecutando una cantidad específica de réplicas de un pod en todo momento.

Introducción a tecnología a Red Hat Openshift. (Teórico)

¿Qué es Red Hat Openshift?

Red Hat OpenShift es la plataforma de Kubernetes empresarial líder en el sector, la cual se diseñó especialmente para formar parte de una estrategia de nube híbrida abierta. Gracias a que ofrece operaciones automatizadas integrales, una experiencia uniforme en todos los entornos y la implementación de autoservicio para los desarrolladores, los equipos pueden trabajar en conjunto para llevar las ideas de la etapa de desarrollo a la de producción de manera más eficiente.

Componentes que agrega Openshift

Arquitectura Openshift

Comparativa Kubernetes vs Openshift

Entendiendo el flujo de BuildConfig, ImageStream y Deployment en Openshift.



Administración de contenedores con Openshift. (Demostración)

Configuración de espacio de trabajo

Con el usuario developer configurar el espacio de trabajo de la siguiente forma.

[developer@client09 ~]$ sudo yum install -y bind-utils net-tools tree git bash-completion vim wget 

[developer@client09 ~]$  mkdir ~/bin ; cd ~/bin
[developer@client09 bin]$ wget ftp://classroom.opennova.pe/openshift/openshift-client-linux-4.8.14.tar.gz
[developer@client09 bin]$ tar -zxvf openshift-client-linux-4.8.14.tar.gz
[developer@client09 bin]$ mv openshift-client-linux-4.8.14.tar.gz README.md ~/

Agregar al final del archivo ~/.bashrc la siguiente linea:

export PATH=$PATH:$HOME/bin

[developer@client09 bin]$ cd ~
[developer@client09 ~]$ vim .bashrc
[developer@client09 ~]$ source .bashrc
[developer@client09 ~]$ oc --help

Configurar el autocompletado del comando oc

[developer@client09 ~]$ oc completion bash > ~/oc_completion
[developer@client09 ~]$ sudo cp ~/oc_completion /etc/bash_completion.d/oc_completion
[developer@client09 ~]$ source /etc/bash_completion.d/oc_completion
[developer@client09 ~]$ oc <TAB>

Validar el login con el usuario alumno0X donde X es el numero de su usuario del 1 al 6.

[developer@client09 ~]$ wget ftp://classroom.opennova.pe/openshift/ingress-ca.crt
[developer@client09 ~]$ oc login -u alumno09 -p redhat https://api.cluster.opennovalabs.pe:6443 --certificate-authority=ingress-ca.crt
[developer@client09 ~]$ oc whoami

Configurar Github

FORK
Logearse a su cuenta personal de Github. Una vez logueado proceda a abrir una ventana en el mismo navegador y copie y pegue la ruta indicada abajo.

https://github.com/workshopopennova/wsopenshift

Luego darle click en la parte superior derecha donde indicar fork, le pedirá seleccionar su cuenta Github y darle aceptar.

PERSONAL TOKEN
Para configurar su token personal una vez logueado a Github ingrese a:

https://github.com/settings/profile

Diríjase a la opción de Developer settings, luego seleccione Personal access tokens y de click al botón Generate new token

Le pedirá logearse posiblemente para confirmar su identidad

Ingresar los siguientes datos:

Nombre: openshift Expiration: 30 days Checkbox: repo > public_repo

Y darle click al boton Generate token

En la siguiente pantalla copiar en un lugar seguro el token ya que con eso se autenticara en cualquier operación vía Github para el manejo de repositorios.

1. Desplegar una aplicación php-helloworld en openshift (Reemplazar dev09 por dev0X donde X es su usuario del 1 al 6)
Para todos los proyectos donde se indique: https://github.com/username/wsopenshift, reemplazar por su usuario github, este contenido esta documentado con un usuario github en particular, debe hacerlo con su usuario.

[developer@client09 ~]$ oc login -u alumno09 -p redhat https://api.cluster.opennovalabs.pe:6443
[developer@client09 ~]$ oc new-project dev09-php-helloworld --description="PHP Project" --display-name="PHP-Helloworld"
Now using project "dev09-php-helloworld" on server "https://api.cluster.opennovalabs.pe:6443".

You can add applications to this project with the 'new-app' command. For example, try:

    oc new-app rails-postgresql-example

to build a new example application in Ruby. Or use kubectl to deploy a simple Kubernetes application:

    kubectl create deployment hello-node --image=k8s.gcr.io/serve_hostname
[developer@client09 ~]$ oc get projects
NAME                   DISPLAY NAME     STATUS
dev09-php-helloworld   PHP-Helloworld   Active
[developer@client09 ~]$ oc new-app --name hello --strategy=source --code=https://github.com/jaimemarianoz/wsopenshift --context-dir=php-helloworld -l app=hello
--> Found image b0f24be (5 weeks old) in image stream "openshift/php" under tag "7.4-ubi8" for "php"

    Apache 2.4 with PHP 7.4
    -----------------------
    PHP 7.4 available as container is a base platform for building and running various PHP 7.4 applications and frameworks. PHP is an HTML-embedded scripting language. PHP attempts to make it easy for developers to write dynamically generated web pages. PHP also offers built-in database integration for several commercial and non-commercial database management systems, so writing a database-enabled webpage with PHP is fairly simple. The most common use of PHP coding is probably as a replacement for CGI scripts.

    Tags: builder, php, php74, php-74

    * The source repository appears to match: php
    * A source build using source code from https://github.com/jaimemarianoz/wsopenshift will be created
      * The resulting image will be pushed to image stream tag "hello:latest"
      * Use 'oc start-build' to trigger a new build

--> Creating resources with label app=hello ...
    imagestream.image.openshift.io "hello" created
    buildconfig.build.openshift.io "hello" created
    deployment.apps "hello" created
    service "hello" created
--> Success
    Build scheduled, use 'oc logs -f buildconfig/hello' to track its progress.
    Application is not exposed. You can expose services to the outside world by executing one or more of the commands below:
     'oc expose service/hello'
    Run 'oc status' to view your app.
[developer@client09 ~]$ oc logs -f buildconfig/hello
[developer@client09 ~]$ oc get bc
NAME    TYPE     FROM   LATEST
hello   Source   Git    1
[developer@client09 ~]$ oc get deployment
NAME    READY   UP-TO-DATE   AVAILABLE   AGE
hello   1/1     1            1           2m
[developer@client09 ~]$ oc get is
NAME    IMAGE REPOSITORY                                                              TAGS     UPDATED
hello   image-registry.openshift-image-registry.svc:5000/dev09-php-helloworld/hello   latest   About a minute ago
[developer@client09 ~]$ oc get pods -o wide
NAME                     READY   STATUS      RESTARTS   AGE     IP             NODE                               NOMINATED NODE   READINESS GATES
hello-1-build            0/1     Completed   0          2m21s   10.128.1.189   master01.cluster.opennovalabs.pe   <none>           <none>
hello-6c7d8cd87d-k82d9   1/1     Running     0          108s    10.128.1.190   master01.cluster.opennovalabs.pe   <none>           <n 
[developer@client09 ~]$ oc get service
NAME    TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)             AGE
hello   ClusterIP   172.30.122.1   <none>        8080/TCP,8443/TCP   2m38s
[developer@client09 ~]$ oc describe pod
[developer@client09 ~]$ oc describe service hello
[developer@client09 ~]$ oc describe bc hello
[developer@client09 ~]$ oc describe deployment hello
[developer@client09 ~]$ oc describe is hello
[developer@client09 ~]$ oc get events
[developer@client09 ~]$ oc get pods
[developer@client09 ~]$ oc logs hello-6c7d8cd87d-k82d9
=> sourcing 20-copy-config.sh ...
---> 18:29:59     Processing additional arbitrary httpd configuration provided by s2i ...
=> sourcing 00-documentroot.conf ...
=> sourcing 50-mpm-tuning.conf ...
=> sourcing 40-ssl-certs.sh ...
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 10.128.1.190. Set the 'ServerName' directive globally to suppress this message
[Sat Dec 04 18:30:00.051103 2021] [ssl:warn] [pid 1] AH01909: 10.128.1.190:8443:0 server certificate does NOT include an ID which matches the server name
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 10.128.1.190. Set the 'ServerName' directive globally to suppress this message
[Sat Dec 04 18:30:00.134555 2021] [ssl:warn] [pid 1] AH01909: 10.128.1.190:8443:0 server certificate does NOT include an ID which matches the server name
[Sat Dec 04 18:30:00.134757 2021] [lbmethod_heartbeat:notice] [pid 1] AH02282: No slotmem from mod_heartmonitor
[Sat Dec 04 18:30:00.134861 2021] [http2:warn] [pid 1] AH10034: The mpm module (prefork.c) is not supported by mod_http2. The mpm determines how things are processed in your server. HTTP/2 has more demands in this regard and the currently selected mpm will just not do. This is an advisory warning. Your server will continue to work, but the HTTP/2 protocol will be inactive.
[Sat Dec 04 18:30:00.306733 2021] [mpm_prefork:notice] [pid 1] AH00163: Apache/2.4.37 (Red Hat Enterprise Linux) OpenSSL/1.1.1g configured -- resuming normal operations
[Sat Dec 04 18:30:00.306757 2021] [core:notice] [pid 1] AH00094: Command line: 'httpd -D FOREGROUND'
[developer@client09 ~]$ oc expose service hello
route.route.openshift.io/hello exposed
[developer@client09 ~]$ oc get route
NAME    HOST/PORT                                                 PATH   SERVICES   PORT       TERMINATION   WILDCARD
hello   hello-dev09-php-helloworld.apps.cluster.opennovalabs.pe          hello      8080-tcp                 None
[developer@client09 ~]$ curl -si http://hello-dev09-php-helloworld.apps.cluster.opennovalabs.pe
HTTP/1.1 200 OK
date: Sat, 04 Dec 2021 18:34:32 GMT
server: Apache/2.4.37 (Red Hat Enterprise Linux) OpenSSL/1.1.1g
content-length: 35
content-type: text/html; charset=UTF-8
set-cookie: 6efbc8f823d8b0001397c9caf4e1d211=106de72b1015ff6ea7e9278e16d6ac3e; path=/; HttpOnly
cache-control: private

Hello, World! php version is 7.4.6

Depurar el contenido del proyecto

[developer@client09 ~]$ oc delete project dev09-php-helloworld

2. Desplegar contenido actualizado de la aplicacion php-helloworld en openshift

[developer@client09 ~]$ cd ~

[developer@client09 ~]$ git clone https://github.com/jaimemarianoz/wsopenshift.git

[developer@client09 ~]$ cd ~/wsopenshift

[developer@client09 ~]$ git config credential.helper cache

[developer@client09 ~]$ git config --global user.name "Jaime Zamudio"

[developer@client09 ~]$ git config --global user.email "[email protected]"

[developer@client09 ~]$ git config --list

[developer@client09 ~]$ cd ~/wsopenshift

[developer@client09 ~]$ git checkout master

[developer@client09 ~]$ git status

[developer@client09 ~]$ git checkout -b custom-php

[developer@client09 ~]$ git push -u origin custom-php

Username for 'https://github.com': <username>
Password for 'https://<username>@github.com':

[developer@client09 ~]$ git status

[developer@client09 ~]$ cd ~/wsopenshift/php-helloworld 

Crear un archivo phpinfo.php con el siguiente contenido:

[developer@client09 ~]$ vim phpinfo.php

<?php
// Muestra toda la información, por defecto INFO_ALL
phpinfo();

// Muestra solamente la información de los módulos.
// phpinfo(8) hace exactamente lo mismo.
phpinfo(INFO_MODULES);
?>

[developer@client09 ~]$ git status

[developer@client09 ~]$ git add phpinfo.php

[developer@client09 ~]$ git commit -m "Adding phpinfo file"

[developer@client09 ~]$ git push

Username for 'https://github.com': <username>
Password for 'https://<username>@github.com':

[developer@client09 ~]$ git status

[developer@client09 ~]$ oc new-project dev09-custom-php --description="Custom PHP Project" --display-name="Custom PHP-Helloworld"

[developer@client09 ~]$ oc get projects

[developer@client09 ~]$ oc new-app --name custom-php --strategy=source --code=https://github.com/jaimemarianoz/wsopenshift#custom-php --context-dir=php-helloworld -l app=hello

[developer@client09 ~]$ oc logs -f bc/custom-php

[developer@client09 ~]$ oc get pods

[developer@client09 ~]$ oc get svc

# Exponer el servicio indicando su usuario en la opción de X

[developer@client09 ~]$ oc expose service custom-php --hostname=custom-php0X.apps.cluster.opennovalabs.pe

[developer@client09 ~]$ oc get route

[developer@client09 ~]$ curl -si http://custom-php.apps.cluster.opennovalabs.pe

[developer@client09 ~]$ curl -si http://custom-php.apps.cluster.opennovalabs.pe/phpinfo.php | grep -A 3 "<title>"

[developer@client09 ~]$ cd ~/wsopenshift/php-helloworld

[developer@client09 ~]$ git status

[developer@client09 ~]$ vim index.php

<?php
print "Custom Hello, World! php version is " . PHP_VERSION . "\n";
print "Autor: <Nombre> <Apellido> \n";
?>

[developer@client09 ~]$ git commit -a -m "Adding Custom text and Author"

[developer@client09 ~]$ git push

Username for 'https://github.com': <username>
Password for 'https://<username>@github.com':

[developer@client09 ~]$ git status

[developer@client09 ~]$ oc start-build custom-php --follow 

[developer@client09 ~]$ oc get build
NAME           TYPE     FROM          STATUS     STARTED          DURATION
custom-php-1   Source   Git@bf11a73   Complete   42 minutes ago   1m48s
custom-php-2   Source   Git@240e0bf   Complete   22 minutes ago   1m8s

[developer@client09 ~]$ oc get pods
NAME                         READY   STATUS      RESTARTS   AGE
custom-php-1-build           0/1     Completed   0          42m
custom-php-2-build           0/1     Completed   0          22m
custom-php-8b6d6f5bb-7h9wk   1/1     Running     0          21m

[developer@client09 ~]$ curl -si http://custom-php.apps.cluster.opennovalabs.pe
HTTP/1.1 200 OK
date: Sat, 04 Dec 2021 01:26:55 GMT
server: Apache/2.4.37 (Red Hat Enterprise Linux) OpenSSL/1.1.1g
content-length: 65
content-type: text/html; charset=UTF-8
set-cookie: a133e24155be23e44d01d9c7b58567ee=546f1e5ca370c5b3a54e0ddda246f6c7; path=/; HttpOnly
cache-control: private

Custom Hello, World! php version is 7.4.6
Author: <Nombre> <Apellido>

[developer@client09 ~]$ oc delete project dev09-custom-php

3. Crear un Proyecto Web en Openshift

[developer@client09 ~]$ cd ~/wsopenshift

[developer@client09 ~]$ git checkout master

[developer@client09 ~]$ git status

[developer@client09 ~]$ git checkout -b custom-global

[developer@client09 ~]$ git push -u origin custom-global

[developer@client09 ~]$ git status

[developer@client09 ~]$ oc new-project dev09-global --description="Global Website Project" --display-name="Global Web Site" 

[developer@client09 ~]$ oc new-app --name global httpd~http://github.com/jaimemarianoz/wsopenshift#custom-global --context-dir global

[developer@client09 ~]$ oc logs -f buildconfig/global

[developer@client09 ~]$ oc get pods

# Exponer el servicio indicando su usuario en la opción de X

[developer@client09 ~]$ oc expose service global --hostname=global0X.apps.cluster.opennovalabs.pe

[developer@client09 ~]$ oc get route

[developer@client09 ~]$ curl -si http://global.apps.cluster.opennovalabs.pe

[developer@client09 ~]$ firefox http://global.apps.cluster.opennovalabs.pe

[developer@client09 ~]$ cd ~/wsopenshift/global

[developer@client09 ~]$ vim index.html

# modificar la linea 51 de Your next a Claro
51 <h1>Claro<br>interactive<br>experience</h1>

[developer@client09 ~]$ git commit -a -m "Index.html updated"

[developer@client09 ~]$ git push

[developer@client09 ~]$ git status

[developer@client09 ~]$ oc start-build global --follow

[developer@client09 ~]$ curl -si http://global.apps.cluster.opennovalabs.pe | grep Claro

[developer@client09 ~]$ firefox http://global.apps.cluster.opennovalabs.pe

[developer@client09 ~]$ oc delete project dev09-global

4. Crear un base de datos efimera a traves de una imagen de contenedor Docker.

[developer@client09 ~]$ oc new-project dev09-mysql-openshift

[developer@client09 ~]$ oc new-app --as-deployment-config \
--name mysql-openshift \
--docker-image=registry.access.redhat.com/rhscl/mysql-57-rhel7:latest \
-e MYSQL_USER=user9 -e MYSQL_PASSWORD=redhat -e MYSQL_DATABASE=samples -e MYSQL_ROOT_PASSWORD=Passw0rd$

[developer@client09 ~]$ oc get pods

[developer@client09 ~]$ cd ~

[developer@client09 ~]$ wget ftp://classroom.opennova.pe/openshift/podman/samples.sql

[developer@client09 ~]$ oc cp /home/developer/samples.sql mysql-openshift-1-762pc:/tmp

[developer@client09 ~]$ oc rsh mysql-openshift-1-762pc

sh-4.2$ env | grep ^MYSQL

sh-4.2$ mysql -u$MYSQL_USER -p$MYSQL_PASSWORD $MYSQL_DATABASE < /tmp/samples.sql

sh-4.2$ mysql -u$MYSQL_USER -p$MYSQL_PASSWORD $MYSQL_DATABASE

mysql> use sample;

mysql> show tables;

mysql> describe Items;

mysql> Select * from Items;

exit
exit

[developer@client09 ~]$ oc delete project mysql-openshift

5. Postgresql

[developer@client09 ~]$ oc new-project dev09-postgresql

[developer@client09 ~]$ oc get template postgresql-ephemeral -n openshift -o yaml > ~/postgresql-ephemeral

[developer@client09 ~]$ oc process --parameters -f ~/postgresql-ephemeral

[developer@client09 ~]$ oc process -f postgresql-ephemeral -p DATABASE_SERVICE_NAME=postgresql -p POSTGRESQL_USER=jaime -p POSTGRESQL_PASSWORD=redhat -p POSTGRESQL_DATABASE=sample -p POSTGRESQL_VERSION=latest -l db=postgresql | oc create -f -

[developer@client09 ~]$ oc get pods

[developer@client09 ~]$ oc rsh postgresql-1-kg476

sh-4.2$ env | grep ^POST

sh-4.2$ psql

postgres=# \l

postgres=# \q

exit

[developer@client09 ~]$ oc delete project dev09-postgresql

6. Jboss EAP

[developer@client09 ~]$ oc new-project eap-demo

[developer@client09 ~]$ wget ftp://classroom.opennova.pe/openshift/eapdemo-secret.yaml

[developer@client09 ~]$ oc create -f eapdemo-secret.yaml

[developer@client09 ~]$ oc import-image jboss-eap-7/eap73-openjdk11-openshift-rhel8 --from=registry.redhat.io/jboss-eap-7/eap73-openjdk11-openshift-rhel8 --confirm

[developer@client09 ~]$ oc replace --force   -f https://raw.githubusercontent.com/jboss-container-images/jboss-eap-openshift-templates/eap73/templates/eap73-basic-s2i.json

[developer@client09 ~]$ oc replace --force   -f https://raw.githubusercontent.com/jboss-container-images/jboss-eap-7-openshift-image/7.3.x/templates/eap73-openjdk11-image-stream.json

[developer@client09 ~]$ oc new-app --template=eap73-basic-s2i  -p IMAGE_STREAM_NAMESPACE=eap-demo  -p SOURCE_REPOSITORY_URL=https://github.com/jboss-developer/jboss-eap-quickstarts  -p SOURCE_REPOSITORY_REF=7.3.x-openshift  -p CONTEXT_DIR=kitchensink

[developer@client09 ~]$ oc logs -f buildconfig/eap-app-build-artifacts

[developer@client09 ~]$ oc logs -f buildconfig/eap-app

[developer@client09 ~]$ oc get pods

[developer@client09 ~]$ oc get route

[developer@client09 ~]$ firefox https://eap-app-eap-demo.apps.cluster.opennovalabs.pe

[developer@client09 ~]$ oc delete project eap-demo
  1. Desplegar un aplicativo php con el framework cakephp via consola grafica.

Abrir un navegador en firefox y entrar a: https://console-openshift-console.apps.cluster.opennovalabs.pe

El usuario es: alumno0X (donde X es el numero de su usuario del 1 al 6) EL password es: redhat

Seguir los pasos descritos en las imágenes.

Al crear el proyecto adicionar su numero de usuario Ejemplo: cakeapp0X

Laboratorio: Containers with Openshift

NOTA:

  • Las tareas a ejecutarse serán en la estación client0X.opennova.pe, donde X es el numero de usuario del 1 al 6 respectivamente.
  • En el caso de solicitar la creación de algún usuario nuevo utilizar userX donde X es el numero de usuario del 1 al 6 respectivamente y la contraseña será redhat.

Requerimientos:

1. Desplegar una aplicación utilizando el repositorio fork wsopenshift en su cuenta personal

  • El nombre de la aplicación será: myapp
  • El codigo esta en GitHub: https://github.com//wsopenshift
  • El context-dir es: php-helloworld
  • Deberá tener una etiqueta app=hello
  • Exponer la aplicación con el nombre: myapp.apps.cluster.opennovalabs.pe
  • Verificar el funcionamiento con: curl -si http://myapp.apps.cluster.opennovalabs.pe

2. Implementar un contendor httpd con la siguiente información:

Moverse inicialmente al branch master con el comando: git checkout master Crear un nuevo branch de nombre dev-php y moverse a este: git checkout -b dev-php ; git push -u origin dev-php ; git status Crea un proyecto de nombre: dev0X-php (donde X es el numero de su usuario del 1 al 6) Crear un nuevo despliegue con los siguientes datos:

  • El nombre de la aplicación será: dev-php
  • La estrategia de despliegue será: source
  • El código será: https://github.com//wsopenshift#dev-php
  • El directorio de contexto será: php-helloworld
  • Crear una etiqueta app=dev
  • Exponer el servicio dev-php con el hostname: dev-php.apps.cluster.opennovalabs.pe

Hacer una modificación al index.html para que contenga:

<?php
print "Custom Hello, World! php version is " . PHP_VERSION . "\n";
print "Autor: <Nombre> <Apellido> \n";
?>

Guardar los cambios con: git commit -a -m "Adding Custom text and Author" y pushear con git push

Arrancar un nuevo build con el comando: oc start-build custom-php --follow

Validar con el comando curl -si http://dev-php.apps.cluster.opennovalabs.pe o firefox http://dev-php.apps.cluster.opennovalabs.pe que los cambios esten reflejados.

3. Implementar un contenedor mysql efímero con la siguiente información: Crear un contenedor mysql efimero con la siguiente informacion:

El nombre de la aplicacion sera: mysql La imagen sera: registry.access.redhat.com/rhscl/mysql-57-rhel7:latest Crear el aplicativo con la opcion de: --as-deployment-config Usar las siguientes variables:

  • MYSQL_USER=userX
  • MYSQL_PASSWORD=redhat
  • MYSQL_DATABASE=samples
  • MYSQL_ROOT_PASSWORD=Passw0rd$

Descargar el archivo samples.sql de: wget ftp:/classroom.opennova.pe/openshift/podman/samples.sql

Copiarla al directorio /tmp del pod mysql: Utilizar el comando oc cp

Conectarse al contenedor con el comando: oc rsh

Importar la base de datos con el comando: mysql -u$MYSQL_USER -p$MYSQL_PASSWORD $MYSQL_DATABASE < /tmp/sample.sql

Dentro del contenedor conectarse al mysql con el comando: mysql -u$MYSQL_USER -p$MYSQL_PASSWORD $MYSQL_DATABASE

Y hacer una consultar: USE Samples; Describe Items; Select * from Items;

4. Desplegar un proyecto web:

  • El nombre del proyecto sera: dev0x-webserver
  • El nombre del aplicativo sera: webserver
  • Para la imagen y contenido utilizar: global httpd~http://github.com//wsopenshift#custom-global
  • Directorio de contenido: --context-dir global
  • Exponer el servicio con el hostname: webserver.apps.cluster.opennovalabs.pe
  • Validar el contenido con firefox://webserver.apps.cluster.opennovalabs.pe

5. Desplegar un aplicativo por el framework cackephp por la interfaz grafica

  • El nombre del proyecto sera: dev0X-cakphp
  • El nombre del aplicativo sera: myphp
  • Se creara este recurso utilizando el builder php
  • El repositorio github es: https://github.com/openshift/cakephp-ex.git
  • Publicarlo con el nombre: myphp.apps.cluster.opennovalabs.pe

Para la interfaz grafica sus credenciales son: usuario: alumno0X ( donde X es el numero de su usuario del 1 al 6) password: redhat

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