¿Qué es una CRD (definición de recurso personalizada)?

Recurso personalizado: una descripción general rápida

Las Custom Resources, o Recursos Personalizados, son una característica poderosa y flexible de Kubernetes que permite a los usuarios extender la funcionalidad del clúster más allá de las capacidades predeterminadas. En términos sencillos, una Custom Resource es una extensión de la API de Kubernetes que define un nuevo tipo de objeto que puede ser creado, actualizado y eliminado como cualquier otro objeto de Kubernetes, como un Pod o un Service.

¿Cómo funcionan las Custom Resources?

Las Custom Resources funcionan de manera similar a los objetos estándar de Kubernetes. Se pueden crear, leer, actualizar y eliminar utilizando la API de Kubernetes, y se pueden gestionar utilizando kubectl, la interfaz de línea de comandos de Kubernetes. Sin embargo, a diferencia de los objetos estándar de Kubernetes, las Custom Resources no están predefinidas: los usuarios deben definir sus propios tipos de Custom Resources.

Tipos de Custom Resources

Existen dos tipos de Custom Resources: las Custom Resource Definitions (CRDs) y las Aggregated APIs. Ambos permiten definir nuevos tipos de recursos, pero difieren en su complejidad y flexibilidad.

Las CRDs son la forma más sencilla de crear una Custom Resource. No requieren programación y se pueden crear directamente desde un archivo YAML. Sin embargo, las CRDs son menos flexibles que las Aggregated APIs y no admiten algunas características avanzadas, como la validación de datos.

Las Aggregated APIs, por otro lado, son más potentes y flexibles que las CRDs, pero también son más complejas. Requieren programación y deben ser implementadas como un servidor de API separado que se ejecuta junto al servidor de API principal de Kubernetes.

Beneficios de las Custom Resources

Las Custom Resources ofrecen varios beneficios. En primer lugar, permiten a los usuarios extender la funcionalidad de Kubernetes para adaptarse a sus necesidades específicas. Por ejemplo, un usuario podría crear una Custom Resource para gestionar una base de datos personalizada o un servicio de mensajería.

En segundo lugar, las Custom Resources permiten a los usuarios definir su propia lógica de negocio en el clúster de Kubernetes. Esto puede ser útil para automatizar tareas complejas o repetitivas, como la gestión de despliegues o la escalación de recursos.

Finalmente, las Custom Resources también pueden ser utilizadas para integrar servicios externos con Kubernetes. Por ejemplo, un usuario podría crear una Custom Resource para gestionar una cola de mensajes en un servicio de mensajería en la nube, o para gestionar una base de datos en un servicio de base de datos en la nube.

Definición de recurso personalizado de Kubernetes

Reconocido por su fortaleza en el manejo de contenedores open-source, Kubernetes posee un componente esencial: la Definición de Recursos Personalizados, o DRP. Para simplificar, una DRP es una adaptación única de la interfaz de programación de aplicaciones (API) de Kubernetes.

Detalles sobre la Definición de Recursos Personalizados (DRP)

Entre las sorprendentes especificidades de Kubernetes, descubrimos la DRP. Esta función es una versión modulada de su API estandarizada que simplifica la conformación y gestión de sus recursos de alta variabilidad. Estos recursos de diseño inédito se fusionan de manera armónica con los recursos preexistentes de Kubernetes, y mediante el uso de kubectl, se pueden generar, explorar y controlar, de la misma forma que se gestionarían los recursos existentes.

Atributos cruciales de una DRP

El núcleo de una DRP radica en la producción y clasificación de nuevas formaciones de objetos en el servidor API de Kubernetes. Tras el registro de estos objetos, es factible generar múltiples instancias utilizando el comando kubectl. Estas instancias son manejadas tan igualitariamente como cualquier otra estructura de Kubernetes, en términos de su monitoreo, escalado y eliminación.

Modelo practico de uso de una DRP

Para aclarar el concepto de una DRP, presentemos un ejemplo. Supongamos que queremos crear un nuevo recurso nominado MiRecurso. Para lograrlo, primero necesitamos configurar la DRP del MiRecurso:


apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  name: misrecursos.miempresa.com
spec:
  group: miempresa.com
  versions:
  - name: v1
    served: true
    storage: true
    schema:
      openAPIV3Schema:
        type: object
        properties:
          spec:
            type: object
            properties:
              myvalue:
                type: string
  scope: Namespaced
  names:
    plural: misrecursos
    singular: mirecurso
    kind: MiRecurso

Una vez formalizada la DRP, podemos producir instancias de MiRecurso con el comando kubectl:


kubectl apply -f mirecurso.yaml

