¿Cómo configurar un clúster local de Openshift?

¿Cómo configurar un clúster local de Openshift?

Aprende cómo puedes usar CodeReady Containers para configurar la última versión de Openshift Local solo en tu computadora.

Ejecutar Openshift Local
Foto de pawel szvmanski en Unsplash
En este momento, todos sabemos que el modo de implementación predeterminado para cualquier aplicación que queramos lanzar será una plataforma basada en contenedores y, especialmente, será una plataforma basada en Kubernetes. Pero ya sabemos que hay muchas variantes diferentes de distribuciones de Kubernetes, incluso escribí un artículo sobre eso que puedes encontrar aquí: Algunas de estas distribuciones intentan seguir lo más cerca posible la experiencia de Kubernetes, pero otras están tratando de mejorar y aumentar las capacidades que la plataforma proporciona. Debido a eso, a veces es importante tener una forma de realmente probar nuestro desarrollo en la plataforma objetivo sin esperar un modo de desarrollador basado en servidor. Sabemos que tenemos en nuestra propia laptop una plataforma basada en Kubernetes para ayudar a hacer el trabajo. minikube es la opción más común para hacer esto y proporcionará una vista muy básica de Kubernetes, pero a veces necesitamos un tipo diferente de plataforma. Openshift de RedHat se está convirtiendo en una de las soluciones de facto para implementaciones en la nube privada y especialmente para cualquier empresa que no planea mudarse a una solución gestionada en la nube pública como EKS, GKE o AKS. En el pasado teníamos un proyecto similar a minikube conocido como minishift que permitía ejecutar en sus propias palabras: Minishift es una herramienta que te ayuda a ejecutar OpenShift localmente ejecutando un clúster de OpenShift de un solo nodo dentro de una VM. Puedes probar OpenShift o desarrollarlo, día a día, en tu localhost. El único problema con minishift es que solo soportan la versión 3.x de Openshift, pero estamos viendo que la mayoría de los clientes ya están actualizando a la versión 4.x, por lo que podríamos pensar que estamos un poco solos en esa tarea, ¡pero esto está lejos de la verdad! Porque tenemos CodeReady Containers o CRC para ayudarnos en esa tarea. El propósito de Code Ready Containers es proporcionarte un clúster mínimo de Openshift optimizado para propósitos de desarrollo. Su proceso de instalación es muy, muy simple. Funciona de manera similar al modo de distribución anterior de VM y OVA, por lo que necesitarás obtener algunos binarios para poder configurar esto directamente desde Red Hat usando la siguiente dirección: https://console.redhat.com/openshift/create/local Necesitarás crear una cuenta, pero es gratuita y en unos pocos pasos obtendrás un gran binario de aproximadamente 3–4 GB y tu código de firma para poder ejecutar la plataforma y eso es todo, en unos minutos tendrás a tu disposición una plataforma completa de Openshift lista para que la uses.
¿Cómo configurar un clúster local de Openshift?
Instalación local de CodeReadyContainers en tu laptop
Podrás encender y apagar la plataforma usando los comandos crc start y crc stop.
¿Cómo configurar un clúster local de Openshift?
Salida de consola de la ejecución del comando crc start
Como puedes imaginar, esto solo es adecuado para el entorno local y de ninguna manera para la implementación en producción y también tiene algunas restricciones que pueden afectarte, tales como:
  • El clúster de OpenShift de CodeReady Containers es efímero y no está destinado para uso en producción.
  • No hay una ruta de actualización compatible a versiones más nuevas de OpenShift. Actualizar la versión de OpenShift puede causar problemas que son difíciles de reproducir.
  • Utiliza un solo nodo que actúa como nodo maestro y trabajador.
  • Desactiva el Operador de monitoring por defecto. Este Operador desactivado causa que la parte correspondiente de la consola web no funcione.
  • La instancia de OpenShift se ejecuta en una máquina virtual. Esto puede causar otras diferencias, particularmente con la red externa.
Espero que encuentres esto útil y que puedas usarlo como parte de tu proceso de implementación.

📚 Want to dive deeper into Kubernetes? This article is part of our comprehensive Kubernetes Architecture Patterns guide, where you’ll find all fundamental and advanced concepts explained step by step.

Temas Avanzados de Kubernetes: Contenedores de Inicialización

Temas Avanzados de Kubernetes: Contenedores de Inicialización

Descubre cómo los Init Containers pueden proporcionar capacidades adicionales a tus cargas de trabajo en Kubernetes

