Implementación de aplicaciones en Red Hat OpenShift en Azure con OpenShift Serverless

En este artículo, va a implementar una aplicación en un clúster de Red Hat OpenShift en Azure con OpenShift Serverless. OpenShift Serverless ayuda a los desarrolladores a implementar y ejecutar aplicaciones que se escalarán verticalmente o se reducirán a cero a petición. Esto elimina el consumo de recursos cuando no están en uso.

El código de la aplicación puede empaquetarse en un contenedor junto con los runtime adecuados. La funcionalidad sin servidor iniciará los contenedores de aplicaciones cuando un evento los desencadene. Puede desencadenar aplicaciones a través de varios eventos: desde sus propias aplicaciones, desde varios proveedores de servicios en la nube, sistemas de software como servicio (SaaS) y otros servicios.

Puede usar características integradas de la interfaz de OpenShift para administrar todos los aspectos de la implementación de contenedores sin servidor. Los desarrolladores pueden identificar visualmente qué eventos impulsan el inicio de las aplicaciones en contenedores. También hay varias maneras de modificar los parámetros de evento. Las aplicaciones de OpenShift Serverless pueden integrarse con otros servicios de OpenShift, como OpenShift Pipelines, Service Mesh y Monitoring. Esto proporciona una experiencia completa de implementación y desarrollo de aplicaciones sin servidor.

Antes de comenzar

Crear un clúster

Siga el tutorial para crear un clúster de Red Hat OpenShift en Azure. Si decide instalar y usar la interfaz de la línea de comandos (CLI) de forma local, en este tutorial necesitará usar la CLI de Azure versión 2.6.0 o posterior. Ejecute az --version para buscar la versión actual. Si necesita instalarla o actualizarla, vea Instalación de la CLI de Azure.

Conectarse al clúster

Para administrar un clúster de Red Hat OpenShift en Azure, debe usar oc, el cliente de línea de comandos de OpenShift.

Nota:

Se recomienda instalar la línea de comandos de OpenShift en Azure Cloud Shell y usarla para todas las operaciones de línea de comandos de este artículo. Abra Shell desde shell.azure.com o seleccione el vínculo:

Button to launch Azure Cloud Shell

Siga el tutorial para instalar su CLI, recuperar sus credenciales del clúster y conectarse al clúster con la consola web y la CLI de OpenShift.

Una vez que haya iniciado sesión, debería ver un mensaje que indica que está usando el proyecto default.

Login successful.

You have access to 61 projects, the list has been suppressed. You can list all projects with 'oc projects'

Using project "default".

Instalación de la interfaz la línea de comandos de Knative (kn)

Descargue la versión más reciente de la interfaz de la línea de comandos (CLI) adecuada para la máquina de https://github.com/knative/client/releases/

Si ejecuta comandos en Azure Cloud Shell, descargue la CLI más reciente de Knative para Linux.

cd ~
wget https://github.com/knative/client/releases/download/v0.22.0/kn-linux-amd64

mkdir knative
chmod +x kn-linux-amd64
mv kn-linux-amd64 knative/kn
echo 'export PATH=$PATH:~/knative' >> ~/.bashrc && source ~/.bashrc

Abra la sesión de la consola web de OpenShift

Busque la dirección URL de la consola web del clúster co la ejecución del siguiente script:

 az aro show \
    --name <cluster name> \
    --resource-group <resource group> \
    --query "consoleProfile.url" -o tsv

Debería obtener una URL similar a la siguiente.

https://console-openshift-console.apps.wzy5hg7x.eastus.aroapp.io/

Abra un explorador web y abra la URL de la consola. Regístrese usando las credenciales de kubeadmin.

A screenshot that shows the Azure Red Hat OpenShift log-in screen

Instalación del operador de OpenShift Serverless

Cuando haya iniciado sesión en la consola web de OpenShift, confirme que está en la vista de Administrador. Abra Operator Hub (Centro de operadores), seleccione el operador OpenShift Serverless.

A screenshot that shows the position of the OpenShift Serverless operator.

A continuación, abra la página de instalación del operador seleccionando Install (Instalar).

A screenshot that shows how to select Install to install the operator.

Elija el canal de actualización adecuado para la versión del clúster de Red Hat OpenShift en Azure e instale el operador en el espacio de nombres openshift-serverless. Desplácese hacia abajo y seleccione Instalar.

A screenshot that shows the Operator installation page.

En unos minutos, la página de estado refleja que el operador está instalado y está listo para su uso. Seleccione en el botón View Operator (Ver operador) para continuar.