En este ejemplo, mirecurso.yaml es un documento que delineates una instancia de MiRecurso:


apiVersion: miempresa.com/v1
kind: MiRecurso
metadata:
  name: mi-recurso
spec:
  myvalue: "¡Hola Mundo!"

En resumidas cuentas, la DRP ofrece a los usuarios de Kubernetes oportunidades para diseñar y gestionar sus propios recursos singulares. Este beneficio puede resultar extremadamente valioso para personalizar Kubernetes según las necesidades específicas de su entorno de trabajo.

`

`

¿Cuándo utilizar CRD?

Las CRDs, o Definiciones de Recursos Personalizados, se han convertido en un componente fundamental en el entorno de Kubernetes. ¿Te preguntas cuándo es oportuno aplicarlas? Profundicemos en el tema.

Expansión de las capacidades de Kubernetes

A pesar de ser una plataforma ajustable a diversos contextos, Kubernetes puede no satisfacer algunos requisitos particulares de tu iniciativa. Aquí es donde las CRDs desempeñan un papel crucial. Con ellas, tienes la posibilidad de instituir tus propios recursos ajustados, lo que implica la expansión de las capacidades de Kubernetes más allá de las funciones ya preestablecidas.

Por ende, si ejecutas un plan que requiere un tipo de recurso inexistente en Kubernetes, la CRD puede ser tu solución al instante. Por medio de esto, tratas al recurso como si fuera un componente nativo, simplificando su implementación en tu arquitectura completa.

Generación de adaptabilidad

Las CRDs también son muy valiosas cuando precisas un margen de adaptabilidad en la gestión de tus recursos. Con ellas, puedes determinar tus propios recursos con sus especificidades y comportamiento, permitiendo así su ajuste a tus necesidades determinadas.

Por lo tanto, tienes la oportunidad de instaurar una CRD para un tipo de recurso que requiere una estabilidad específica o que debe manejarse de manera divergente a los recursos básicos de Kubernetes. Esto te oporga un mayor grado de adaptabilidad y control sobre tus recursos, lo que es molto beneficioso en esquemas complejos o excesivamente personalizados.

Mantención de la consistencia

Para terminar, las CRDs son extremadamente útiles cuando quieres garantizar consistencia en tus recursos. Al crear tus propios componentes, puedes certificar que siempre tendrán el mismo comportamiento, lo que evitará inconvenientes y hará que tu infraestructura sea más estable.

Por ende, puedes generar una CRD para un tipo de recurso que siempre necesita una serie de configuraciones definidas. De este modo, puedes asegurarte que el recurso siempre se instalare de la misma forma, sin considerar quién lo está colocando o en qué ubicación.

En síntesis, las CRDs son un recurso de gran envergadura que pueden expandir las capacidades de Kubernetes, otorgarte mayor flexibilidad y garantizar consistencia en tus recursos. No obstante, como toda herramienta, es crucial aplicarlas de manera prudente y comprender cuándo son la mejor alternativa para tu iniciativa.

Casos de uso

Los CRD constituyen una estratégica potente y adaptable que se puede aplicar en una variedad de situaciones. Aquí exponemos algunos ejemplos de cómo los CRD se utilizan cotidianamente.

Administración de Configuraciones

Es frecuente ver a los CRD desempeñando un papel principal en la administración de configuraciones. Por ejemplo, un equipo de desarrollo puede implementar un CRD para determinar los parámetros de una aplicación en particular. De esta manera, los desarrolladores pueden controlar los ajustes de las aplicaciones utilizando Kubernetes, evitando la necesidad de tener que manejar archivos de configuración dispersos.

Ampliación de la API de Kubernetes

La flexibilidad de los CRD permite también su funcionamiento para ampliar la API de Kubernetes. Esta funcionalidad brinda a los desarrolladores la opción de incorporar características extra a Kubernetes sin necesidad de alterar el código fuente de Kubernetes. Por ejemplo, un desarrollador podría diseñar un CRD para proporcionar soporte para un nuevo tipo de almacenamiento que Kubernetes no admite de forma predeterminada.

Automatización de Procesos

Además, los CRD son útiles para la automatización de procesos. Por ejemplo, un desarrollador podría diseñar un CRD que automatiza el despliegue de una aplicación. Esta automatización podría englobar tareas como la creación de contenedores, la configuración de redes y la distribución de recursos.

Administración de Recursos

Además, los CRDs son utilizados para la administración de recursos. Un ejemplo sería cuando los gestores de sistemas emplean un CRD para controlar los recursos de un agrupamiento de Kubernetes. Esta labor puede implicar tareas de supervisión del uso de recursos, distribución de recursos, y administración de cuotas.