Hay muchos nuevos desafíos que vienen con el nuevo patrón de desarrollo de una manera mucho más distribuida y colaborativa, y cómo gestionamos las dependencias es crucial para nuestro éxito. Kubernetes y las distribuciones dedicadas se han convertido en el nuevo estándar de implementación para nuestra aplicación nativa de la nube y proporcionan muchas características para gestionar esas dependencias. Pero, por supuesto, el recurso más habitual que utilizarás para hacer eso son las sondas. Kubernetes proporciona diferentes tipos de sondas que permitirán a la plataforma conocer el estado de tu aplicación. Nos ayudará a saber si nuestra aplicación está «viva» (sonda de vivacidad), ha sido iniciada (sonda de inicio) y si está lista para procesar solicitudes (sonda de preparación).
Temas Avanzados de Kubernetes: Contenedores de Inicialización
Ciclo de vida de las sondas de Kubernetes por Andrew Lock (https://andrewlock.net/deploying-asp-net-core-applications-to-kubernetes-part-6-adding-health-checks-with-liveness-readiness-and-startup-probes/)
Las sondas de Kubernetes son la forma estándar de hacerlo, y si has implementado alguna carga de trabajo en un clúster de Kubernetes, probablemente hayas usado una. Pero hay ocasiones en las que esto no es suficiente. Eso puede ser porque la sonda que te gustaría hacer es demasiado compleja o porque te gustaría crear algún orden de inicio entre tus componentes. Y en esos casos, confías en otra herramienta: los Init Containers. Los Init Containers son otro tipo de contenedor en el que tienen su propia imagen que puede tener cualquier herramienta que puedas necesitar para establecer los diferentes chequeos o sondas que te gustaría realizar. Tienen las siguientes características únicas:
  • Los init containers siempre se ejecutan hasta completarse.
  • Cada init container debe completarse con éxito antes de que comience el siguiente.

¿Por qué usarías init containers?

#1 .- Gestionar Dependencias

El primer caso de uso para utilizar init containers es definir una relación de dependencias entre dos componentes como Deployments, y necesitas que uno comience antes que el otro. Imagina la siguiente situación: Tenemos dos componentes: una aplicación web y una base de datos; ambos se gestionan como contenedores en la plataforma. Así que si los implementas de la manera habitual, ambos intentarán comenzar simultáneamente, o el programador de Kubernetes definirá el orden, por lo que podría ser posible que la aplicación web intente comenzar cuando la base de datos no esté disponible. Podrías pensar que eso no es un problema porque para eso tienes una sonda de preparación o de vivacidad en tus contenedores, y tienes razón: el Pod no estará listo hasta que la base de datos esté lista, pero hay varias cosas a tener en cuenta aquí:
  • Ambas sondas tienen un límite de intentos; después de eso, entrarás en un escenario de CrashLoopBack, y el pod no intentará comenzar de nuevo hasta que lo reinicies manualmente.
  • El pod de la aplicación web consumirá más recursos de los necesarios cuando sabes que la aplicación no comenzará en absoluto. Así que, al final, estás desperdiciando recursos en el proceso.
Por lo tanto, definir un init container como parte de la implementación de la aplicación web que verifique si la base de datos está disponible, tal vez solo incluyendo un cliente de base de datos para ver rápidamente si la base de datos y todas las tablas están adecuadamente pobladas, será suficiente para resolver ambas situaciones.

#2 .- Optimización de recursos

Una cosa crítica cuando defines tus contenedores es asegurarte de que tienen todo lo que necesitan para realizar su tarea y que no tienen nada que no sea necesario para ese propósito. Así que en lugar de agregar más herramientas para verificar el comportamiento del componente, especialmente si esto es algo para gestionar en momentos específicos, puedes descargar eso a un init container y mantener el contenedor principal más optimizado en términos de tamaño y recursos utilizados.

#3.- Precarga de datos

A veces necesitas realizar algunas actividades al inicio de tu aplicación, y puedes separar eso del trabajo habitual de tu aplicación, por lo que te gustaría evitar el tipo de lógica para verificar si el componente ha sido inicializado o no. Usando este patrón, tendrás un init container gestionando todo el trabajo de inicialización y asegurando que todo el trabajo de inicialización se haya realizado cuando se ejecute el contenedor principal.
Temas Avanzados de Kubernetes: Contenedores de Inicialización
Ejemplo del proceso de inicialización (https://www.magalix.com/blog/kubernetes-patterns-the-init-container-pattern)

¿Cómo definir un Init Container?

Para poder definir un init container, necesitas usar una sección específica de la sección de especificaciones de tu archivo YAML, como se muestra en la imagen a continuación:
apiVersion: v1
kind: Pod
metadata:
name: myapp-pod
labels:
app: myapp
spec:
containers:
  - name: myapp-container
image: busybox:1.28
command: ['sh', '-c', 'echo ¡La aplicación está en ejecución! && sleep 3600']
initContainers:
  - name: init-myservice
image: busybox:1.28
command: ['sh', '-c', "until nslookup myservice.$(cat /var/run/secrets/kubernetes.io/serviceaccount/namespace).svc.cluster.local; do echo esperando a myservice; sleep 2; done"]
  - name: init-mydb
image: busybox:1.28
command: ['sh', '-c', "until nslookup mydb.$(cat /var/run/secrets/kubernetes.io/serviceaccount/namespace).svc.cluster.local; do echo esperando a mydb; sleep 2; done"]
Puedes definir tantos Init Containers como necesites. Sin embargo, notarás que todos los init containers se ejecutarán en secuencia como se describe en el archivo YAML, y un init container solo puede ejecutarse si el anterior se ha completado con éxito.

Resumen

Espero que este artículo te haya proporcionado una nueva forma de definir la gestión de tus dependencias entre cargas de trabajo en Kubernetes y, al mismo tiempo, también otros grandes casos de uso donde la capacidad del init container puede aportar valor a tus cargas de trabajo.

📚 Want to dive deeper into Kubernetes? This article is part of our comprehensive Kubernetes Architecture Patterns guide, where you’ll find all fundamental and advanced concepts explained step by step.

AccessModes facilita el camino para ejecutar cargas de trabajo con estado en la plataforma Kubernetes

AccessModes facilita el camino para ejecutar cargas de trabajo con estado en la plataforma Kubernetes

Los AccessModes de Kubernetes proporcionan mucha flexibilidad sobre cómo los diferentes pods pueden acceder a los volúmenes compartidos

Todas las empresas se están moviendo hacia una transformación, cambiando las cargas de trabajo actuales en servidores de aplicaciones que se ejecutan en máquinas virtuales en un centro de datos hacia una arquitectura nativa de la nube donde las aplicaciones se han descompuesto en diferentes servicios que se ejecutan como componentes aislados utilizando contenedores y gestionados por una plataforma basada en Kubernetes. Comenzamos con los casos de uso y cargas de trabajo más fáciles, moviendo nuestros servicios en línea, principalmente API REST que funcionan en modo de balanceo de carga, pero los problemas comenzaron cuando movimos otras cargas de trabajo para seguir el mismo camino de transformación. La plataforma Kubernetes no estaba lista en ese momento. La mayoría de sus mejoras se han realizado para admitir más casos de uso. ¿Significa eso que la API REST es mucho más nativa de la nube que una aplicación que requiere una solución de almacenamiento de archivos? ¡Absolutamente no! Estábamos confundiendo diferentes cosas. Los patrones nativos de la nube son válidos independientemente de esas decisiones. Sin embargo, es cierto que en el camino hacia la nube e incluso antes, hubo algunos patrones que intentamos reemplazar, especialmente los basados en archivos. Pero esto no es por el uso del archivo en sí. Era más sobre el enfoque por lotes que estaba estrechamente relacionado con el uso de archivos que intentamos reemplazar por varias razones, como las siguientes:
  • El enfoque en línea reduce el tiempo de acción: las actualizaciones y notificaciones llegan más rápido al objetivo, por lo que los componentes están actualizados.
  • Las soluciones basadas en archivos reducen la escalabilidad de la solución: generas una dependencia con un componente central que tiene una solución de escalabilidad más compleja.
Pero este camino se está facilitando, y la última actualización en ese viaje fueron los Access Modes introducidos por Kubernetes. El Access Mode define cómo los diferentes pods interactuarán con un volumen persistente específico. Los modos de acceso son los que se muestran a continuación.
  • ReadWriteOnce — el volumen puede montarse como lectura-escritura por un solo nodo
AccessModes facilita el camino para ejecutar cargas de trabajo con estado en la plataforma Kubernetes
Representación Gráfica de ReadWriteOnce AccessMode
  • ReadOnlyMany — el volumen puede montarse como solo lectura por muchos nodos.
AccessModes facilita el camino para ejecutar cargas de trabajo con estado en la plataforma Kubernetes
Representación Gráfica de ReadOnlyMany AccessMode
  • ReadWriteMany — el volumen puede montarse como lectura-escritura por muchos nodos
AccessModes facilita el camino para ejecutar cargas de trabajo con estado en la plataforma Kubernetes
Representación Gráfica de ReadWriteMany AccessMode
  • ReadWriteOncePod — el volumen puede montarse como lectura-escritura por un solo Pod. Esto solo es compatible con volúmenes CSI y Kubernetes versión 1.22+.
AccessModes facilita el camino para ejecutar cargas de trabajo con estado en la plataforma Kubernetes
Representación Gráfica de ReadWriteOncePod AccessMode
Puedes definir el modo de acceso como una de las propiedades de tus PVs y PVCs, como se muestra en el ejemplo a continuación:
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
 name: single-writer-only
spec:
 accessModes:
 - ReadWriteOncePod # Permitir solo a un único pod acceder a single-writer-only.
 resources:
 requests:
 storage: 1Gi
Todo esto nos ayudará en nuestro camino para que todos nuestros diferentes tipos de cargas de trabajo logren todos los beneficios de la transformación digital y nos permita, como arquitectos o desarrolladores, elegir el patrón correcto para nuestro caso de uso sin estar restringidos en absoluto.

📚 Want to dive deeper into Kubernetes? This article is part of our comprehensive Kubernetes Architecture Patterns guide, where you’ll find all fundamental and advanced concepts explained step by step.

Enfrentémoslo: ¡Los mejores desarrolladores no están en Twitch o YouTube!

Enfrentémoslo: ¡Los mejores desarrolladores no están en Twitch o YouTube!

Los creadores de contenido están educando a los desarrolladores junior en plataformas sociales que probablemente idealizan su visión incluso cuando no son los mejores de su clase.

Estamos viviendo un momento de máxima exposición a la creación de contenido con temas de desarrollo de software. La última noticia sobre este tema es la creación de una sección específica sobre Canales de Desarrollo de Software en la popular plataforma de streaming Twitch:

Y eso es solo una etapa adicional en la tendencia que estamos viendo en los últimos años donde el contenido creado y las personas que invierten su tiempo en compartir su conocimiento en internet están explotando.

Enfrentémoslo: ¡Los mejores desarrolladores no están en Twitch o YouTube!
El pie de foto del Desarrollo de Software y Juegos de Twitch.tv

Prácticamente puedes encontrar un Canal en Vivo que te enseñará o compartirá contigo mucho conocimiento y experiencia sobre todos los temas relacionados con el desarrollo de software. No importa qué tema estés buscando, lo tendrás allí. Por ejemplo, hoy más temprano fui. Encontré los siguientes canales en vivo: Creando un MMO desde cero, Desarrollo de Maya, Programación en Java, Programación en GoLang, Programación de CMS usando Django y Python, y mucho más.

Esto es algo grandioso. Vivimos en una era donde tenemos contenido de gran calidad a nuestra disposición, especialmente en nuestra industria, que nos ayudará a mejorar nuestras habilidades y base de conocimientos. Todos estos creadores de contenido son los principales contribuyentes a eso. Y esos están aumentando la popularidad de los mejores creadores de contenido alcanzando niveles sobresalientes.

Pero esa situación también está creando la circunstancia de que los desarrolladores junior o simplemente personas que comienzan una nueva habilidad comiencen a pensar que las personas que muestran su visión o experiencia sobre un tema son los mejores desarrolladores en esa área, y eso está muy lejos de la verdad. Así que se está inclinando hacia una situación peligrosa.

Para ser claro: Los Creadores de Contenido no suelen ser Grandes Desarrolladores. Normalmente son desarrolladores regulares con habilidades de comunicación impresionantes. Y eso es más importante con una voluntad de compartir lo que saben con su audiencia. Incluso que están ganando dinero con esto, para ser justos, tienen una determinación inequívoca de desempeñar un papel social de compartir el conocimiento con el mundo, y eso es muy importante.

Esto no es solo intentar avergonzar a los creadores de contenido por su calidad; esto está sucediendo en todas las industrias. El mejor conocimiento compartido no suele ser el mejor de su práctica. Puedes pensar en cualquier tema: Matemáticas, Física, pero también Deportes. ¿Son los mejores narradores de Fútbol los mejores jugadores? No, seguro.

Pero por esta razón, es importante tener en cuenta esto cuando asistimos a esos canales o vemos esos videos que no son los verdaderos expertos, por lo que siempre debes verificar sus declaraciones para asegurarte de que estén alineadas con las mejores prácticas y procesos.

Si te gustaría ver lo que los verdaderos buenos desarrolladores están haciendo, es mucho más fácil encontrarlo cerca de donde reside el código. Usando plataformas como GitHub o SourceForge, los proyectos con más estrellas que proporcionan valor y leyendo sus conversaciones o analizando sus commits, te proporcionaremos una visión mucho más clara de lo que los verdaderos desarrolladores de alto nivel están haciendo.

Enfrentémoslo: ¡Los mejores desarrolladores no están en Twitch o YouTube!
Proyectos de GitHub que proporcionan una fuente increíble de conocimiento y buenas prácticas

Otra opción es suscribirse a la lista de correo de esos proyectos donde puedes ver la discusión real de los desarrolladores, los puntos principales que están haciendo y el razonamiento detrás de esas decisiones.

Enfrentémoslo: ¡Los mejores desarrolladores no están en Twitch o YouTube!
Una lista de correo te ayudará a entender cuál es el razonamiento detrás de algunas decisiones importantes de software

Este es un conocimiento mucho más importante que lo que puedes ver en una sesión en vivo de alguien programando en una plataforma de streaming, pero esto también es parte del proceso porque necesitarás tener la base para estar listo para entender a qué se refiere la discusión y para ese nivel de introducción la forma en que este increíble creador de contenido está compartiendo el conocimiento es la mejor manera para que cualquiera lo entienda y lo asimile.

¿Es gRPC tan rápido en comparación con REST como dice toda la industria?

¿Es gRPC tan rápido en comparación con REST como dice toda la industria?

Vamos a ver si el protocolo gRPC, que está surgiendo como una de las fuertes alternativas frente al servicio REST tradicional, puede mostrar todos los beneficios que la gente está reclamando

Si ya has estado en la industria tecnológica últimamente, sabes que gRPC se está convirtiendo en uno de los protocolos más populares para la integración entre componentes, principalmente microservicios, debido a sus beneficios en comparación con otras soluciones estándar como REST o SOAP.

Hay otras alternativas que también se están volviendo mucho más populares a diario, como GraphQL, pero el enfoque de hoy es en gRPC. Si deseas echar un vistazo a los beneficios de GraphQL, puedes ver el artículo que se muestra a continuación:

Entonces, ¿cuáles son los principales beneficios que generalmente se exponen respecto al uso de gRPC y por qué empresas como Netflix o Uber lo están utilizando?

  • Mensajes ligeros
  • Alto rendimiento
  • Soporte para patrón de transmisión

Parece una buena alternativa de una versión renovada de la llamada a procedimiento remoto tradicional que se ha estado utilizando en los años 90, pero probémoslo en algunos casos de uso real para intentar medir los beneficios que todos están reclamando, especialmente en cuanto al rendimiento y la ligereza de los mensajes, así que decidí definir un escenario muy sencillo de un patrón de solicitud/respuesta entre dos aplicaciones y probarlas con una llamada REST normal y una llamada gRPC.

¿Es gRPC tan rápido en comparación con REST como dice toda la industria?
Definición de Escenario de Prueba Simple

Pila Tecnológica

Vamos a usar TIBCO Flogo para crear la aplicación y utilizar un entorno visual sin código para simplificar la generación de la aplicación. Si deseas ver más en detalle sobre esta tecnología, por favor revisa el post a continuación:

Entonces, vamos a crear dos aplicaciones: La primera se activará en intervalos programados cada 100 ms y llamará usando gRPC a la segunda aplicación que simplemente devolverá los datos a la aplicación de llamada codificados de manera fija para evitar que cualquier otro sistema de terceros pueda impactar en la medición del rendimiento.

En cuanto a los datos que vamos a transmitir, será un enfoque simple de Hola Mundo. La primera aplicación enviará un nombre a la segunda aplicación que devolverá el “Hola, nombre, Esta es mi aplicación gRPC (o REST)” para poder imprimirlo en la consola.

Enfoque REST

A continuación se muestran las aplicaciones para el caso de prueba utilizando la tecnología TIBCO Flogo para definirlo:

¿Es gRPC tan rápido en comparación con REST como dice toda la industria?
¿Es gRPC tan rápido en comparación con REST como dice toda la industria?
Aplicaciones Flogo para el caso REST 

Como puedes ver, es simple e intuitivo. Tenemos la primera aplicación activada por un Trigger y con una actividad de Invocación REST y luego un Mensaje de Registro para imprimir lo que se ha recibido. La segunda aplicación es aún más simple, solo expone la API REST y devuelve los datos codificados de manera fija.

Enfoque gRPC

El enfoque gRPC será un poco más difícil porque necesitamos crear la definición protobuf para el cliente y servidor gRPC. Así que comenzaremos con una definición simple del servicio Hello como puedes ver en la imagen a continuación:

¿Es gRPC tan rápido en comparación con REST como dice toda la industria?
Definición de Protobuf para el Escenario de Prueba gRPC

Y basado en eso, podemos generar las diferentes aplicaciones tanto del cliente como del servidor de esta prueba simple:

¿Es gRPC tan rápido en comparación con REST como dice toda la industria?
¿Es gRPC tan rápido en comparación con REST como dice toda la industria?
Aplicaciones gRPC en TIBCO Flogo

Como puedes ver, las aplicaciones son muy similares a las de REST, solo cambiando un protocolo por el otro, y eso es una de las cosas increíbles de TIBCO Flogo, podemos tener una implementación simple sin conocer los detalles de los protocolos más nuevos pero obteniendo todas las ventajas que proporcionan.

Resultados de la Prueba

Después de 100 ejecuciones del servicio REST, estas son las métricas que pudimos obtener usando el exportador de Prometheus que proporciona la herramienta:

¿Es gRPC tan rápido en comparación con REST como dice toda la industria?
Métricas de Prometheus para la Ejecución del Escenario REST

Así que tenemos alrededor de 4 ms para el flujo del cliente y 0.16 ms para el servicio REST en sí, por lo que ya son números bajos. ¿Realmente crees que una versión gRPC podría mejorarlo? Vamos a verlo. Aquí están las mismas métricas para 100 invocaciones del segundo flujo usando gRPC:

¿Es gRPC tan rápido en comparación con REST como dice toda la industria?
Métricas de Prometheus para la Ejecución del Escenario gRPC

Como puedes ver, la mejora es impresionante incluso para un servicio simple que se ejecuta en localhost. El servicio gRPC tuvo métricas de 0.035 ms frente a los 0.159 que tenía la versión REST, una mejora del 77.98% frente a la API REST, esto es simplemente increíble… pero ¿qué pasa con el cliente? Pasó de 4.066 ms a 0.89 ms, lo que significa otra mejora del 78.1%.

¿Es gRPC tan rápido en comparación con REST como dice toda la industria?
Representación Gráfica de Ambas Ejecuciones de Escenario

Entonces, la lógica debería ser si esto se puede hacer con un servicio simple donde los datos intercambiados son prácticamente nada, ¿qué puede hacer cuando la carga útil es grande? las opciones son simplemente inimaginables…

Resumen

Probamos las cosas buenas que hemos escuchado en línea sobre el método gRPC que la mayoría de las tecnologías de vanguardia están utilizando hoy en día y hemos quedado impresionados solo con un escenario simple comparándolo con el rendimiento de una interfaz REST. Seguro que gRPC tiene sus contras como cualquier otra opción, pero en términos de rendimiento y optimización de mensajes, los datos hablan por sí mismos, es simplemente asombroso. ¡Mantente atento a nuevas pruebas sobre los beneficios de gRPC y también algunos de sus contras para intentar ver si podría ser una gran opción para tu próximo desarrollo!

Terminología de API: Estamos Usando Mal el Término API y Me Está Volviendo Loco

Terminología de API: Estamos Usando Mal el Término API y Me Está Volviendo Loco

Cuando el marketing se apropia de una palabra técnica, conduce a la locura y a un cambio completo de su significado.

API es el siguiente en la lista. Siempre es el mismo patrón con respecto a los términos técnicos cuando van más allá del foro realmente técnico normal y alcanzan un nivel más «mainstream» en la industria. Tan pronto como esto sucede, el término comienza a perder su significado y empieza a ser como una palabra comodín que puede significar cosas muy diferentes para personas muy diferentes. Si no me crees, acompáñame a este conjunto de ejemplos.

Puedes argumentar que los términos necesitan evolucionar y que la misma palabra puede significar cosas diferentes siempre que la industria continúe evolucionando, y eso es cierto. Por ejemplo, el término paquete que en el pasado se refería a la forma de empaquetar software para poder compartirlo, generalmente a través de correo o un servidor FTP como un paquete TAR, ha sido redefinido con la eclosión de los gestores de paquetes en los años 90 y después con la gestión de artefactos para manejar dependencias con enfoques como Maven, npm, etc.

Pero no estoy hablando de estos ejemplos. Estoy hablando de cuando un término se usa mucho porque es elegante y significa evolución o modernización, por lo que intentas usarlo tanto como sea posible, incluso para significar cosas diferentes. Y uno de estos términos es API.

API significa Interfaz de Programación de Aplicaciones, y como su nombre indica, es una interfaz. Desde el principio de los tiempos de la computación, se ha creado para referirse al contrato y cómo necesitas interactuar con un programa de aplicación específico. Sin embargo, el término se usaba principalmente para bibliotecas para definir su contrato para otras aplicaciones que necesitaban la capacidad.

Así que si quisiéramos mostrar esto en una forma gráfica, esto es a lo que se refiere la API:

Terminología de API: Estamos Usando Mal el Término API y Me Está Volviendo Loco

Con la eclosión de los Servicios REST y las aplicaciones móviles, el término API se expandirá más allá de su uso normal y se convertirá en una palabra normal en el mundo de hoy porque todos los desarrolladores necesitan alguna API para trabajar. Comenzando desde las capacidades comunes como la Autenticación hasta que solo se necesitan capacidades concretas para realizar su trabajo.

La explosión de servicios que expusieron su propia API requirió una forma de proporcionar gestión central a las interfaces expuestas, especialmente cuando comenzamos a publicar algunas de estas capacidades al mundo exterior. Necesitábamos asegurarlas, identificar quién las estaba usando y a qué nivel, y una forma para que los desarrolladores encontraran la documentación necesaria para poder usar sus servicios. Y debido a eso, tenemos el auge de las soluciones de Gestión de API.

Y luego vinieron los microservicios a revolucionar cómo se realizan las aplicaciones, y eso supone que ahora tenemos más servicios, cada uno de ellos proporcionando su propia API a un nivel que prácticamente tenemos un servicio para una capacidad y debido a eso una API para una capacidad, algo como puedes ver en la imagen a continuación:

Terminología de API: Estamos Usando Mal el Término API y Me Está Volviendo Loco

Y el uso de API se volvió tan popular que algunas personas comenzaron a usar el término para referirse a la interfaz y al servicio completo que implementa esta API, lo que lleva y está llevando a mucha confusión. Así que debido a eso, cuando hablamos ahora sobre Desarrollo de API, podemos hablar de cosas muy diferentes:

  • Podemos hablar sobre la definición y el modelo de la interfaz en sí misma y su gestión.
  • Podemos hablar sobre una implementación de servicio con una API expuesta para ser utilizada y gestionada adecuadamente.
  • Incluso podemos hablar sobre un servicio que utiliza varias APIs como parte de su implementación de capacidad.

Y el problema principal cuando usamos el mismo término para referirse a tantas cosas diferentes es que la palabra pierde todo su significado y con eso complica nuestra comprensión en cualquier conversación y eso lleva a muchos problemas que podríamos evitar simplemente usando las palabras adecuadas e intentando mantener todo el ruido y el marketing un poco fuera de las conversaciones técnicas.

Las 3 mejores aplicaciones web para optimizar tus actividades diarias

Las 3 mejores aplicaciones web para optimizar tus actividades diarias

Las 3 mejores aplicaciones web que uso diariamente como arquitecto de software para hacer mi trabajo de una manera mejor y más eficiente.

Las aplicaciones web son parte de nuestra vida y parte de nuestro proceso de creación y trabajo. Especialmente para aquellos que trabajan en la industria del software, prácticamente para cada tarea que necesitamos realizar, necesitamos usar una herramienta (si no más de una) como parte de este proceso, y hay herramientas que te ayudarán a hacer este proceso más fluido o fácil.

Tengo una preferencia por las aplicaciones nativas/de escritorio, probablemente porque soy lo suficientemente mayor para haber sufrido la primera era de las aplicaciones web que fueron una pesadilla, pero las cosas han cambiado mucho después de todos estos años y ahora tengo que admitir que hay algunas que uso bastante en mis actividades diarias:

1.- Lucidchart: Tu herramienta de diagramas

Esta es prácticamente la única herramienta que uso para cubrir todas mis necesidades de bocetos como arquitecto de software, que son muchas. Se compara con otras alternativas nativas como Microsoft Visio, pero me gusta su enfoque en la industria del software con muchas formas enfocadas en arquitecturas modernas, incluidas las formas para los principales proveedores de nube como Microsoft Azure, Amazon Web Services o Google Cloud.

Las 3 mejores aplicaciones web para optimizar tus actividades diarias
Lucidchart con las formas disponibles para Microsoft Azure y también otras listadas como AWS Architecture y Google Cloud

De una manera fácil, puedes crear diagramas de diseño, UML o diagramas de arquitectura con el aspecto y la sensación de un profesional. Tiene una licencia gratuita para uso personal, pero te animo a que te suscribas a uno de los planes profesionales, especialmente si eres una empresa de software. Esta es una empresa muy innovadora y no se detiene en el sector de diagramas, sino que también incluye cosas como Lucidspark para llevar el enfoque de pensamiento visual al mundo digital de una manera excelente. He usado otras alternativas como draw.io o Google Shapes, pero Lucidchart funciona mejor para mi proceso creativo.

2.- regex101.com: Tu maestro Jedi de RegExp en línea

No importa a qué te dediques, si eres un administrador de sistemas o un desarrollador de software, si eres un arquitecto de software trabajando en la definición de arquitecturas de alto nivel o simplemente un ingeniero de preventa, necesitarás proporcionar alguna expresión regular y seguro que no será fácil. Así que necesitas herramientas que te ayuden en este proceso y eso es lo que regexp101.com te proporcionará.

Las 3 mejores aplicaciones web para optimizar tus actividades diarias
Interfaz principal de regex101.com

Una interfaz limpia te proporcionará una manera fácil de probar tu ER o corregirla si es necesario, además de una forma de mejorar tu conocimiento teórico de las ER, proporcionándote la manera de expresar algunas de tus ER de la manera más eficiente. Sin duda, una herramienta imprescindible que necesitas tener en tus marcadores para optimizar el tiempo que necesitas para crear tus ER probadas y convertirte en un maestro de ER.

3.- fastthread.io: Tu sabio consejero de Java

Si necesitas lidiar con cualquier programa Java en tus actividades diarias, seguro que has estado en el proceso de analizar volcados de hilos para entender un comportamiento inesperado de un programa Java. Eso implica tener un seguimiento de pila para cada uno de los cientos de hilos que puedes obtener y extraer algunos conocimientos de esos datos. Para ayudar en ese proceso, tienes fastthread.io que proporciona un análisis inicial enfocado en los factores clave habituales, como el estado del hilo (bloqueado, en espera de tiempo, ejecutable…) dependiendo de la situación de bloqueo, seguimiento de pila similar, gestión de pool, consumos de CPU.

Las 3 mejores aplicaciones web para optimizar tus actividades diarias
Resultado del análisis de fastthread.io después de cargar un volcado de hilos a través de la página

Es claramente imprescindible si necesitas lidiar con cualquier aplicación basada en Java, al menos para tener el primer análisis que te ayude a enfocarte en cualquier cosa relevante y aplicar tu sabiduría al análisis preliminar ya realizado de manera automatizada y enriquecida con gráficos.

Pista adicional: ilovepdf

Como adición final a esta lista, no podría olvidar una aplicación. Esta no es una aplicación web geek, sino la aplicación que más uso, porque ilovepdf es un conjunto de aplicaciones web que cubren todas tus necesidades con respecto al uso de PDF y todo tan fácil de usar y directamente en tu navegador. ilovepdf proporciona una manera de transformar tu PDF a formatos más editables como Word o Excel, pero también para poder dividir o fusionar diferentes documentos PDF en uno, rotar PDF, agregar marca de agua, desbloquearlos… y la que más uso, comprimir PDF para poder reducir su tamaño sin perder calidad visible para enviarlo como un archivo adjunto por correo electrónico.

Las 3 mejores aplicaciones web para optimizar tus actividades diarias
Página principal de ilovepdf.com con todas las opciones a tu disposición

Resumen

Espero que estas herramientas te ayuden a mejorar tu proceso diario para ser más eficiente o al menos a abrir tus aplicaciones web conocidas para algunas de estas tareas si ya tienes otra y tal vez darle una oportunidad para ver si puede ser de algún beneficio para ti. Si también tienes otras aplicaciones web que usas mucho en tu proceso diario, por favor házmelo saber con tus respuestas a este artículo.

GraalVM: ¿Cómo mejorar el rendimiento de los microservicios en 2022?

GraalVM: ¿Cómo mejorar el rendimiento de los microservicios en 2022?

GraalVM proporciona las capacidades para hacer de Java un lenguaje de primera clase para crear microservicios al mismo nivel que Go-Lang, Rust, NodeJS y otros.

GraalVM: Haciendo que los lenguajes JVM sean eficientes para microservicios
Foto de Caspar Camille Rubin en Unsplash

El lenguaje Java ha sido el líder de lenguajes durante generaciones. Prácticamente cada pieza de software ha sido creada con Java: Servidores Web, Sistemas de Mensajería, Aplicaciones Empresariales, Frameworks de Desarrollo, y así sucesivamente. Esta predominancia se ha mostrado en los índices más importantes como el índice TIOBE, como se muestra a continuación:

GraalVM: ¿Cómo mejorar el rendimiento de los microservicios en 2022?
Imagen del índice TIOBE de https://www.tiobe.com/tiobe-index/

Pero siempre, Java tiene algunas compensaciones que necesitas hacer. La promesa del código portátil es porque la JVM nos permite ejecutar el mismo código en diferentes sistemas operativos y ecosistemas. Sin embargo, al mismo tiempo, el enfoque del intérprete también proporcionará un poco de sobrecarga en comparación con otras opciones compiladas como C.

Esa sobrecarga nunca fue un problema hasta que entramos en la ruta de los microservicios. Cuando tenemos un enfoque basado en servidores con una sobrecarga de 100–200 MB, no es un gran problema en comparación con todos los beneficios que proporciona. Sin embargo, si transformamos ese servidor en, por ejemplo, cientos de servicios, y cada uno de ellos tiene una sobrecarga de 50 MB, esto comienza a ser algo de lo que preocuparse.

Otra compensación fue el tiempo de inicio, nuevamente la capa de abstracción proporciona un tiempo de inicio más lento, pero en la arquitectura cliente-servidor, eso no era un problema importante si necesitamos unos segundos más para comenzar a atender solicitudes. Sin embargo, hoy en la era de la escalabilidad, esto se vuelve crítico si hablamos de tiempo de inicio basado en segundos en comparación con tiempo de inicio basado en milisegundos porque esto proporciona mejor escalabilidad y un uso más optimizado de la infraestructura.

Entonces, ¿cómo proporcionar todos los beneficios de Java y ofrecer una solución para estas compensaciones que ahora comenzaban a ser un problema? Y GraalVM se convierte en la respuesta a todo esto.

GraalVM se basa en sus propias palabras: “una distribución de JDK de alto rendimiento diseñada para acelerar la ejecución de aplicaciones escritas en Java y otros lenguajes JVM,” que proporciona un proceso de Compilación Anticipada para generar un proceso binario a partir del código Java que elimina la sobrecarga tradicional del proceso de ejecución de la JVM.

En cuanto a su uso en microservicios, este es un enfoque específico que han dado, y la promesa de un inicio alrededor de 50 veces más rápido y un uso de memoria 5 veces menor es simplemente asombrosa. Y es por eso que GraalVM se convierte en la base para frameworks de desarrollo de microservicios de alto nivel en Java como Quarkus de RedHat, Micronaut, o incluso la versión de Spring-Boot potenciada por GraalVM.

Entonces, probablemente te estés preguntando: ¿Cómo puedo empezar a usar esto? Lo primero que necesitamos hacer es ir a la página de lanzamientos de GitHub del proyecto y encontrar la versión para nuestro sistema operativo y seguir las instrucciones proporcionadas aquí:

Cuando tengamos esto instalado, es el momento de comenzar a probarlo, y qué mejor manera de hacerlo que creando un servicio REST/JSON y comparándolo con una solución tradicional potenciada por OpenJDK 11.

Para crear este servicio REST de la manera más simple posible para centrarnos en la diferencia entre ambos modos, usaré el Framework Spark Java, que es un framework mínimo para crear servicios REST.

Compartiré todo el código en este repositorio de GitHub, así que si deseas echar un vistazo, clónalo desde aquí:

El código que vamos a usar es muy simple, solo una línea para crear un servicio REST:

GraalVM: ¿Cómo mejorar el rendimiento de los microservicios en 2022?

Luego, usaremos un plugin de maven de GraalVM para todos los procesos de compilación. Puedes verificar todas las opciones aquí:

GraalVM: ¿Cómo mejorar el rendimiento de los microservicios en 2022?

El proceso de compilación lleva un tiempo (alrededor de 1–2 min). Sin embargo, necesitas entender que esto compila todo a un proceso binario porque la única salida que obtendrás de esto es un solo proceso binario (nombrado en mi caso rest-service-test) que tendrá todas las cosas que necesitas para ejecutar tu aplicación.

GraalVM: ¿Cómo mejorar el rendimiento de los microservicios en 2022?

Y finalmente, tendremos un solo binario que es todo lo que necesitamos para ejecutar nuestra aplicación:

GraalVM: ¿Cómo mejorar el rendimiento de los microservicios en 2022?

Este binario es excepcional porque no requiere ninguna JVM en tu máquina local, y puede comenzar en unos pocos milisegundos. Y el tamaño total del binario es de 32M en disco y menos de 5MB de RAM.

GraalVM: ¿Cómo mejorar el rendimiento de los microservicios en 2022?

La salida de esta primera aplicación pequeña es sencilla, como viste, pero creo que puedes captar la idea. Pero veámoslo en acción, lanzaré una pequeña prueba de carga con mi computadora con 16 hilos lanzando solicitudes a este endpoint:

GraalVM: ¿Cómo mejorar el rendimiento de los microservicios en 2022?

Como puedes ver, esto es simplemente increíble, incluso con la falta de latencia ya que esto es solo activado por la misma máquina, estamos alcanzando con un solo servicio una tasa de TPS en 1 minuto de más de 1400 solicitudes/segundo con un tiempo de respuesta de 2ms para cada una de ellas.

¿Y cómo se compara eso con una aplicación normal basada en JAR con el mismo código exactamente? Por ejemplo, puedes ver en la tabla a continuación:

GraalVM: ¿Cómo mejorar el rendimiento de los microservicios en 2022?

En resumen, hemos visto cómo usando herramientas como GraalVM podemos hacer que nuestros programas basados en JVM estén listos para nuestro entorno de microservicios evitando los problemas normales relacionados con el alto uso de memoria o el tiempo de inicio pequeño que son críticos cuando estamos adoptando una estrategia completamente nativa de la nube en nuestras empresas o proyectos.

Pero, la verdad debe ser dicha. Esto no siempre es tan simple como mostramos en este ejemplo porque dependiendo de las bibliotecas que estés usando, generar la imagen nativa puede ser mucho más complejo y requerir mucha configuración o simplemente ser imposible. Así que no todo está ya hecho, pero el futuro se ve brillante y lleno de esperanza.

Los 3 mejores trucos para usar Medium y mantenerte al día en la industria tecnológica

Los 3 mejores trucos para usar Medium y mantenerte al día en la industria tecnológica

Medium puede ser uno de tus mejores aliados en esta tarea interminable de mantenerse al día con las actualizaciones en la industria tecnológica.

Todos los que estamos aquí usamos Medium. Estoy siendo un poco Capitán Obvio aquí porque si estás leyendo esto, estoy seguro de que ya estás usando Medium para el crecimiento profesional y para aprender cosas nuevas, pero me gustaría destacar cómo lo uso para mantenerme al día con la situación actual.

Sabes que las cosas cambian muy rápido. Por supuesto, esto está sucediendo en todas las industrias y negocios, pero es aún más urgente en la industria tecnológica.

Estamos viendo nuevas tecnologías cada semana o incluso cada día. Los frameworks cambian tan rápido como podemos imaginar, y tratar de mantener el ritmo de eso es bastante complejo para cualquiera de nosotros. Por lo tanto, debemos usar todas las herramientas a nuestra disposición para asegurarnos de hacer lo mejor en esta situación.

#1 Ajusta tus Recomendaciones Personalizadas

Una de las grandes cosas de Medium es que utiliza tus intereses y los artículos que has estado leyendo y cuánto tiempo pasaste leyéndolos para recomendarte nuevos artículos relevantes.

Así que, aquí las recomendaciones son claras: Usa Medium todo el tiempo. Intenta usar la capacidad de búsqueda para buscar en muchos artículos disponibles porque cuanto más lo uses, más precisas serán las recomendaciones para ti.

Tuve un tiempo, hace unas semanas, cuando estaba realmente interesado en Arquitecturas de Datos Modernas y Nativas de la Nube debido a algunas responsabilidades profesionales. Así que comencé a buscar esos artículos en Medium. Desde ese momento, las recomendaciones han sido bastante precisas sobre lo que estaba buscando y me ayudaron a mejorar mi conocimiento y encontrar artículos que no tenía idea de que estaban disponibles en Medium.

Además de eso, necesitas asegurarte de que tus intereses estén bien configurados. Por lo general, cuando configuramos una cuenta y nos preguntan sobre nuestros intereses, probablemente no lo pensamos mucho tiempo porque lo único que queremos es acceder al contenido de inmediato (¡culpable aquí!).

Por lo tanto, debes tomarte tu tiempo ahora para asegurarte de que los intereses que seleccionaste cuando te uniste sigan siendo los más relevantes para ti hoy. Si deseas verificar tus intereses actuales, necesitas ir a tu perfil y hacer clic en «Controla tus Recomendaciones», como puedes ver en la imagen a continuación:

Los 3 mejores trucos para usar Medium y mantenerte al día en la industria tecnológica
Página de Controla tus Recomendaciones de mi perfil de Medium 

Además, verás los temas que te interesan ahora y un montón de sugerencias de nuevos temas basados en tu historial de lectura que creen que podrían interesarte. Por lo tanto, es importante visitar la página de vez en cuando para asegurarte de que sean precisos y verificar las recomendaciones que te están proporcionando.

#2: Función Leer Más Tarde 

Otra característica clave es guardar todos los artículos interesantes para continuar leyéndolos más tarde o mantenerlos como tu propia biblioteca. Este es el uso principal que le doy a ese concepto. Intento usar la función Leer Más Tarde para crear y gestionar mi propia «biblioteca basada en Medium».

Y la razón principal detrás de este enfoque es porque todos hemos sufrido esta situación cuando encontramos un gran artículo sobre un tema. Sin embargo, cambiamos a otra tarea, y más tarde, cuando necesitamos encontrar ese artículo nuevamente, no recordamos el título o el autor, y pasamos mucho tiempo tratando de localizarlo nuevamente.

#3: Capacidad de Búsqueda

Incluso cuando estamos acostumbrados a usar Google como nuestra principal opción de búsqueda para buscar cualquier cosa, creo que es importante usar las capacidades de búsqueda en el sitio de Medium por varias razones:

  • El contenido que tenemos disponible en Medium es enorme, y la mayoría de ellos es de gran calidad debido al proceso de curación.
  • Es importante que Medium te conozca mejor, y eso afinará todas las recomendaciones que ya hemos comentado.

Y todo esto sin preocuparte de que encontrarás muchos anuncios basados en tu historial de búsqueda 🙂

#4: Miembro de Medium 

Y he dejado para el final lo que creo que es la parte más importante: Convertirse en Miembro de Medium.

Medium es genial, no importa si eres miembro o no. Aún así, cuando no era miembro de Medium, era simplemente molesto encontrar el artículo que necesitaba, pero no podía leerlo porque ya había gastado los artículos «destacados» del mes, y necesitaba esperar un mes adicional. Así que sabemos que esto no es válido si quieres mantenerte actualizado en la industria tecnológica, así que por favor, hazte un favor y conviértete en miembro de Medium. Te sentirás más cómodo en la plataforma y comenzarás a vivir dentro de ella.

Aprende a Mantener Bajo Control el Uso de Disco de tu Entorno Local de Docker

Aprende a Mantener Bajo Control el Uso de Disco de tu Entorno Local de Docker

Descubre nuevas opciones que tienes a tu disposición para hacer un uso eficiente del disco en tu instalación de Docker

El auge del contenedor ha sido un cambio de juego para todos nosotros, no solo en el lado del servidor donde prácticamente cualquier nueva carga de trabajo que implementamos se despliega en forma de contenedor, sino también en nuestros entornos locales ocurre el mismo cambio.

Adoptamos contenedores para gestionar fácilmente las diferentes dependencias que necesitamos manejar como desarrolladores. Incluso si la tarea en cuestión no estaba relacionada con contenedores. ¿Necesitas una base de datos en funcionamiento? Usas una versión en contenedor de ella. ¿Necesitas un sistema de mensajería para probar algunas de tus aplicaciones? Inicias rápidamente un contenedor que proporciona esa funcionalidad.

Y tan pronto como no los necesitas, se eliminan, y tu sistema sigue tan limpio como estaba antes de comenzar esta tarea. Pero siempre hay cosas que necesitamos manejar incluso cuando tenemos una solución maravillosa frente a nosotros, y en el caso de un entorno Docker local, el uso del disco es uno de los más críticos.

Este proceso de lanzar cosas nuevas una y otra vez y luego deshacernos de ellas es cierto en cierto modo porque todas estas imágenes que hemos necesitado y todos estos contenedores que hemos lanzado todavía están allí en nuestro sistema esperando una nueva ronda y durante ese tiempo usando nuestros recursos de disco como puedes ver en una imagen actual de mi entorno Docker local con más de 60 GB utilizados para ese propósito.

Aprende a Mantener Bajo Control el Uso de Disco de tu Entorno Local de Docker
Imagen de la página de configuración del panel de control de Docker que muestra la cantidad de disco que Docker está usando.

Lo primero que necesitamos hacer es verificar qué está usando esta cantidad de espacio para ver si podemos liberar algunos de ellos. Para hacer eso, podemos aprovechar el comando docker system df que la CLI de Docker nos proporciona:

Aprende a Mantener Bajo Control el Uso de Disco de tu Entorno Local de Docker
La salida de la ejecución del comando docker system df

Como puedes ver, los 61 GB que están en uso son 20.88 GB por las imágenes que tengo en uso, 21.03 MB solo para los contenedores que he definido, 1.25 GB para los volúmenes locales y 21.07 para la caché de construcción. Como solo tengo activos 18 de las 26 imágenes definidas, puedo reclamar hasta 9.3 GB, que es una cantidad importante.

Si quisiéramos obtener más detalles sobre estos datos, siempre podemos usar la opción verbose como un añadido al comando, como puedes ver en la imagen a continuación:

Aprende a Mantener Bajo Control el Uso de Disco de tu Entorno Local de Docker
Salida detallada y detallada del comando docker system df -v

Entonces, después de obtener toda esta información, podemos proceder y ejecutar una limpieza de tu sistema. Esta actividad eliminará cualquier contenedor e imagen no utilizados que tengas en tu sistema, y para ejecutar eso, solo necesitas escribir esto:

docker system prune -af

Tiene varias opciones para ajustar un poco la ejecución que puedes consultar en la página oficial de Docker :

En mi caso, eso me ayudó a recuperar hasta 40.8 GB de mi sistema, como puedes ver en la imagen a continuación.

Aprende a Mantener Bajo Control el Uso de Disco de tu Entorno Local de Docker

Pero si quisieras avanzar un paso más, también puedes ajustar algunas propiedades para considerar dónde estás ejecutando esta limpieza. Por ejemplo, el defaultKeepStorage te ayudará a definir cuánto disco quieres usar para este sistema de caché de construcción para optimizar la cantidad de uso de red que haces al construir imágenes con capas comunes.

Para hacer eso, necesitas tener el siguiente fragmento en tu sección de configuración del motor de Docker, como se muestra en la imagen a continuación:

Aprende a Mantener Bajo Control el Uso de Disco de tu Entorno Local de Docker
Configuración del motor de Docker con el defaultKeepStorage hasta 20GB

Espero que todo este proceso de mantenimiento ayude a que tus entornos locales brillen nuevamente y aproveches al máximo sin necesidad de desperdiciar muchos recursos en el proceso.