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)
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
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.
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:
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
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 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
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
Describe el estado deseado de un componente particular de la aplicación como una plantilla de Pod.
Garantiza que se esté ejecutando una cantidad específica de réplicas de un pod en todo momento.
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.
[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
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 "jaimemarianoz@gmail.com"
[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
- 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
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