A screenshot that shows the status page with the operator installed and ready for use.

Instalación de Knative Serving

La opción de ejecutar un contenedor de forma sin servidor en OpenShift Serverless es posible mediante el uso de Knative ascendente. Knative amplía Kubernetes para proporcionar un conjunto de componentes que implementan, ejecutan y administran aplicaciones modernas a través de su metodología sin servidor.

Creación de una instancia de Knative Serving

En la esquina superior izquierda de la ventana, en la lista Projects (Proyectos), seleccione knative-server. A continuación, en el panel Provided APIs (API proporcionadas), seleccione Create Inslance (Crear instancia) en la tarjeta Knative Serving.

A screenshot that shows where to select to create a Knative Service instance.

En la página Create Knative Serving(Crear servicio Knative), mantenga todos los valores predeterminados. Desplácese hacia abajo y seleccione el botón Create (crear).

A screenshot that shows the default values listed in the form.

OpenShift Serverless se instala cuando la columna Status (Estado) muestra Ready (Listo). Ahora ya está listo para crear un proyecto sin servidor de OpenShift.

A screenshot that shows that the Knative Serving is ready.

Creación de un proyecto sin servidor

Para crear un nuevo proyecto denominado demoserverless, ejecute el comando siguiente:

oc new-project demoserverless

La salida debe ser similar a la siguiente:

Now using project "demoserverless" on server "https://api.wzy5hg7x.eastus.aroapp.io:6443".

You can add applications to this project with the 'new-app' command. For example, build a new example application in Python with the following:

    oc new-app django-psql-example

Or use kubectl to deploy a simple Kubernetes application:

    kubectl create deployment hello-node --image=gcr.io/hello-minikube-zero-install/hello-node

Vamos a cambiar de la vista Administrador a la vista Programador. Vaya a la lista de proyectos en el menú izquierdo y seleccione demoserverless. Ahora está en la página Topology (Topología) del proyecto.

A screenshot that shows Azure Red Hat OpenShift project topology.

Implementación mediante la consola web

En la página Topology (Topología), seleccione Desde Git. En la página Importar desde Git, use https://github.com/sclorg/django-ex.git como dirección URL del repositorio de Git. Una aplicación web de ejemplo se implementa con el lenguaje de programación Python.

A screenshot that shows Azure Red Hat OpenShift project from within Git.

Nota:

OpenShift detecta que se trata de un proyecto de Python y selecciona la imagen del compilador adecuada.

Desplácese hasta Resources (Recursos) y confirme que Knative Service (Servicio Knative) está seleccionado como el tipo de recurso que se va a generar. Esta acción creará un servicio Knative, un tipo de implementación que permite el escalado de OpenShift Serverless a cero cuando está inactivo.

A screenshot that shows how to select the Knative Service.

En la parte inferior de la página, seleccione Create (Crear). Esto crea recursos para administrar la compilación e implementación de la aplicación. A continuación, se le redirigirá a la información general de la topología del proyecto.

La información general de la topología proporciona una representación visual de la aplicación que ha implementado. Puede ver la estructura general de la aplicación.

Espere a que la compilación finalice. Esto puede tardar unos minutos. Cuando se complete la compilación, aparece una marca de verificación verde en la esquina inferior izquierda del servicio.

A screenshot that shows a checkmark that indicates that the build is complete.

Visualización de la escala de la aplicación

En la parte superior de la vista Topology (Topología), en la lista Display Options(Opciones de visualización), haga clic en Pod Count (Número de pods). Espere a que el número de pods se reduzca verticalmente a cero pods. La reducción vertical puede tardar algunos minutos.

A screenshot that shows the Pod count when it has scaled to zero.

En la esquina superior derecha del panel del servicio Knative, seleccione el icono Open URL (Abrir dirección URL). La aplicación se abre en una nueva pestaña de explorador web. Cierre la nueva pestaña y vuelva a la vista Topology (Topología). Una vez allí, puede ver que la aplicación se ha escalado verticalmente a un pod para dar cabida a su solicitud. Al cabo de unos minutos, la aplicación se vuelve a reducir verticalmente a cero pods.

A screenshot that shows the application scaled up to Pod.

Forzado de una nueva revisión y establecimiento de la distribución del tráfico

Los servicios Knative permiten la asignación de tráfico, lo que significa que las revisiones de un servicio se pueden asignar a una parte asignada del tráfico. Con cada actualización de configuración del servicio, se crea una nueva revisión. De forma predeterminada, la ruta de servicio apunta todo el tráfico a la revisión lista más reciente. Para cambiar este comportamiento, defina qué revisión obtiene partes del tráfico. La asignación de tráfico también proporciona una opción para crear direcciones URL únicas para revisiones individuales.