Ejemplificación de Código

A continuación, se muestra un ejemplo de cómo se podría definir un CRD para una aplicación:


apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  name: aplicaciones.miempresa.com
spec:
  group: miempresa.com
  versions:
  - name: v1
    served: true
    storage: true
    schema:
      openAPIV3Schema:
        type: object
        properties:
          spec:
            type: object
            properties:
              nombre:
                type: string
              version:
                type: string
              configuracion:
                type: object
  scope: Namespaced
  names:
    plural: aplicaciones
    singular: aplicacion
    kind: Aplicacion

Este CRD especifica una nueva "Aplicacion" que incorpora tres propiedades: nombre, versión y configuración. Los desarrolladores pueden así crear instancias de dicha "Aplicacion" haciendo uso del API de Kubernetes.

Creando un CRD

Crear un CRD (Custom Resource Definition) puede parecer una tarea desalentadora al principio, pero con una comprensión clara de los conceptos y los pasos correctos, puede ser bastante sencillo. Aquí, desglosaremos el proceso en pasos fáciles de seguir.

Paso 1: Definir el CRD

El primer paso para crear un CRD es definirlo. Esto se hace en un archivo YAML que describe el recurso personalizado. Aquí hay un ejemplo de cómo podría verse este archivo:


apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  name: myresources.mycompany.com
spec:
  group: mycompany.com
  versions:
  - name: v1
    served: true
    storage: true
    schema:
      openAPIV3Schema:
        type: object
        properties:
          spec:
            type: object
            properties:
              field1:
                type: string
              field2:
                type: integer
  scope: Namespaced
  names:
    plural: myresources
    singular: myresource
    kind: MyResource

Paso 2: Crear el CRD en Kubernetes

Una vez que hayas definido tu CRD, el siguiente paso es crearlo en Kubernetes. Esto se hace utilizando el comando kubectl apply. Aquí hay un ejemplo de cómo se vería este comando:


kubectl apply -f my-crd.yaml

Paso 3: Verificar la Creación del CRD

Después de crear el CRD, debes verificar que se haya creado correctamente. Esto se puede hacer utilizando el comando kubectl get crds. Aquí hay un ejemplo de cómo se vería este comando:


kubectl get crds

Si tu CRD se ha creado correctamente, deberías verlo en la lista de CRDs que devuelve este comando.

Paso 4: Crear Instancias del Recurso Personalizado

Una vez que tu CRD está en su lugar, puedes comenzar a crear instancias de tu recurso personalizado. Esto se hace de la misma manera que crearías cualquier otro recurso en Kubernetes, utilizando el comando kubectl apply. Aquí hay un ejemplo de cómo se vería este comando:


kubectl apply -f my-resource.yaml

En este punto, has creado con éxito un CRD y estás listo para comenzar a usarlo en tus aplicaciones. Recuerda que los CRDs son una forma poderosa de extender la funcionalidad de Kubernetes, y pueden ser una herramienta invaluable para adaptar Kubernetes a las necesidades específicas de tu organización.

Crear objetos personalizados

La elaboración de entidades personalizadas dentro del contexto de Kubernetes necesita un conocimiento consistente sobre las Configuraciones de Recursos Definidos por el usuario (CRD, por sus siglas en inglés). Te mostramos a continuación, los pasos claves para realizar tal configuración.

Primera Etapa: Determinación del Esquema de la Entidad Personalizada

La primera etapa en la creación de una entidad personalizada comprende la establecimiento de su estructura. Esto se lleva a cabo a través de un archivo YAML que describa las características de la nueva entidad y establezca los procedimientos que Kubernetes deben seguir para su implementación. Por ejemplo, podrías diseñar una entidad personalizada para un software específico que contenga elementos como el rótulo del software, su versión y su configuración de red.


apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  name: apps.miempresa.com
spec:
  group: miempresa.com
  versions:
  - name: v1
    served: true
    storage: true
    schema:
      openAPIV3Schema:
        type: object
        properties:
          spec:
            type: object
            properties:
              labelSoftware:
                type: string
              version:
                type: string
              configRed:
                type: object
                properties:
                  ip:
                    type: string
                  puerto:
                    type: integer

Segunda Etapa: Generación de la Entidad Personalizada

Cuando ya se ha establecido la configuración de la entidad personalizada, el siguiente paso es la generación de la entidad misma. Este proceso también se realiza utilizando un documento YAML que será implementado al cluster de Kubernetes. En este documento, se detallarán los valores correspondientes a las características que especificaste en la estructura.


