Articulo de referencia

Kubernetes

{{cite web |url=https://github.com/kubernetes/kubernetes/commit/a0abb3815755d6a77eed2d07bb0aa7d255e4e769 |title=v0.2 |work=github.com |date=2014-09-09 |access-date=2022-11-23 |a...

Kubernetes ( / ˌ k ( j ) b ər ˈ n ɛ t ɪ s , - ˈ n t ɪ s , - ˈ n t z , - ˈ n ɛ t z / ), también conocido como K8s, es un sistema de orquestación de contenedores de código abierto para automatizar la implementación , el escalado y la gestión de software . [ 3 ] [ 4 ] Diseñado originalmente por Google , el proyecto ahora es mantenido por una comunidad mundial de colaboradores, y la marca registrada pertenece a la Cloud Native Computing Foundation .

El nombre Kubernetes proviene del término griego antiguo κυβερνήτης , kubernḗtēs ( timonel, piloto ) , que también es el origen de las palabras cibernética y (a través del latín) gobernador . "Kubernetes" se abrevia a menudo con la contracción numérica "K8s", que significa "la letra K, seguida de 8 letras, seguida de s". [ 5 ]

Kubernetes ensambla uno o más ordenadores, ya sean máquinas virtuales o servidores físicos , en un clúster que puede ejecutar cargas de trabajo en contenedores. Funciona con diversos entornos de ejecución de contenedores, como containerd y CRI-O . [ 6 ] Su idoneidad para ejecutar y gestionar cargas de trabajo de todos los tamaños y estilos ha propiciado su amplia adopción en nubes y centros de datos. Existen múltiples distribuciones de esta plataforma, tanto de proveedores de software independientes (ISV) como de ofertas alojadas en la nube de los principales proveedores de nube pública. [ 7 ]

El software consta de un plano de control y nodos sobre los que se ejecutan las aplicaciones. Incluye herramientas como kubeadmy kubectlque se pueden usar para interactuar con su API basada en REST . [ 8 ]

Historia

Charla sobre Google Kubernetes Engine en la Cumbre de Google Cloud 2017.

Kubernetes fue anunciado por Google el 6 de junio de 2014. [ 9 ] El proyecto fue concebido y creado por los empleados de Google Joe Beda, Brendan Burns y Craig McLuckie. Otros en Google pronto se unieron para ayudar a construir el proyecto, incluyendo a Ville Aikas, Dawn Chen, Brian Grant, Tim Hockin y Daniel Smith. [ 10 ] [ 11 ] Otras compañías como Red Hat y CoreOS se unieron al esfuerzo poco después, con contribuyentes notables como Clayton Coleman y Kelsey Hightower . [ 9 ]

El diseño y desarrollo de Kubernetes se inspiró en el gestor de clústeres Borg de Google y se basó en la Teoría de las Promesas . [ 12 ] [ 13 ] Muchos de sus principales colaboradores habían trabajado previamente en Borg; [ 14 ] [ 15 ] le dieron a Kubernetes el nombre en clave " Proyecto 7 " en honor al personaje ex- Borg de Star Trek, Seven of Nine [ 16 ] y le dieron a su logotipo un timón de barco de siete radios (diseñado por Tim Hockin). A diferencia de Borg, que fue escrito en C++ , [ 14 ] Kubernetes está escrito en el lenguaje Go .

Kubernetes se anunció en junio de 2014 y la versión 1.0 se lanzó el 21 de julio de 2015. [ 17 ] Google trabajó con la Linux Foundation para formar la Cloud Native Computing Foundation (CNCF) [ 18 ] y ofreció Kubernetes como tecnología semilla.

Google ya ofrecía un servicio de Kubernetes administrado, GKE , y Red Hat brindaba soporte a Kubernetes como parte de OpenShift desde el inicio del proyecto Kubernetes en 2014. [ 19 ] En 2017, los principales competidores se unieron en torno a Kubernetes y anunciaron la adición de soporte nativo para él:

El 6 de marzo de 2018, el proyecto Kubernetes alcanzó el noveno lugar en la lista de proyectos de GitHub por número de commits , y el segundo lugar en autores y problemas, después del kernel de Linux . [ 25 ]

Hasta la versión 1.18, Kubernetes seguía una política de soporte N-2, lo que significa que las tres versiones menores más recientes recibían actualizaciones de seguridad y correcciones de errores. [ 26 ] A partir de la versión 1.19, Kubernetes sigue una política de soporte N-3. [ 27 ]

Conceptos

Diagrama de arquitectura de Kubernetes

Kubernetes define un conjunto de bloques de construcción ("primitivas") que, en conjunto, proporcionan mecanismos para desplegar, mantener y escalar aplicaciones en función de la CPU , la memoria o métricas personalizadas. [ 28 ] Kubernetes es flexible y extensible para satisfacer las necesidades de diferentes cargas de trabajo. Los componentes internos, así como las extensiones y los contenedores que se ejecutan en Kubernetes, dependen de la API de Kubernetes. [ 29 ] [ 30 ]

La plataforma ejerce su control sobre los recursos informáticos y de almacenamiento definiendo los recursos como objetos, que luego pueden gestionarse como tales.

Kubernetes sigue la arquitectura primaria/réplica . Los componentes de Kubernetes se pueden dividir en aquellos que administran un nodo individual y aquellos que forman parte del plano de control. [ 29 ] [ 31 ]

Plano de control

El plano de control de Kubernetes gestiona su carga de trabajo y dirige la comunicación en todo el sistema. Consta de varios componentes como el cifrado TLS , el control de acceso basado en roles (RBAC) y un método de autenticación robusto , separación de red, cada uno en su propio proceso, que puede ejecutarse tanto en un único nodo como en varios nodos que admiten clústeres de alta disponibilidad . [ 31 ] Los diversos componentes del plano de control de Kubernetes son los siguientes. [ 32 ]

Etcd

Etcd [ 33 ] es un almacén de datos persistente, ligero, distribuido y de clave-valor (desarrollado originalmente como parte de CoreOS). Almacena de forma fiable los datos de configuración del clúster, representando su estado general en cualquier momento. Etcd prioriza la consistencia sobre la disponibilidad en caso de partición de red (véase el teorema CAP ). La consistencia es crucial para la correcta planificación y operación de los servicios.

servidor API

El servidor API sirve la API de Kubernetes usando JSON sobre HTTPS , que proporciona la interfaz interna y externa a Kubernetes. [ 29 ] [ 34 ] El servidor API procesa, valida las solicitudes REST y actualiza el estado de los objetos API en etcd, lo que permite a los clientes configurar cargas de trabajo y contenedores en los nodos de trabajo. [ 35 ] El servidor API usa la API watch de etcd para monitorear el clúster, implementar cambios de configuración críticos o restaurar cualquier divergencia del estado del clúster al estado deseado declarado en etcd.

Por ejemplo, un operador humano puede especificar que se deben ejecutar tres instancias de un "pod" en particular (ver más abajo), y etcd almacena este hecho. Si el controlador de despliegue encuentra que solo se están ejecutando dos instancias (lo que entra en conflicto con la declaración de etcd), [ 36 ] programa la creación de una instancia adicional de ese pod. [ 31 ]

Planificador

El planificador es un componente extensible que selecciona el nodo en el que se ejecuta un pod no programado (la unidad básica de las cargas de trabajo que se van a programar), en función de la disponibilidad de recursos y otras restricciones. El planificador realiza un seguimiento de la asignación de recursos en cada nodo para garantizar que la carga de trabajo no se programe en exceso de los recursos disponibles. Para ello, el planificador debe conocer los requisitos de recursos, la disponibilidad de recursos y otras restricciones o directivas de política proporcionadas por el usuario, como la calidad del servicio, los requisitos de afinidad/antiafinidad y la localidad de los datos. La función del planificador es hacer coincidir la "oferta" de recursos con la "demanda" de la carga de trabajo. [ 37 ]

Kubernetes permite ejecutar varios planificadores dentro de un mismo clúster. Por lo tanto, se pueden desarrollar e instalar complementos de planificador como extensiones integradas al planificador nativo, ejecutándolo como un planificador independiente, siempre que cumplan con el marco de planificación de Kubernetes. [ 38 ] Esto permite a los administradores del clúster extender o modificar el comportamiento del planificador predeterminado de Kubernetes según sus necesidades.

Controladores

Un controlador es un bucle de reconciliación que dirige el estado actual del clúster hacia el estado deseado, comunicándose con el servidor API para crear, actualizar y eliminar los recursos que administra (por ejemplo, pods o puntos finales de servicio). [ 39 ] [ 34 ]

Un ejemplo de controlador es un controlador ReplicaSet, que gestiona la replicación y el escalado ejecutando un número específico de copias de un pod en todo el clúster. El controlador también gestiona la creación de pods de reemplazo si el nodo subyacente falla. [ 39 ] Otros controladores que forman parte del sistema central de Kubernetes incluyen un controlador DaemonSet para ejecutar exactamente un pod en cada máquina (o en un subconjunto de máquinas) y un controlador Job para ejecutar pods que se ejecutan hasta su finalización (por ejemplo, como parte de un trabajo por lotes). [ 40 ] Los selectores de etiquetas a menudo forman parte de la definición del controlador que especifica el conjunto de pods que gestiona un controlador. [ 41 ]

El gestor de controladores es un único proceso que gestiona varios controladores centrales de Kubernetes (incluidos los ejemplos descritos anteriormente), se distribuye como parte de la instalación estándar de Kubernetes y responde a la pérdida de nodos. [ 32 ]

También se pueden instalar controladores personalizados en el clúster, lo que permite ampliar aún más el comportamiento y la API de Kubernetes cuando se utiliza junto con recursos personalizados (consulte los recursos, controladores y operadores personalizados a continuación).

Nodos

Un nodo, también conocido como trabajador o minion, es una máquina donde se implementan contenedores (cargas de trabajo). Cada nodo del clúster debe ejecutar un entorno de ejecución de contenedores , así como los componentes que se mencionan a continuación, para comunicarse con la configuración de red principal de estos contenedores.

kubelet

kubelet es responsable del estado de ejecución de cada nodo, asegurando que todos los contenedores en el nodo estén en buen estado. Se encarga de iniciar, detener y mantener los contenedores de aplicaciones organizados en pods según lo indique el plano de control. [ 29 ] [ 42 ] kubelet supervisa el estado de un pod y, si no se encuentra en el estado deseado, el pod se vuelve a desplegar en el mismo nodo. El estado del nodo se transmite cada pocos segundos mediante mensajes de latido al servidor API. Una vez que el plano de control detecta un fallo en un nodo, se espera que un controlador de nivel superior observe este cambio de estado y lance pods en otro nodo en buen estado. [ 43 ]

Entorno de ejecución de contenedores

Un entorno de ejecución de contenedores es responsable del ciclo de vida de los contenedores, incluyendo el lanzamiento, la conciliación y la eliminación de los mismos. kubelet interactúa con los entornos de ejecución de contenedores a través de la Interfaz de Entorno de Ejecución de Contenedores (CRI), [ 44 ] [ 45 ] que desacopla el mantenimiento del núcleo de Kubernetes de la implementación real de CRI.

Originalmente, kubelet estaba estrechamente acoplado a Docker como entorno de ejecución de contenedores [ 46 ] . Posteriormente, desarrolló CRI y un "dockershim" que se conectaba con Docker por un lado y (a través de CRI) con Kubelet por el otro. Desde noviembre de 2020 [ 47 ] hasta abril de 2022, Kubernetes dejó de usar el shim . [ 48 ] [ 44 ] [ 49 ] Con el lanzamiento de la versión 1.24 en mayo de 2022, el "dockershim" se eliminó por completo, dejando de ofrecer soporte oficial para Docker como entorno de ejecución de contenedores. [ 50 ]

A partir de 2026, los entornos de ejecución de contenedores compatibles con CRI más utilizados incluyen containerd y CRI-O .

kube-proxy

kube-proxy es una implementación de un proxy de red y un balanceador de carga , y admite la abstracción de servicios junto con otras operaciones de red. [ 29 ] Es responsable de enrutar el tráfico al contenedor apropiado según la IP y el número de puerto de la solicitud entrante.

Espacios de nombres

En Kubernetes, los espacios de nombres se utilizan para segregar los recursos que maneja en colecciones distintas y que no se superponen. [ 51 ] Están diseñados para usarse en entornos con muchos usuarios distribuidos en varios equipos o proyectos, o incluso para separar entornos como desarrollo, pruebas y producción.

Cápsulas

La unidad básica de computación desplegable en Kubernetes es el pod, [ 52 ] que consta de uno o más contenedores ubicados en el mismo nodo. [ 29 ] A cada pod se le asigna una dirección IP única dentro del clúster, lo que permite que las aplicaciones utilicen puertos sin riesgo de conflicto. [ 53 ] Dentro del pod, todos los contenedores tienen un contexto compartido y pueden hacer referencia entre sí.

Un contenedor reside dentro de un pod. El contenedor es el nivel más bajo de un microservicio y alberga la aplicación en ejecución, las bibliotecas y sus dependencias. En el caso de uso más común, cada pod tiene un único contenedor.

Cargas de trabajo

Kubernetes admite varias abstracciones de cargas de trabajo que se encuentran en un nivel superior al de los pods simples. Esto permite a los usuarios definir y administrar estas abstracciones de alto nivel de forma declarativa, en lugar de tener que administrar pods individuales por separado. A continuación, se describen algunas de estas abstracciones, compatibles con una instalación estándar de Kubernetes.

Conjuntos de réplicas, controladores de replicación e implementaciones

El propósito de un ReplicaSet es mantener un conjunto estable de pods réplica en ejecución en todo momento. Por ello, se suele utilizar para garantizar la disponibilidad de un número específico de Pods idénticos. [ 54 ] También se puede decir que un ReplicaSet es un mecanismo de agrupación que permite a Kubernetes mantener el número de instancias declaradas para un pod determinado. La definición de un ReplicaSet utiliza un selector, cuya evaluación permite identificar todos los pods asociados.

Un ReplicationController, similar a un ReplicaSet, cumple la misma función y se comporta de manera similar, asegurando que siempre exista un número específico de réplicas de pods según se desee. La carga de trabajo del ReplicationController fue la predecesora de un ReplicaSet, pero finalmente se dejó de usar en favor de ReplicaSet para aprovechar los selectores de etiquetas basados ​​en conjuntos. [ 54 ]

Los despliegues son un mecanismo de gestión de nivel superior para los ReplicaSets. Mientras que el controlador de ReplicaSet gestiona la escala del ReplicaSet, el controlador de despliegue gestiona lo que sucede con el ReplicaSet : si se debe implementar una actualización, revertirla, etc. Cuando los despliegues aumentan o disminuyen de escala, esto da como resultado un cambio en la declaración del ReplicaSet, y este cambio en el estado declarado es gestionado por el controlador de ReplicaSet. [ 36 ]

Conjuntos con estado

Los StatefulSets son controladores que imponen las propiedades de unicidad y orden entre las instancias de un pod, y pueden usarse para ejecutar aplicaciones con estado . [ 55 ] Si bien escalar aplicaciones sin estado es solo cuestión de agregar más pods en ejecución, hacerlo para cargas de trabajo con estado es más difícil, porque el estado debe conservarse si se reinicia un pod. Si la aplicación se escala hacia arriba o hacia abajo, es posible que sea necesario redistribuir el estado.

Las bases de datos son un ejemplo de cargas de trabajo con estado. Cuando se ejecutan en modo de alta disponibilidad, muchas bases de datos incluyen una instancia principal y varias instancias secundarias. En este caso, el orden de las instancias es fundamental. Otras aplicaciones, como Apache Kafka, distribuyen los datos entre sus intermediarios; por lo tanto, cada intermediario es diferente. En este caso, la unicidad de las instancias es crucial.

DaemonSets

Los DaemonSets se encargan de garantizar que se cree un pod en cada nodo del clúster. [ 56 ] Generalmente, la mayoría de las cargas de trabajo se escalan en función de la cantidad de réplicas deseada, según los requisitos de disponibilidad y rendimiento de la aplicación. Sin embargo, en otros casos, puede ser necesario implementar un pod en cada nodo del clúster, aumentando el número total de pods a medida que se agregan nodos y eliminándolos mediante recolección de basura . Esto resulta especialmente útil para casos de uso donde la carga de trabajo depende del nodo o la máquina host, como la recopilación de registros, los controladores de entrada y los servicios de almacenamiento.

Servicios

Vista simplificada que muestra cómo interactúan los servicios con la red de pods en un clúster de Kubernetes.

Un servicio de Kubernetes es un conjunto de pods que trabajan juntos, como una capa de una aplicación de múltiples capas . El conjunto de pods que constituyen un servicio se define mediante un selector de etiquetas. [ 29 ] Kubernetes proporciona dos modos de descubrimiento de servicios : mediante variables de entorno o mediante el DNS de Kubernetes. [ 57 ] El descubrimiento de servicios asigna una dirección IP y un nombre DNS estables al servicio, y equilibra la carga del tráfico de forma rotativa a las conexiones de red de esa dirección IP entre los pods que coinciden con el selector (incluso cuando los fallos hacen que los pods se muevan de una máquina a otra). [ 53 ] Por defecto, un servicio se expone dentro de un clúster (por ejemplo, los pods de back-end podrían agruparse en un servicio, con las solicitudes de los pods de front-end equilibradas entre ellos), pero un servicio también puede exponerse fuera de un clúster (por ejemplo, para que los clientes accedan a los pods de front-end). [ 58 ]

Volúmenes

Los sistemas de archivos en un contenedor de Kubernetes proporcionan almacenamiento efímero por defecto. Esto significa que un reinicio del contenedor borrará su sistema de archivos. Por lo tanto, esta forma de almacenamiento es bastante limitada, excepto en aplicaciones triviales. Un volumen de Kubernetes [ 59 ] proporciona almacenamiento persistente. Este almacenamiento también se puede usar como espacio de disco compartido para contenedores dentro del pod. Los volúmenes se montan en el contenedor en puntos de montaje específicos definidos por la configuración del pod y no se pueden montar en otros volúmenes ni vincular a otros volúmenes. El mismo volumen puede ser montado en diferentes puntos del árbol del sistema de archivos por diferentes contenedores.

Mapas de configuración y secretos

Un desafío común en las aplicaciones es decidir dónde almacenar y gestionar la información de configuración, que puede contener datos confidenciales. Estos datos pueden ser desde propiedades individuales hasta archivos de configuración completos, como documentos JSON o XML . Kubernetes ofrece dos mecanismos estrechamente relacionados para abordar esta necesidad: ConfigMaps y Secrets, que permiten realizar cambios de configuración sin necesidad de recompilar la aplicación.

Los datos de los ConfigMaps y Secrets estarán disponibles para cada instancia de la aplicación a la que se hayan vinculado estos objetos mediante el Deployment. Un Secret o un ConfigMap se envía a un nodo solo si un pod en ese nodo lo requiere, y se almacenará únicamente en la memoria del nodo. Una vez que se elimina el pod que depende del Secret o ConfigMap, también se elimina la copia en memoria de todos los Secrets y ConfigMaps vinculados.

Los datos de un ConfigMap o Secret son accesibles para el pod a través de una de las siguientes formas: [ 60 ]

  1. Como variables de entorno , que kubelet consumirá desde el ConfigMap cuando se inicie el contenedor;
  2. Se monta dentro de un volumen accesible dentro del sistema de archivos del contenedor, lo que permite la recarga automática sin reiniciar el contenedor.

La principal diferencia entre un Secret y un ConfigMap es que los Secrets están diseñados específicamente para contener datos seguros y confidenciales, aunque no se cifran en reposo de forma predeterminada y requieren una configuración adicional para garantizar la seguridad total de su uso dentro del clúster. [ 61 ] Los Secrets se utilizan a menudo para almacenar datos confidenciales o sensibles, como certificados, credenciales para trabajar con registros de imágenes, contraseñas y claves SSH .

Etiquetas y selectores

Kubernetes permite a los clientes (usuarios o componentes internos) adjuntar claves llamadas etiquetas a cualquier objeto API en el sistema, como pods y nodos . De manera similar, los selectores de etiquetas son consultas sobre etiquetas que se resuelven en objetos coincidentes. [ 29 ] Cuando se define un servicio, se pueden definir los selectores de etiquetas que utilizará el enrutador/balanceador de carga del servicio para seleccionar las instancias de pod a las que se enrutará el tráfico. Por lo tanto, simplemente cambiando las etiquetas de los pods o cambiando los selectores de etiquetas en el servicio se puede utilizar para controlar qué pods reciben tráfico y cuáles no, lo que puede utilizarse para admitir varios patrones de despliegue como despliegues azul-verde o pruebas A/B . Esta capacidad para controlar dinámicamente cómo los servicios utilizan los recursos de implementación proporciona un acoplamiento flexible dentro de la infraestructura.

Por ejemplo, si los pods de una aplicación tienen etiquetas para un sistema tier(con valores como frontend, backend, por ejemplo) y un release_track(con valores como canary, production, por ejemplo), entonces una operación en todos los nodos backendy canarypuede usar un selector de etiquetas, como: [ 41 ]

tier=backend AND release_track=canary

Al igual que las etiquetas, los selectores de campo también permiten seleccionar recursos de Kubernetes. A diferencia de las etiquetas, la selección se basa en los valores de los atributos inherentes al recurso seleccionado, en lugar de en una categorización definida por el usuario. metadata.nameLos metadata.namespaceselectores de campo estarán presentes en todos los objetos de Kubernetes. Otros selectores que se pueden usar dependen del tipo de objeto o recurso.

Complementos

Los complementos son funcionalidades adicionales del clúster de Kubernetes implementadas como aplicaciones que se ejecutan dentro del mismo. Los pods pueden ser gestionados por Deployments, ReplicationControllers, etc. Existen muchos complementos. Algunos de los más importantes son:

DNS
El servidor DNS del clúster, además de los demás servidores DNS del entorno, proporciona registros DNS para los servicios de Kubernetes. Los contenedores iniciados por Kubernetes incluyen automáticamente este servidor DNS en sus búsquedas DNS.
Interfaz de usuario web
Esta es una interfaz de usuario web de propósito general para clústeres de Kubernetes. Permite a los administradores gestionar y solucionar problemas de las aplicaciones que se ejecutan en el clúster, así como del propio clúster.
Monitoreo de recursos
El sistema de monitorización de recursos de contenedores registra métricas sobre los contenedores en una base de datos central y proporciona una interfaz de usuario para consultar esos datos.
Seguimiento de costos
Las aplicaciones de monitorización de costes de Kubernetes permiten desglosar los costes por pods, nodos, espacios de nombres y etiquetas.
Registro a nivel de clúster
Para evitar la pérdida de datos de eventos en caso de fallos de nodos o pods, los registros de los contenedores se pueden guardar en un repositorio central con una interfaz de búsqueda y exploración. Kubernetes no ofrece almacenamiento nativo para los datos de registro, pero es posible integrar muchas soluciones de registro existentes en el clúster de Kubernetes.

Almacenamiento

Los contenedores surgieron como una forma de hacer que el software fuera portable. Un contenedor contiene todos los paquetes necesarios para ejecutar un servicio. El sistema de archivos que proporcionan hace que los contenedores sean extremadamente portables y fáciles de usar en el desarrollo. Un contenedor se puede trasladar del entorno de desarrollo al de pruebas o producción con pocos o ningún cambio de configuración.

Históricamente, Kubernetes solo era adecuado para servicios sin estado. Sin embargo, muchas aplicaciones cuentan con una base de datos que requiere persistencia, lo que impulsó la creación de almacenamiento persistente para Kubernetes. Implementar almacenamiento persistente para contenedores es uno de los principales desafíos para los administradores de Kubernetes, los ingenieros de DevOps y los ingenieros de la nube. Si bien los contenedores pueden ser efímeros, cada vez más datos que contienen no lo son, por lo que es necesario garantizar la supervivencia de los datos en caso de terminación del contenedor o falla del hardware. Al implementar contenedores con Kubernetes o aplicaciones en contenedores, las organizaciones suelen darse cuenta de que necesitan almacenamiento persistente. Necesitan proporcionar almacenamiento rápido y confiable para bases de datos, imágenes raíz y otros datos utilizados por los contenedores.

Además del panorama general, la Cloud Native Computing Foundation (CNCF) ha publicado otra información sobre el almacenamiento persistente de Kubernetes, incluyendo una entrada de blog que ayuda a definir el patrón de almacenamiento adjunto al contenedor. Este patrón puede entenderse como uno que utiliza Kubernetes como componente del sistema o servicio de almacenamiento. [ 62 ]

También se puede encontrar más información sobre la popularidad relativa de estos y otros enfoques en la encuesta de panorama de la CNCF, que mostró que OpenEBS , una plataforma de almacenamiento persistente con estado de Datacore Software, [ 63 ] y Rook , un proyecto de orquestación de almacenamiento , eran los dos proyectos con más probabilidades de estar en evaluación a partir del otoño de 2019. [ 64 ]

El almacenamiento adjunto a contenedores (Container Attached Storage) es un tipo de almacenamiento de datos que surgió a medida que Kubernetes ganaba prominencia. El enfoque o patrón de almacenamiento adjunto a contenedores se basa en el propio Kubernetes para ciertas capacidades, al tiempo que proporciona principalmente bloques, archivos, objetos e interfaces a las cargas de trabajo que se ejecutan en Kubernetes. [ 65 ]

Entre los atributos comunes del almacenamiento conectado a contenedores se incluyen el uso de extensiones de Kubernetes, como definiciones de recursos personalizadas, y el uso del propio Kubernetes para funciones que, de otro modo, se desarrollarían e implementarían por separado para el almacenamiento o la gestión de datos. Ejemplos de funcionalidades proporcionadas por definiciones de recursos personalizadas o por el propio Kubernetes incluyen la lógica de reintento, proporcionada por el propio Kubernetes, y la creación y el mantenimiento de un inventario de medios y volúmenes de almacenamiento disponibles, que normalmente se proporciona mediante una definición de recurso personalizada. [ 66 ] [ 67 ]

Interfaz de almacenamiento de contenedores (CSI)

En la versión 1.9 de Kubernetes, se introdujo la versión alfa inicial de Container Storage Interface (CSI). [ 68 ] Anteriormente, los complementos de volumen de almacenamiento se incluían en la distribución de Kubernetes. Al crear una CSI estandarizada, el código necesario para interactuar con sistemas de almacenamiento externos se separó del código base principal de Kubernetes. Tan solo un año después, la función CSI se lanzó como disponible de forma general (GA) en Kubernetes. [ 69 ]

API

Un componente clave del plano de control de Kubernetes es el servidor API, que expone una API HTTP que puede ser invocada por otras partes del clúster, así como por usuarios finales y componentes externos. Esta API es una API REST , de naturaleza declarativa, y es la misma API expuesta al plano de control. [ 70 ] El servidor API está respaldado por etcd para almacenar todos los registros de forma persistente. [ 71 ]

objetos de API

En Kubernetes, todos los objetos sirven como el " registro de intención " del estado del clúster y pueden definir el estado deseado en el que el escritor del objeto desea que se encuentre el clúster. [ 72 ] Por lo tanto, la mayoría de los objetos de Kubernetes tienen el mismo conjunto de campos anidados, como se muestra a continuación:

  • spec: Describe el estado deseado del recurso, que puede ser controlado por los usuarios finales u otros controladores de nivel superior;
  • status: Describe el estado actual del recurso, que es actualizado activamente por el controlador del recurso.

Todos los objetos en Kubernetes están sujetos a las mismas convenciones de API. Algunas de ellas incluyen:

  • Debe tener los siguientes metadatos en el campo de objeto anidado metadata: [ 73 ]
    • namespace: una etiqueta en la que se subdividen los objetos;
    • name: una cadena que identifica de forma única el objeto dentro del espacio de nombres definido;
    • uid: una cadena que identifica de forma única cualquier objeto de API en el clúster, independientemente del tipo, nombre, espacio de nombres y tiempo, es decir, incluso entre eliminaciones y recreaciones con el mismo tipo, nombre y espacio de nombres.
  • Puede ser gestionado por otro controlador, que se define en el metadata.ownerReferencescampo: [ 74 ]
    • Como máximo, otro objeto será el controlador gestor del objeto controlado, que se define mediante el controllercampo.
  • Puede ser recolectado como basura si se elimina al propietario: [ 75 ]
    • Cuando se elimina un objeto, todos los objetos dependientes también pueden eliminarse en cascada.

Recursos, controladores y operadores personalizados

La API de Kubernetes se puede extender mediante recursos personalizados , que representan objetos que no forman parte de la instalación estándar de Kubernetes. Estos recursos personalizados se declaran mediante definiciones de recursos personalizados (CRD), un tipo de recurso que se puede registrar y anular el registro dinámicamente sin apagar ni reiniciar un clúster en ejecución. [ 76 ]

Los controladores personalizados son otro mecanismo de extensión que interactúa con la API de Kubernetes, de forma similar a los controladores predeterminados del gestor de controladores de Kubernetes estándar preinstalado. Estos controladores pueden interactuar con recursos personalizados para permitir una API declarativa: los usuarios pueden declarar el estado deseado del sistema mediante los recursos personalizados, y es responsabilidad del controlador personalizado observar el cambio y gestionarlo.

La combinación de recursos personalizados y controladores personalizados se suele denominar operador de Kubernetes . [ 77 ] El caso de uso clave para los operadores es capturar el objetivo de un operador humano que gestiona un servicio o un conjunto de servicios e implementarlos mediante automatización, con una API declarativa que respalde dicha automatización. Los operadores humanos que se encargan de aplicaciones y servicios específicos poseen un profundo conocimiento de cómo debería comportarse el sistema, cómo desplegarlo y cómo reaccionar ante los problemas.

Algunos ejemplos de problemas resueltos por los operadores incluyen la realización y restauración de copias de seguridad del estado de la aplicación, y la gestión de las actualizaciones del código de la aplicación junto con cambios relacionados, como esquemas de bases de datos o configuraciones adicionales. Varios proyectos destacados del programa de incubación de la Cloud Native Computing Foundation siguen el patrón de operador para extender Kubernetes, entre ellos Argo, Open Policy Agent e Istio. [ 78 ]

seguridad de la API

Kubernetes define las siguientes estrategias para controlar el acceso a su API. [ 79 ]

Seguridad en el transporte

El servidor API de Kubernetes escucha en un puerto TCP que sirve tráfico HTTPS , con el fin de aplicar seguridad de capa de transporte (TLS) mediante certificados CA. [ 32 ]

En versiones anteriores de Kubernetes, el servidor API admitía la escucha en puertos HTTP y HTTPS (sin que el número de puerto HTTP tuviera ningún tipo de seguridad de transporte). Esta funcionalidad quedó obsoleta en la versión 1.10 y finalmente se eliminó por completo en la versión 1.20 de Kubernetes. [ 80 ]

Autenticación

Se espera que todas las solicitudes realizadas al servidor API de Kubernetes estén autenticadas y admite varias estrategias de autenticación, algunas de las cuales se enumeran a continuación: [ 81 ]

  1. Certificados de cliente X.509
  2. fichas al portador
  3. Tokens de cuenta de servicio, destinados al acceso programático a la API.

Normalmente, se espera que los usuarios indiquen y definan los detalles de la URL del clúster junto con las credenciales necesarias en un archivo kubeconfig , que son compatibles de forma nativa con otras herramientas de Kubernetes como kubectl y las bibliotecas cliente oficiales de Kubernetes. [ 82 ]

Autorización

La API de Kubernetes admite los siguientes modos de autorización: [ 83 ]

  1. Modo de autorización de nodo : Otorga una lista fija de operaciones de solicitudes de API que los kubelets pueden realizar para funcionar correctamente.
  2. Modo de control de acceso basado en atributos (ABAC) : otorga derechos de acceso a los usuarios mediante el uso de políticas de control de acceso definidas que combinan atributos.
  3. Modo de control de acceso basado en roles (RBAC) : otorga derechos de acceso a los usuarios en función de los roles que se les asignan, donde cada rol define una lista de acciones permitidas.
  4. Modo webhook : Consulta un servicio API REST para determinar si un usuario está autorizado a realizar una acción determinada. [ 32 ]

clientes API

Kubernetes admite varios clientes API oficiales:

API de clúster

Se han utilizado los mismos principios de diseño de API para definir una API que permita aprovechar un programa para crear, configurar y administrar clústeres de Kubernetes. Esta se denomina API de clúster. [ 86 ] Un concepto clave incorporado en la API es el uso de la Infraestructura como Software , o la noción de que la infraestructura del clúster de Kubernetes es en sí misma un recurso/objeto que puede administrarse como cualquier otro recurso de Kubernetes. De manera similar, las máquinas que componen el clúster también se tratan como un recurso de Kubernetes. La API consta de dos partes : la API principal y una implementación de proveedor. La implementación del proveedor consta de funciones específicas del proveedor de la nube que permiten a Kubernetes proporcionar la API del clúster de una manera bien integrada con los servicios y recursos del proveedor de la nube. [ 32 ]

Usos

Kubernetes se utiliza habitualmente como plataforma para alojar implementaciones basadas en microservicios , ya que tanto él como su ecosistema de herramientas asociado proporcionan todas las capacidades necesarias para abordar las principales preocupaciones de cualquier arquitectura de microservicios .

Crítica

Una crítica común a Kubernetes es que es demasiado complejo. Google también lo admitió. [ 87 ]

Distribuciones

Varios proveedores ofrecen plataformas basadas en Kubernetes o infraestructura como servicio (IaaS) que implementan Kubernetes. [ 88 ] [ 89 ]

Estas se clasifican generalmente según sean de código abierto, comerciales o gestionadas. A continuación se enumeran algunas distribuciones destacadas: [ 90 ]

Distribuciones de código abierto

  • Amazon EKS-D
  • k0s
  • k3s
  • Motor SUSE Rancher Kubernetes (RKE)
  • OKD.IO La distribución comunitaria de Kubernetes que impulsa Red Hat OpenShift

Distribuciones comerciales

Distribuciones gestionadas

Cronograma de lanzamiento

Windows de soporte

El siguiente gráfico muestra el período durante el cual cada versión es/fue compatible [ 92 ].

Véase también

Referencias

  1. "v0.2" . github.com . 2014-09-09. Archivado del original el 2022-11-23 . Recuperado el 2022-11-23 .
  2. "Versión 1.36.3" . 23 de julio de 2026. Consultado el 23 de julio de 2026 .
  3. "kubernetes/kubernetes" . GitHub . Archivado del original el 21/04/2017 . Consultado el 28/03/2017 .
  4. "¿Qué es Kubernetes?" . Kubernetes . Archivado del original el 1 de abril de 2017 . Consultado el 31 de marzo de 2017 .
  5. "Descripción general de Kubernetes" . Kubernetes . Consultado el 4 de enero de 2022 .{{cite web}}: CS1 maint: servicio de archivado obsoleto ( enlace )
  6. "Entornos de ejecución de contenedores" . Kubernetes . Archivado del original el 18 de julio de 2019. Consultado el 14 de noviembre de 2021 .
  7. "Soluciones llave en mano en la nube" . Documentación de Kubernetes . Archivado del original el 24 de julio de 2023. Consultado el 25 de julio de 2023 .
  8. "La API de Kubernetes" . Kubernetes . Archivado del original el 30 de marzo de 2025. Consultado el 26 de abril de 2025 .
  9. 1 2 Metz, Cade. "Google publica el código fuente de su arma secreta en la computación en la nube" . Wired . Archivado del original el 10 de septiembre de 2015. Recuperado el 24 de septiembre de 2015 .
  10. Metz, Cade. "Google hizo público su plan secreto para impulsar su nube" . Wired . Archivado del original el 1 de julio de 2016. Consultado el 27 de junio de 2016 .
  11. Burns, Brendan (20 de julio de 2018), La historia de Kubernetes y la comunidad que la respalda , archivado del original el 27 de febrero de 2022.
  12. Kubernetes: El documental [ PARTE 1 ] , 21 de enero de 2022 , consultado el 14 de diciembre de 2023
  13. "kelseyhightower/status/1527333243845873664" . X (anteriormente Twitter) . Archivado del original el 19-05-2022 . Recuperado el 14-12-2023 .
  14. 1 2 Abhishek Verma; Luis Pedrosa; Madhukar R. Korupolu; David Oppenheimer; Eric Tune; John Wilkes (21–24 de abril de 2015). "Gestión de clústeres a gran escala en Google con Borg" . Actas de la Conferencia Europea sobre Sistemas Informáticos (EuroSys) . Archivado del original el 27 de julio de 2017.
  15. "Borg, Omega y Kubernetes - Cola de ACM" . queue.acm.org . Archivado del original el 9 de julio de 2016. Consultado el 27 de junio de 2016 .
  16. "La startup en fase inicial Heptio busca hacer que Kubernetes sea compatible" . Archivado del original el 18 de julio de 2023. Consultado el 6 de diciembre de 2016 .
  17. "Con el lanzamiento de Kubernetes versión 1.0, Google dona tecnología a la recién creada Cloud Native Computing Foundation" . TechCrunch . 21 de julio de 2015. Archivado del original el 23 de septiembre de 2015. Consultado el 24 de septiembre de 2015 .
  18. "Cloud Native Computing Foundation" . Archivado del original el 3 de julio de 2017.
  19. "Red Hat y Google colaboran en Kubernetes para gestionar contenedores Docker a gran escala" . 10 de julio de 2014. Archivado del original el 2 de julio de 2019. Consultado el 6 de agosto de 2022 .
  20. "VMware y Pivotal lanzan Pivotal Container Service (PKS) y colaboran con Google Cloud para llevar Kubernetes a clientes empresariales" . 29 de agosto de 2017. Archivado del original el 6 de octubre de 2022. Consultado el 6 de agosto de 2022 .
  21. Lardinois, Frederic (6 de septiembre de 2017). "Mesosphere añade soporte para Kubernetes a su sistema operativo para centros de datos" . Archivado del original el 6 de septiembre de 2017. Consultado el 6 de agosto de 2022 .
  22. "Docker anuncia mejoras en la plataforma Docker para simplificar y optimizar la gestión de Kubernetes para TI empresarial" . 17 de octubre de 2017. Archivado del original el 26 de septiembre de 2020.
  23. Monroy, Gabe (24 de octubre de 2017). "Presentación de AKS (Kubernetes administrado) y mejoras en Azure Container Registry" . Archivado del original el 7 de febrero de 2018. Consultado el 6 de agosto de 2022 .
  24. "Presentación de Amazon Elastic Container Service para Kubernetes (Vista previa)" . 29/11/2017. Archivado del original el 30/11/2017 . Consultado el 06/08/2022 .
  25. Conway, Sarah (6 de marzo de 2018). "Kubernetes es el primer proyecto de la CNCF en graduarse" . Cloud Native Computing Foundation . Archivado del original el 29 de octubre de 2018. Recuperado el 3 de diciembre de 2018. En comparación con los 1,5 millones de proyectos en GitHub, Kubernetes ocupa el puesto n.° 9 en confirmaciones y el n.° 2 en autores/problemas, solo superado por Linux.
  26. "Política de soporte para versiones y desfase de versiones de Kubernetes" . Kubernetes . Archivado del original el 16 de julio de 2019. Consultado el 3 de marzo de 2020 .
  27. 1 2 "Anuncio de lanzamiento de Kubernetes 1.19 > Aumentar el período de soporte de Kubernetes a un año" . Kubernetes . 26 de agosto de 2020. Archivado del original el 28 de agosto de 2020. Recuperado el 28 de agosto de 2020 .
  28. "Configurar el escalado automático de Kubernetes con métricas personalizadas" . Bitnami . BitRock. 15 de noviembre de 2018. Archivado del original el 27 de marzo de 2019. Consultado el 27 de diciembre de 2018 .
  29. 1 2 3 4 5 6 7 8 "Una introducción a Kubernetes" . DigitalOcean . Archivado del original el 1 de octubre de 2015. Recuperado el 24 de septiembre de 2015 .
  30. "La API de Kubernetes" . Kubernetes . Archivado del original el 30 de marzo de 2025. Consultado el 26 de abril de 2025 .
  31. 1 2 3 "Infraestructura de Kubernetes" . Documentación de la comunidad de OpenShift . OpenShift. Archivado del original el 6 de julio de 2015. Recuperado el 24 de septiembre de 2015 .
  32. 1 2 3 4 5 "Guía de endurecimiento de Kubernetes" (PDF) . Departamento de Defensa de los Estados Unidos . Consultado el 26 de enero de 2024 .
  33. "¿Qué es etcd? | IBM" . www.ibm.com . 1 de octubre de 2021. Consultado el 16 de octubre de 2025 .
  34. 1 2 Marhubi, Kamal (26-09-2015). "Kubernetes desde cero: servidor API" . kamalmarhubi.com. Archivado del original el 29-10-2015 . Recuperado el 02-11-2015 .
  35. Ellingwood, Justin (2 de mayo de 2018). "Una introducción a Kubernetes" . DigitalOcean . Archivado del original el 5 de julio de 2018. Recuperado el 20 de julio de 2018. Uno de los servicios primarios más importantes es un servidor API. Este es el punto de administración principal de todo el clúster, ya que permite a un usuario configurar las cargas de trabajo y las unidades organizativas de Kubernetes. También es responsable de asegurar que el almacén etcd y los detalles del servicio de los contenedores desplegados coincidan. Actúa como puente entre varios componentes para mantener la salud del clúster y difundir información y comandos.
  36. 1 2 "Despliegues" . Kubernetes . Archivado del original el 22/09/2019 . Recuperado el 27/02/2022 .
  37. "Los tres pilares de la orquestación de contenedores de Kubernetes - Rancher Labs" . rancher.com . 18 de mayo de 2017. Archivado del original el 24 de junio de 2017. Consultado el 22 de mayo de 2017 .
  38. "Marco de programación" . Documentación de Kubernetes . Archivado del original el 23 de julio de 2023. Consultado el 24 de julio de 2023 .
  39. 1 2 "Descripción general de un controlador de replicación" . Documentación . CoreOS . Archivado del original el 22/09/2015 . Recuperado el 02/11/2015 .
  40. Sanders, Jake (2 de octubre de 2015). "Kubernetes: Características experimentales fascinantes" . Livewyer . Archivado del original el 20 de octubre de 2015. Consultado el 2 de noviembre de 2015 .
  41. 1 2 "Introducción: Capacitación en Docker y Kubernetes - Día 2" . Red Hat . 2015-10-20. Archivado del original el 2015-10-29 . Recuperado el 2015-11-02 .
  42. Marhubi, Kamal (27 de agosto de 2015). "¿Qué [ ... ] es un Kubelet?" . kamalmarhubi.com. Archivado del original el 13 de noviembre de 2015. Recuperado el 2 de noviembre de 2015 .
  43. "Seguridad de Kubernetes | Problemas y mejores prácticas | Snyk" . snyk.io. 26 de julio de 2020. Consultado el 16 de mayo de 2021 .
  44. 1 2 "Introducción a la interfaz de tiempo de ejecución de contenedores (CRI) en Kubernetes" . Kubernetes . 19 de diciembre de 2016. Archivado del original el 27 de mayo de 2018. Consultado el 16 de mayo de 2021 .
  45. "Interfaz de tiempo de ejecución de contenedores (CRI)" . Documentación de Kubernetes . Archivado del original el 20 de septiembre de 2022. Consultado el 24 de julio de 2023 .
  46. "Kubernetes v1.12: Presentación de RuntimeClass" . kubernetes.io . 10 de octubre de 2018. Archivado del original el 31 de marzo de 2019. Consultado el 14 de noviembre de 2018 .
  47. "Deprecate Dockershim - Kubernetes Github repository - PR 94624" . Github.com . Archivado del original el 1 de diciembre de 2020 . Consultado el 30 de septiembre de 2022 .
  48. "No se asuste: Kubernetes y Docker" . Blog de Kubernetes . 2 de diciembre de 2020. Archivado del original el 3 de diciembre de 2020. Consultado el 22 de diciembre de 2020 .
  49. "kubernetes/community" . GitHub . Archivado del original el 20 de agosto de 2016. Consultado el 16 de mayo de 2021 .
  50. "Actualizado: Preguntas frecuentes sobre la eliminación de Dockershim" . Blog de Kubernetes . 17 de febrero de 2022. Archivado del original el 17 de febrero de 2022. Consultado el 16 de marzo de 2022 .
  51. "Espacios de nombres" . kubernetes.io . Archivado del original el 3 de octubre de 2019. Consultado el 6 de octubre de 2019 .
  52. "Pods" . kubernetes.io . Archivado del original el 8 de mayo de 2019. Consultado el 17 de diciembre de 2018 .
  53. ^ Langemak, Jon (11 de febrero de 2015) . "Kubernetes 101: redes" . Las luces de Blinken . Archivado desde el original el 25 de octubre de 2015 . Consultado el 2 de noviembre de 2015 .
  54. 1 2 "ReplicaSet" . kubernetes.io . Archivado del original el 16-07-2019 . Recuperado el 03-03-2020 .
  55. "StatefulSets" . kubernetes.io .
  56. "DaemonSet" . kubernetes.io . Archivado del original el 4 de noviembre de 2019. Consultado el 16 de noviembre de 2019 .
  57. "Servicio" . kubernetes.io . Archivado del original el 8 de mayo de 2019. Consultado el 21 de noviembre de 2018 .
  58. ^ Langemak, Jon (15 de febrero de 2015). "Kubernetes 101: acceso externo al clúster" . Las luces de Blinken . Archivado desde el original el 26 de octubre de 2015 . Consultado el 2 de noviembre de 2015 .
  59. "Volumes" . kubernetes.io . Archivado del original el 12/10/2019 . Consultado el 06/10/2019 .
  60. "ConfigMaps" . Documentación de Kubernetes . Archivado del original el 23 de julio de 2023. Consultado el 24 de julio de 2023 .
  61. "Secretos" . Kubernetes . Archivado del original el 22/07/2023 . Consultado el 23/07/2023 .
  62. "Container Attached Storage: A primer" . Cloud Native Computing Foundation . 19 de abril de 2018. Archivado del original el 21 de junio de 2021. Consultado el 16 de mayo de 2021 .
  63. "Dataore adquiere MayaData, desarrollador original de OpenEBS" . datacore.com . 18 de noviembre de 2021.
  64. "ENCUESTA CNCF 2019" (PDF) . cncf.io .
  65. "Container Attached Storage: A primer" . Cloud Native Computing Foundation . 2018-04-19 . Consultado el 2020-10-09 .
  66. "Almacenamiento adjunto a contenedores | SNIA" . www.snia.org . Consultado el 9 de octubre de 2020 .
  67. "Lista de verificación de aplicaciones nativas en la nube: Almacenamiento nativo en la nube" . www.replex.io . Consultado el 09/10/2020 .
  68. "Presentación de la interfaz de almacenamiento de contenedores (CSI) Alpha para Kubernetes" . kubernetes.io . 10 de enero de 2018.
  69. "Interfaz de almacenamiento de contenedores (CSI) para Kubernetes GA" . kubernetes.io . 15 de enero de 2019. Archivado del original el 22 de agosto de 2022. Consultado el 22 de agosto de 2022 .
  70. ^ Marinescu, Dan C. (1 de enero de 2018), "Capítulo 8: Hardware y software en la nube" , en Marinescu, Dan C. (ed.), Computación en la nube (segunda edición) , Morgan Kaufmann, págs. 281-319 , doi : 10.1016/b978-0-12-812810-7.00011-x , ISBN  978-0-12-812810-7, consultado el 8 de noviembre de 2023
  71. "Operación de clústeres etcd para Kubernetes" . Documentación de Kubernetes . Archivado del original el 23 de julio de 2023. Consultado el 24 de julio de 2023 .
  72. "Objetos en Kubernetes" . Documentación de Kubernetes . Consultado el 24 de julio de 2023 .
  73. "Convenciones de API" . GitHub . Kubernetes. Archivado del original el 23 de julio de 2023. Consultado el 24 de julio de 2023 .
  74. "Propietarios y dependientes" . Documentación de Kubernetes . Consultado el 24 de julio de 2023 .
  75. "Recolección de basura" . Documentación de Kubernetes . Archivado del original el 23 de julio de 2023. Consultado el 24 de julio de 2023 .
  76. "Recursos personalizados" . Documentación de Kubernetes . Consultado el 24 de julio de 2023 .
  77. "Operadores" . Documentación de Kubernetes . Archivado del original el 14 de enero de 2025. Consultado el 12 de enero de 2025 .
  78. "Cloud Native Landscape" . Cloud Native Computing Foundation . Archivado del original el 23 de julio de 2023. Consultado el 24 de julio de 2023 .
  79. "Controlar el acceso a la API de Kubernetes" . Documentación de Kubernetes . Archivado del original el 23 de julio de 2023. Consultado el 24 de julio de 2023 .
  80. "Eliminar el puerto inseguro del servidor API · Problema n.° 91506 · kubernetes/kubernetes" . GitHub .
  81. "Autorización" . Documentación de Kubernetes . Consultado el 24 de julio de 2023 .
  82. "Organización del acceso al clúster mediante archivos kubeconfig" . Documentación de Kubernetes . Archivado del original el 23 de julio de 2023. Consultado el 24 de julio de 2023 .
  83. "Descripción general de la autorización" . Documentación de Kubernetes . Consultado el 24 de julio de 2023 .
  84. "Herramienta de línea de comandos (kubectl)" . Documentación de Kubernetes . Archivado del original el 23 de julio de 2023. Consultado el 24 de julio de 2023 .
  85. "Bibliotecas de cliente" . Documentación de Kubernetes . Archivado del original el 23 de julio de 2023. Consultado el 24 de julio de 2023 .
  86. "Introducción - El libro de la API de clúster" . cluster-api.sigs.k8s.io .
  87. Anderson, Tim (25 de febrero de 2021). "Google admite que la tecnología de contenedores Kubernetes es tan compleja que ha tenido que lanzar una función de piloto automático para hacerlo todo por ti" . The Register .
  88. "Las 7 distribuciones de Kubernetes más populares" . Archivado del original el 25/07/2021 . Consultado el 28/12/2021 .
  89. MSV, Janakiram. "Por qué el ecosistema de desarrolladores de Kubernetes necesita una plataforma PaaS" . Forbes . Archivado del original el 12 de abril de 2021. Consultado el 16 de mayo de 2021 .
  90. "5 tendencias nativas de la nube a tener en cuenta en 2022" . The New Stack . 3 de enero de 2022. Consultado el 3 de febrero de 2022 .
  91. Kokalitcheva, Kia (8 de diciembre de 2023). "Primicia: Nutanix adquiere los activos de la empresa de servidores en la nube D2iQ" . axios.com . Archivado del original el 14 de diciembre de 2023. Consultado el 8 de agosto de 2025 .
  92. 1 2 "Lanzamientos de parches de Kubernetes" . GitHub . 4 de mayo de 2022. Archivado del original el 16 de diciembre de 2021. Recuperado el 9 de mayo de 2022 .
  93. "Actualizaciones de rendimiento, herramientas mejoradas y una comunidad en crecimiento de Kubernetes 1.1" . kubernetes.io . 9 de noviembre de 2015. Archivado del original el 6 de octubre de 2022. Consultado el 13 de enero de 2024 .
  94. "Kubernetes 1.2: Aún más mejoras de rendimiento, además de una implementación y gestión de aplicaciones más sencillas" . kubernetes.io . 17 de marzo de 2016. Archivado del original el 6 de octubre de 2022. Consultado el 13 de enero de 2024 .
  95. "Kubernetes 1.3: Uniendo cargas de trabajo nativas de la nube y empresariales" . kubernetes.io . 6 de julio de 2016. Archivado del original el 6 de octubre de 2022. Consultado el 13 de enero de 2024 .
  96. "Kubernetes 1.4: Facilitando la ejecución en Kubernetes en cualquier lugar" . kubernetes.io . 26 de septiembre de 2016. Archivado del original el 6 de octubre de 2022. Consultado el 13 de enero de 2024 .
  97. "Kubernetes 1.5: Compatibilidad con cargas de trabajo de producción" . kubernetes.io . 13 de diciembre de 2016. Archivado del original el 6 de octubre de 2022. Consultado el 13 de enero de 2024 .
  98. "Kubernetes 1.6: Multiusuario, múltiples cargas de trabajo a escala" . kubernetes.io . 28 de marzo de 2017. Archivado del original el 6 de octubre de 2022. Consultado el 13 de enero de 2024 .
  99. "Kubernetes 1.7: Refuerzo de la seguridad, actualizaciones de aplicaciones con estado y extensibilidad" . kubernetes.io . 30 de junio de 2017. Archivado del original el 6 de octubre de 2022. Consultado el 13 de enero de 2024 .
  100. "Kubernetes 1.8: Seguridad, cargas de trabajo y profundidad de las características" . kubernetes.io . 29 de septiembre de 2017. Archivado del original el 6 de octubre de 2022. Consultado el 13 de enero de 2024 .
  101. "Kubernetes 1.9: Apps Workloads GA y ecosistema ampliado" . kubernetes.io . 15 de diciembre de 2017. Archivado del original el 6 de octubre de 2022. Consultado el 13 de enero de 2024 .
  102. "Kubernetes 1.10: Estabilizando el almacenamiento, la seguridad y la red" . kubernetes.io . 26 de marzo de 2018. Archivado del original el 6 de octubre de 2022. Consultado el 30 de enero de 2021 .
  103. "Kubernetes 1.11: El balanceo de carga dentro del clúster y el complemento CoreDNS pasan a estar disponibles para el público general" . kubernetes.io . 27 de junio de 2018.
  104. "Kubernetes 1.12: Kubelet TLS Bootstrap y Azure Virtual Machine Scale Sets (VMSS) pasan a estar disponibles de forma general" . kubernetes.io . 27 de septiembre de 2018. Archivado del original el 6 de octubre de 2022. Consultado el 30 de enero de 2021 .
  105. "Kubernetes 1.13: La gestión simplificada de clústeres con Kubeadm, Container Storage Interface (CSI) y CoreDNS como DNS predeterminado ya está disponible de forma general" . kubernetes.io . 3 de diciembre de 2018. Archivado del original el 6 de octubre de 2022. Consultado el 30 de enero de 2021 .
  106. "Kubernetes 1.14: Soporte de nivel de producción para nodos Windows, actualizaciones de Kubectl, disponibilidad general de volúmenes locales persistentes" . kubernetes.io . 25 de marzo de 2019. Archivado del original el 6 de octubre de 2022. Consultado el 30 de enero de 2021 .
  107. "Kubernetes 1.15: Extensibilidad y mejora continua" . kubernetes.io . 19 de junio de 2019. Archivado del original el 6 de octubre de 2022. Consultado el 30 de enero de 2021 .
  108. "Kubernetes 1.16: Recursos personalizados, métricas renovadas y extensiones de volumen" . kubernetes.io . 18 de septiembre de 2019. Archivado del original el 6 de octubre de 2022. Consultado el 30 de enero de 2021 .
  109. "Kubernetes 1.17: Estabilidad" . kubernetes.io . 9 de diciembre de 2019.
  110. "Kubernetes 1.18: Ajuste y acabado" . kubernetes.io . 25 de marzo de 2020. Archivado del original el 13 de enero de 2024. Consultado el 13 de enero de 2024 .
  111. "Anuncio de lanzamiento de Kubernetes 1.19" . Kubernetes . 26 de agosto de 2020. Archivado del original el 28 de agosto de 2020. Consultado el 28 de agosto de 2020 .
  112. "Kubernetes 1.19: Acentuar lo positivo" . Kubernetes . 26 de agosto de 2020. Archivado del original el 28 de agosto de 2020. Consultado el 13 de enero de 2024 .
  113. "Kubernetes 1.20: La versión más genial" . kubernetes.io . 8 de diciembre de 2020. Archivado del original el 9 de diciembre de 2020. Consultado el 9 de diciembre de 2020 .
  114. "Kubernetes 1.21: El poder para la comunidad" . kubernetes.io . 8 de abril de 2021.
  115. "Kubernetes 1.22: Alcanzando nuevas cotas" . kubernetes.io . 4 de agosto de 2021. Archivado del original el 6 de octubre de 2022. Consultado el 7 de septiembre de 2021 .
  116. "Kubernetes 1.23: La próxima frontera" . kubernetes.io . 7 de diciembre de 2021. Archivado del original el 6 de octubre de 2022. Consultado el 16 de enero de 2022 .
  117. "Kubernetes 1.24: Stargazer" . kubernetes.io . 3 de mayo de 2022. Archivado del original el 6 de octubre de 2022. Consultado el 9 de mayo de 2022 .
  118. "Kubernetes v1.25: Combiner" . kubernetes.io . 23 de agosto de 2022. Archivado del original el 6 de octubre de 2022. Consultado el 28 de agosto de 2022 .
  119. "Kubernetes v1.26: Electrizante" . kubernetes.io . 9 de diciembre de 2022.
  120. "Kubernetes v1.27: Ambiente relajado" . kubernetes.io . 11 de abril de 2023.
  121. "Kubernetes v1.28: Planternetes" . kubernetes.io . 15 de agosto de 2023.
  122. "Kubernetes v1.29: Mandala" . kubernetes.io . 13 de diciembre de 2023.
  123. "Kubernetes v1.30: Uwubernetes" . kubernetes.io . 17 de abril de 2024.
  124. «Kubernetes v1.31: Elli» . kubernetes.io . 13 de agosto de 2024.
  125. "Kubernetes v1.32: Penelope" . kubernetes.io . 11 de diciembre de 2024. Archivado del original el 26 de diciembre de 2024. Consultado el 2 de enero de 2025 .
  126. "Kubernetes v1.33: Octarine" . kubernetes.io . 23 de abril de 2025.
  127. "Kubernetes v1.34: Of Wind & Will (O' WaW)" . kubernetes.io . 11 de noviembre de 2025.
  128. "Kubernetes v1.35: Timbernetes (Lanzamiento del Árbol Mundial)" . kubernetes.io . 17 de diciembre de 2025.
  129. "Kubernetes v1.36: ハル (Haru)" . kubernetes.io . 22 de abril de 2026.
  • Sitio web oficialEdita esto en Wikidata
  • Kubernetes en GitHub