En la Topology (Topología) creada, seleccione la revisión que se muestra dentro del servicio para ver sus detalles. Las notificaciones debajo el anillo del pod y en la parte superior del panel de detalles deben ser (REV). En el panel lateral, en la pestaña Resources (Recursos), desplácese hacia abajo y seleccione la configuración asociada al servicio.

A screenshot that shows the Pod ring.

Para forzar una actualización de configuración, cambie a la pestaña YAML y desplácese hacia abajo para editar el valor de timeoutSeconds. Cambie el valor a 301. Seleccione Guardar. En un escenario real, las actualizaciones de configuración también se pueden desencadenar mediante la actualización de la etiqueta de imagen de contenedor.

A screenshot that shows how to force a new revision by updating the configuration.

Vuelva a la vista Topology (Topología) y verá que se ha implementado una nueva revisión. Seleccione el servicio que termina con el distintivo (KSVC) y seleccione el botón Set Traffic Distribition (Establecer distribución de tráfico). Ahora debería poder dividir el tráfico entre las revisiones del servicio.

A screenshot that shows how to set traffic distribution.

La vista Topology (Topología) ahora mostrará cómo se distribuye el tráfico entre las revisiones.

A screenshot that shows how to review traffic distribution.

Instalación de la interfaz la línea de comandos de Knative (kn)

En pasos anteriores, ha usado la consola web de OpenShift para crear e implementar una aplicación en OpenShift Serverless. Dado que OpenShift Serverless ejecuta Knative por debajo, también puede utilizar la interfaz de línea de comandos Knative (kn) para crear servicios Knative.

Nota:

Si aún no ha instalado la CLI de kn, asegúrese de seguir los pasos descritos en la sección requisitos previos de este artículo. Asegúrese también de que ha iniciado sesión con la interfaz de línea de comandos de OpenShift oc.

Vamos a usar una imagen de contenedor que ya se ha creado en quay.io/rhdevelopers/knative-tutorial-greeter.

Implementación de un servicio

Para implementar el servicio, ejecute el siguiente comando:

kn service create greeter \
--image quay.io/rhdevelopers/knative-tutorial-greeter:quarkus \
--namespace demoserverless \
--revision-name greeter-v1

Verá una salida similar a la siguiente.

Creating service 'greeter' in namespace 'demoserverless':

  0.044s The Route is still working to reflect the latest desired specification.
  0.083s ...
  0.114s Configuration "greeter" is waiting for a Revision to become ready.
 10.420s ...
 10.489s Ingress has not yet been reconciled.
 10.582s Waiting for load balancer to be ready
 10.763s Ready to serve.

Service 'greeter' created to latest revision 'greeter-v1' is available at URL:
http://greeter-demoserverless.apps.wzy5hg7x.eastus.aroapp.io

Para recuperar una lista de rutas en el proyecto, ejecute:

kn route list

Volverá a obtener una lista de rutas en el espacio de nombres. Abra la dirección URL en un explorador web para ver el servicio implementado.

NAME      URL                                                            READY
greeter   http://greeter-demoserverless.apps.wzy5hg7x.eastus.aroapp.io   True

Implementación de una nueva versión del servicio

Implemente una nueva versión de la aplicación mediante la ejecución del comando siguiente y pasando la etiqueta de imagen :latest y una variable de entorno MESSAGE_PREFIX:

kn service update greeter \
 --image quay.io/rhdevelopers/knative-tutorial-greeter:latest \
 --namespace demoserverless \
 --env MESSAGE_PREFIX=GreeterV2 \
 --revision-name greeter-v2

Recibirá una confirmación de que se ha implementado una nueva revisión, greeter-v2.

Updating Service 'greeter' in namespace 'demoserverless':

  5.029s Traffic is not yet migrated to the latest revision.
  5.086s Ingress has not yet been reconciled.
  5.190s Waiting for load balancer to be ready
  5.332s Ready to serve.

Service 'greeter' updated to latest revision 'greeter-v2' is available at URL:
http://greeter-demoserverless.apps.wzy5hg7x.eastus.aroapp.io

Para ver una lista de todas las revisiones y su distribuciones de tráfico, ejecute el siguiente comando:

kn revision list

Obtendrá una lista similar a la salida siguiente. Tenga en cuenta que, en este caso, la nueva revisión recibe el 100 % del tráfico.