apiVersion: miempresa.com/v1
kind: Software
metadata:
  name: mi-software
spec:
  labelSoftware: "Mi Software"
  version: "1.0"
  configRed:
    ip: "192.168.1.1"
    puerto: 8080

Tercera Etapa: Implementación de la Entidad Personalizada

Concluido el diseño y generación de las entidades personalizadas, estos deben ser implementados a tu clúster de Kubernetes utilizando el comando kubectl apply. Este proceso generará la entidad en tu clúster y Kubernetes empezará a administrarlo de acuerdo a las instrucciones definidas en la estructura.


kubectl apply -f mi-software.yaml

Recomendaciones Finales

El diseño de entidades personalizadas en Kubernetes puede ser un proceso sumamente útil que te da control total de cómo quieres que Kubernetes maneje tus aplicaciones y otros recursos. Sin embargo, también puede ser un proceso complejo que requiere un conocimiento sólido de las CRD. Por tal motivo, te recomendamos que efectúes pruebas exhaustivas de tus entidades personalizadas en un ambiente de desarrollo antes de implementarlas en tu clúster de producción.

Eliminación de CRD

Eliminar una Definición de Recurso Personalizado (CRD) es un proceso que requiere una comprensión clara de cómo funcionan los CRD en Kubernetes. Aunque puede parecer una tarea simple, la eliminación de un CRD puede tener implicaciones significativas en su clúster de Kubernetes. Por lo tanto, es esencial que comprenda completamente el proceso antes de proceder.

Proceso de Eliminación de CRD

Para eliminar un CRD, necesitará utilizar el comando kubectl delete. Este comando le permite eliminar recursos en su clúster de Kubernetes. Aquí hay un ejemplo de cómo se vería este comando:


kubectl delete crd nombre-del-crd

En este comando, nombre-del-crd es el nombre del CRD que desea eliminar. Una vez que ejecute este comando, Kubernetes eliminará el CRD y todos los recursos personalizados asociados con él.

Implicaciones de la Eliminación de CRD

Es importante tener en cuenta que la eliminación de un CRD también eliminará todos los recursos personalizados asociados con él. Esto significa que si tiene cualquier objeto en su clúster que dependa de este CRD, estos objetos también se eliminarán. Por lo tanto, debe asegurarse de que comprende completamente las implicaciones de la eliminación de un CRD antes de proceder.

Recuperación de un CRD Eliminado

Si elimina accidentalmente un CRD, puede ser posible recuperarlo. Sin embargo, esto dependerá de si ha habilitado la función de eliminación en cascada en su clúster de Kubernetes. Si la eliminación en cascada está habilitada, entonces cuando elimine un CRD, Kubernetes también eliminará todos los recursos personalizados asociados con él. Si la eliminación en cascada no está habilitada, entonces los recursos personalizados no se eliminarán y podrán ser recuperados.

Conclusión

La eliminación de un CRD es un proceso que debe tomarse en serio. Antes de eliminar un CRD, asegúrese de comprender completamente las implicaciones de su acción. Recuerde que la eliminación de un CRD también eliminará todos los recursos personalizados asociados con él. Por lo tanto, debe tener cuidado al eliminar CRD para evitar la pérdida accidental de datos.

`

`

FAQ

Ahora discutiremos algunas preguntas frecuentes respecto a los Perfiles de Recursos Avanzados (PRA) en el entorno de Kubernetes.

¿Qué implica un Perfil de Recurso Avanzado (PRA)?

Un PRA, en su esencia, es una extensión de la API de Kubernetes que facilita la integración de nuevos tipos de recursos avanzados. Estos recursos modernizados funcionan al igual que los componentes convencionales de Kubernetes, incluyendo clusters, herramientas y despliegues.

¿Cómo se crea un PRA?

Crear un PRA consiste en definir una nueva especie de recurso en un archivo YAML, y luego implementarlo con el comando kubectl apply. Dicho archivo YAML debe indicar el nombre de la novedosa integración, la API con la que se asociará y su versión. Podrías incorporar información adicional del recurso, como los campos personalizados y la verificación de estructuras.

¿Cuándo sería apropiado utilizar un PRA?

Los PRA son útiles cuando necesitas crear y administrar elementos de una nueva clase de recurso que no existe de forma predeterminada en la API de Kubernetes. Un ejemplo podría ser la utilización de un PRA para diseñar un recurso que represente una base de datos, una aplicación o un servicio de backend.

¿Cómo se eliminan los PRA?

Para descartar un PRA, puedes emplear el comando kubectl delete. Sin embargo, debes considerar que al eliminar un PRA también se erradicarán todas las instancias del recurso avanzado que hayas configurado. Por lo que es esencial verificar que no necesitas esas instancias antes de eliminar el PRA.

