Compartir a través de


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

En este artículo, implementará una aplicación en un clúster de Red Hat OpenShift de Azure con OpenShift sin servidor. OpenShift Serverless ayuda a los desarrolladores a implementar y ejecutar aplicaciones que escalan o escalan verticalmente a cero a petición. Esta escalabilidad 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 inicia los contenedores de aplicaciones cuando un evento los desencadena. 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. Esta integración proporciona una experiencia completa de desarrollo e implementación de aplicaciones sin servidor.

Antes de empezar

Creación de 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:

Botón para iniciar 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. Inicie sesión con kubeadmin credenciales.

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.

Captura de pantalla que muestra la posición del operador OpenShift sin servidor.

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

Captura de pantalla que muestra cómo seleccionar Instalar para instalar el operador.

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.

Captura de pantalla que muestra la página de instalación del operador.

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.

Captura de pantalla que muestra la página de estado con el operador instalado y listo para su uso.

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.

Captura de pantalla que muestra dónde seleccionar para crear una instancia de Knative Service.

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).

Captura de pantalla que muestra los valores predeterminados enumerados en el formulario.

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

Captura de pantalla que muestra que Knative Serving está listo.

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 del siguiente ejemplo:

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 Topología del proyecto.

Captura de pantalla que muestra la topología del proyecto Red Hat OpenShift en Azure.

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.

Captura de pantalla que muestra el proyecto Red Hat OpenShift de Azure desde 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. Esto crea un servicio Knative, un tipo de implementación que permite el escalado sin servidor de OpenShift a cero cuando está inactivo.

Captura de pantalla que muestra cómo seleccionar el servicio Knative.

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 introducción a 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. Esta operación puede tardar unos minutos. Cuando se complete la compilación, aparece una marca de verificación verde en la esquina inferior izquierda del servicio.

Captura de pantalla que muestra una marca de verificación que indica que la compilación está completa.

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 unos minutos.

Captura de pantalla que muestra el recuento de pods cuando se ha escalado a cero.

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.

Captura de pantalla que muestra la aplicación escalada verticalmente hasta 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.

Captura de pantalla que muestra el anillo pod.

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. Haga clic en 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.

Captura de pantalla que muestra cómo forzar una nueva revisión mediante la actualización de la configuración.

Vuelva a la vista Topología ; verá que se implementó 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.

Captura de pantalla que muestra cómo establecer la distribución del tráfico.

La vista Topología muestra cómo se distribuye el tráfico entre las revisiones.

Captura de pantalla que muestra cómo revisar la distribución del tráfico.

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

En los pasos anteriores, usó la consola web de OpenShift para crear e implementar una aplicación en OpenShift Sin servidor. 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 ocde la línea de comandos de OpenShift.

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

Obtendrá 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 implementó 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

Obtiene una lista similar a la siguiente salida. En este caso, la nueva revisión recibe 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 asignan 100% del tráfico. Supongamos que quiere implementar una estrategia de implementación azul/verde donde puede revertir rápidamente a la versión anterior de la aplicación. Knative facilita este proceso.

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 siguiente comando:

kn route describe greeter

Recibirá una salida que muestra las direcciones URL de cada una de las etiquetas, junto con su distribución de 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 de tráfico para enviar 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á la salida en la que se muestra que 100% de distribución de 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 sin servidor. Siga la documentación introducción a OpenShift Serverless y la documentación creación y administración de aplicaciones sin servidor .