NAME            SERVICE   TRAFFIC   TAGS   GENERATION   AGE     CONDITIONS   READY   REASON
greeter-v2      greeter   100%             2            90s     3 OK / 4     True
greeter-v1      greeter                    1            5m32s   3 OK / 4     True

Implementaciones azul-verde y controladas

Cuando se implementa una nueva revisión, de forma predeterminada se le asigna el 100 % del tráfico. Supongamos que quiere implementar una estrategia de implementación azul-verde donde pueda revertir rápidamente a la versión anterior de la aplicación. Knative lo pone fácil.

Puede actualizar el servicio para crear tres etiquetas de tráfico al asignarles el 100 % del tráfico.

  • current (actual): apunta a la versión implementada actualmente
  • prev (anterior): apunta a la versión anterior
  • latest (más reciente): siempre apunta a la versión más reciente
kn service update greeter \
   --tag greeter-v2=current \
   --tag greeter-v1=prev \
   --tag @latest=latest

Recibirá una confirmación similar a la siguiente.

Updating Service 'greeter' in namespace 'demoserverless':

  0.037s Ingress has not yet been reconciled.
  0.121s Waiting for load balancer to be ready
  0.287s Ready to serve.

Service 'greeter' with latest revision 'greeter-v2' (unchanged) is available at URL:
http://greeter-demoserverless.apps.wzy5hg7x.eastus.aroapp.io

Enumere las rutas con el comando siguiente:

kn route describe greeter

Recibirá una salida que muestra las direcciones URL de cada una de las etiquetas junto con la distribución del tráfico.

Name:       greeter
Namespace:  demoserverless
Age:        10m
URL:        http://greeter-demoserverless.apps.wzy5hg7x.eastus.aroapp.io
Service:    greeter

Traffic Targets:
  100%  @latest (greeter-v2) #latest
        URL:  http://latest-greeter-demoserverless.apps.wzy5hg7x.eastus.aroapp.io
    0%  greeter-v1 #prev
        URL:  http://prev-greeter-demoserverless.apps.wzy5hg7x.eastus.aroapp.io
    0%  greeter-v2 #current
        URL:  http://current-greeter-demoserverless.apps.wzy5hg7x.eastus.aroapp.io

[..]

Supongamos que desea revertir rápidamente a la versión anterior; puede actualizar la distribución del tráfico para enviar el 100 % del tráfico a la etiqueta anterior:

kn service update greeter --traffic current=0 --traffic prev=100

Enumere las rutas y vuelva a comprobarlo mediante el siguiente comando:

kn route describe greeter

Verá una salida que muestra que el 100 % de la distribución del tráfico va a la versión anterior.

Name:       greeter
Namespace:  demoserverless
Age:        19m
URL:        http://greeter-demoserverless.apps.wzy5hg7x.eastus.aroapp.io
Service:    greeter

Traffic Targets:
    0%  @latest (greeter-v2) #latest
        URL:  http://latest-greeter-demoserverless.apps.wzy5hg7x.eastus.aroapp.io
  100%  greeter-v1 #prev
        URL:  http://prev-greeter-demoserverless.apps.wzy5hg7x.eastus.aroapp.io
    0%  greeter-v2 #current
        URL:  http://current-greeter-demoserverless.apps.wzy5hg7x.eastus.aroapp.io

[..]

Recorra la distribución del tráfico mientras se actualiza la ruta principal en el explorador (en http://greeter-demoserverless.apps.wzy5hg7x.eastus.aroapp.io este caso).

Limpieza de recursos

Cuando haya acabado con la aplicación, puede ejecutar el siguiente comando para eliminar el proyecto:

oc delete project demoserverless

También puede eliminar el clúster; para ello, siga los pasos que aparecen en Tutorial: Eliminación de un clúster de la versión 4 de Red Hat OpenShift en Azure.

Pasos siguientes

En esta guía aprendió información sobre lo siguiente:

  • Instalación del operador OpenShift Serverless y de Knative Serving
  • Implementación de un proyecto sin servidor mediante la consola web
  • Implementación de un proyecto sin servidor mediante la CLI de Knative (kn)
  • Configuración de implementaciones azul-verde e implementaciones de valores controlados mediante la CLI de Knative (kn)

Obtenga más información sobre cómo compilar e implementar aplicaciones sin servidor y controladas por eventos en Red Hat OpenShift en Azure mediante OpenShift Serverless y siga los documentos Introducción a OpenShift Serverless y creación y administración de aplicaciones sin servidor.