¿Es viable utilizar un PRA en lugar de los recursos estándar de Kubernetes?

Los PRA no están diseñados para suplantar los recursos habituales de Kubernetes, sino para aportar un valor añadido. Los componentes estándar de Kubernetes proporcionan las funcionalidades básicas para gestionar aplicaciones en un cluster de Kubernetes, pero los PRA permiten definir y administrar componentes adaptados a tus requerimientos específicos.

¿Qué sucede si dos PRA comparten el mismo nombre?

Kubernetes establece una restricción que prohíbe que dos PRA tengan el mismo nombre en el mismo grupo de API. Si intentas crear un PRA con un nombre ya existente, recibirás un mensaje de error.

¿Puedo ajustar la estructura de un PRA después de su creación?

Así es, puedes alterar la estructura de un PRA después de haberlo creado. No obstante, te aconsejamos actuar con precaución, ya que realizar cambios en la estructura de un PRA pueden tener efectos no deseados. Por ejemplo, si eliminas un campo de la estructura de un PRA, todas las instancias del recurso avanzado que usen ese campo se volverán inválidas.

Referencias

Si estás buscando información relevante para entender las Definiciones de Recursos Personalizados (DRP), hemos recopilado una lista de recursos clave que podrían ser de gran ayuda. Estas fuentes te proporcionarán una visión clara y detallada de lo que son las DRP y cómo pueden ser implementadas efectivamente en Kubernetes. Veamos:

  1. Documentación Oficial de Kubernetes: Este documento es un recurso esencial que aportará una contextualización detallada de las DRP en el ecosistema de Kubernetes.

  2. Análisis de Stefan Prodan: Este análisis presenta percepciones valiosas sobre la construcción efectiva de los Recursos Personalizados utilizando DRP en este sistema.

  3. Descripción de Red Hat: Esta descripción aporta el análisis de cómo Red Hat en el contexto de OpenShift utiliza las DRP en Kubernetes.

  4. Estudio de Daniel Imberman: En este estudio, Daniel compara la Agregación de API y las DRP como dos métodos para mejorar la funcionalidad de la API de Kubernetes.

  5. Tutorial de Flavio Percoco: En este tutorial detallado, descubrirás cómo diseñar un Operador para Kubernetes utilizando Python y DRP.

  6. Explicación de Piotr Skowronek: Este recurso aporta claridad sobre los recursos personalizados en el sistema de Kubernetes.

  7. Investigación de Michael Hausenblas: En su investigación, Michael trata cómo optimizar las DRP para aumentar la funcionalidad de Kubernetes.

  8. Guía de Bitnami: Esta guía detalla el proceso de creación y utilización de las DRP dentro del entorno de Kubernetes.

  9. Estudio de caso de Alex Ellis: Alex presenta un estudio práctico y minuciosamente detallado sobre el uso de DRPs dentro del entorno Kubernetes.

  10. Clase Magistral de Sandeep Dinesh: En su clase, Sandeep destaca cómo ampliar las capacidades de Kubernetes por medio de las DRP.

Cada uno de estos recursos proporcionará una visión única y sincera sobre DRP y su aplicación en Kubernetes, lo que permitirá mejoras y expansiones significativas en la utilización de este sistema. Esperamos que encuentres estos recursos útiles en tu aprendizaje constante.

Recent Posts

Qu’est-ce que HTTP/2 et en quoi est-il différent de HTTP/1 ?

Parcours de développement : Passage de HTTP/1 à HTTP/2 Le Hypertext Transfer Protocol, connu sous l'abréviation…

11 meses ago

Cómo hackear una API en 60 minutos con herramientas de código abierto

Las API para diferentes personas son muy diferentes La dimensión digital está llena de nudos…

12 meses ago

¿Qué es un ataque Web Shell? ¿Cómo detectarlo y prevenirlo?

¿Qué es un webshell? Un shell web es una herramienta de intrusión digital que concede…

1 año ago

¿Qué es un shell inverso? Ejemplos y prevención

¿Qué es un Reverse Shell? Un "Reverse Shell" o, como se denomina en español, "Shell…

1 año ago

¿Qué es un pod de Kubernetes? Explicación del ciclo de vida

¿Qué es un pod de Kubernetes? Kubernetes (K8s) incorpora a su estructura tecnológica un componente…

1 año ago

Principales patrones de diseño de Kubernetes

Patrones fundamentales El paradigma laboral de Kubernetes se forja a través de diversos elementos cruciales,…

1 año ago