166 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			Markdown
		
	
	
	
			
		
		
	
	
			166 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			Markdown
		
	
	
	
---
 | 
						|
reviewers:
 | 
						|
- raelga
 | 
						|
title: ¿Qué es Kubernetes?
 | 
						|
content_type: concept
 | 
						|
weight: 10
 | 
						|
card:
 | 
						|
  name: concepts
 | 
						|
  weight: 10
 | 
						|
---
 | 
						|
 | 
						|
<!-- overview -->
 | 
						|
Esta página ofrece una visión general sobre Kubernetes.
 | 
						|
 | 
						|
 | 
						|
<!-- body -->
 | 
						|
Kubernetes es una plataforma portable y extensible de código abierto para
 | 
						|
administrar cargas de trabajo y servicios. Kubernetes facilita la automatización
 | 
						|
y la configuración declarativa. Tiene un ecosistema grande y en rápido crecimiento.
 | 
						|
El soporte, las herramientas y los servicios para Kubernetes están ampliamente disponibles.
 | 
						|
 | 
						|
Google liberó el proyecto Kubernetes en el año 2014. Kubernetes se basa en [la experiencia de
 | 
						|
Google corriendo aplicaciones en producción a gran escala por década y media](https://research.google.com/pubs/pub43438.html), junto a las mejores ideas y prácticas de la comunidad.
 | 
						|
 | 
						|
## ¿Por qué necesito Kubernetes y qué puede hacer por mi?
 | 
						|
 | 
						|
Kubernetes tiene varias características. Puedes pensar en Kubernetes como:
 | 
						|
 | 
						|
- una plataforma de contenedores
 | 
						|
- una plataforma de microservicios
 | 
						|
- una plataforma portable de nube
 | 
						|
 | 
						|
y mucho más.
 | 
						|
 | 
						|
Kubernetes ofrece un entorno de administración **centrado en contenedores**. Kubernetes
 | 
						|
orquesta la infraestructura de cómputo, redes y almacenamiento para que las cargas de
 | 
						|
trabajo de los usuarios no tengan que hacerlo. Esto ofrece la simplicidad de las Plataformas
 | 
						|
como Servicio (PaaS) con la flexibilidad de la Infraestructura como Servicio (IaaS) y permite
 | 
						|
la portabilidad entre proveedores de infraestructura.
 | 
						|
 | 
						|
## ¿Qué hace de Kubernetes una plataforma?
 | 
						|
 | 
						|
A pesar de que Kubernetes ya ofrece muchas funcionalidades, siempre hay nuevos
 | 
						|
escenarios que se benefician de nuevas características. Los flujos de trabajo
 | 
						|
de las aplicaciones pueden optimizarse para acelerar el tiempo de desarrollo.
 | 
						|
Una solución de orquestación propia puede ser suficiente al principio, pero suele requerir
 | 
						|
una automatización robusta cuando necesita escalar. Es por ello que Kubernetes fue diseñada como
 | 
						|
una plataforma: para poder construir un ecosistema de componentes y herramientas que hacen
 | 
						|
más fácil el desplegar, escalar y administrar aplicaciones.
 | 
						|
 | 
						|
Las etiquetas, o [Labels](/es/docs/concepts/overview/working-with-objects/labels/), le
 | 
						|
permiten a los usuarios organizar sus recursos como deseen. Las anotaciones, o [Annotations](/es/docs/concepts/overview/working-with-objects/annotations/), les permiten asignar información arbitraria a un recurso para
 | 
						|
facilitar sus flujos de trabajo y hacer más fácil a las herramientas administrativas inspeccionar el estado.
 | 
						|
 | 
						|
Además, el [Plano de Control](/docs/concepts/overview/components/) de Kubernetes usa las mismas
 | 
						|
[APIs](/docs/reference/using-api/api-overview/) que usan los desarrolladores y usuarios finales.
 | 
						|
Los usuarios pueden escribir sus propios controladores, como por ejemplo un planificador o [scheduler](https://github.com/kubernetes/community/blob/master/contributors/devel/scheduler.md),
 | 
						|
usando [sus propias
 | 
						|
APIs](/docs/concepts/api-extension/custom-resources/)
 | 
						|
desde una [herramienta de línea de comandos](/docs/user-guide/kubectl-overview/).
 | 
						|
 | 
						|
Este
 | 
						|
[diseño](https://git.k8s.io/design-proposals-archive/architecture/architecture.md)
 | 
						|
ha permitido que otros sistemas sean construidos sobre Kubernetes.
 | 
						|
 | 
						|
## Lo que Kubernetes no es
 | 
						|
 | 
						|
Kubernetes no es una Plataforma como Servicio (PaaS) convencional. Ya que
 | 
						|
Kubernetes opera a nivel del contenedor y no a nivel del hardware, ofrece
 | 
						|
algunas características que las PaaS también ofrecen, como deployments,
 | 
						|
escalado, balanceo de carga, registros y monitoreo. Dicho esto, Kubernetes
 | 
						|
no es monolítico y las soluciones que se ofrecen de forma predeterminada
 | 
						|
son opcionales e intercambiables.
 | 
						|
 | 
						|
Kubernetes ofrece los elementos esenciales para construir una plataforma
 | 
						|
para desarrolladores, preservando la elección del usuario y la flexibilidad
 | 
						|
en las partes más importantes.
 | 
						|
 | 
						|
Entonces, podemos decir que Kubernetes:
 | 
						|
 | 
						|
* No limita el tipo de aplicaciones que soporta. Kubernetes busca dar soporte a un número diverso de cargas de trabajo, que incluyen aplicaciones con y sin estado así como aplicaciones que procesan datos. Si la aplicación puede correr en un contenedor, debería correr bien en Kubernetes.
 | 
						|
* No hace deployment de código fuente ni compila tu aplicación. Los flujos de integración, entrega y deployment continuo (CI/CD) vienen determinados por la cultura y preferencia organizacional y sus requerimientos técnicos.
 | 
						|
* No provee servicios en capa de aplicación como middleware (por ejemplo, buses de mensaje), frameworks de procesamiento de datos (como Spark), bases de datos (como MySQL), caches o sistemas de almacenamiento (como Ceph). Es posible correr estas aplicaciones en Kubernetes, o acceder a ellos desde una aplicación usando un mecanismo portable como el Open Service Broker.
 | 
						|
* No dictamina las soluciones de registros, monitoreo o alerta que se deben usar. Hay algunas integraciones que se ofrecen como prueba de concepto, y existen mecanismos para recolectar y exportar métricas.
 | 
						|
* No provee ni obliga a usar un sistema o lenguaje de configuración (como [jsonnet](https://github.com/google/jsonnet)) sino que ofrece una API declarativa que puede ser usada con cualquier forma de especificación declarativa
 | 
						|
* No provee ni adopta un sistema exhaustivo de mantenimiento, administración o corrección automática de errores
 | 
						|
 | 
						|
Además, Kubernetes no es un mero *sistema de orquestación*. De hecho, Kubernetes elimina la necesidad de orquestar. *Orquestación* se define como la ejecución de un flujo de trabajo definido: haz A, luego B y entonces C. Kubernetes está compuesto de un conjunto de procesos de control independientes y combinables entre si que llevan el estado actual hacia el estado deseado. No debería importar demasiado como llegar de A a C. No se requiere control centralizado y, como resultado, el sistema es más fácil de usar, más poderoso, robusto, resiliente y extensible.
 | 
						|
 | 
						|
## ¿Por qué usar contenedores?
 | 
						|
 | 
						|
¿Te preguntas las razones para usar contenedores?
 | 
						|
 | 
						|

 | 
						|
 | 
						|
La *Manera Antigua* de desplegar aplicaciones era instalarlas en un
 | 
						|
servidor usando el administrador de paquetes del sistema operativo.
 | 
						|
La desventaja era que los ejecutables, la configuración, las librerías
 | 
						|
y el ciclo de vida de todos estos componentes se entretejían unos a
 | 
						|
otros. Podíamos construir imágenes de máquina virtual inmutables para
 | 
						|
tener rollouts y rollbacks predecibles, pero las máquinas virtuales
 | 
						|
son pesadas y poco portables.
 | 
						|
 | 
						|
La *Manera Nueva* es desplegar contenedores basados en virtualización
 | 
						|
a nivel del sistema operativo, en vez del hardware. Estos contenedores
 | 
						|
están aislados entre ellos y con el servidor anfitrión: tienen sus propios
 | 
						|
sistemas de archivos, no ven los procesos de los demás y el uso de recursos
 | 
						|
puede ser limitado. Son más fáciles de construir que una máquina virtual, y
 | 
						|
porque no están acoplados a la infraestructura y sistema de archivos del
 | 
						|
anfitrión, pueden llevarse entre nubes y distribuciones de sistema operativo.
 | 
						|
 | 
						|
Ya que los contenedores son pequeños y rápidos, una aplicación puede ser
 | 
						|
empaquetada en una imagen de contenedor. Esta relación uno a uno entre
 | 
						|
aplicación e imagen nos abre un abanico de beneficios para usar contenedores.
 | 
						|
Con contenedores, podemos crear imágenes inmutables al momento de la compilación
 | 
						|
en vez del despliegue ya que las aplicaciones no necesitan componerse junto al
 | 
						|
resto del _stack_ ni atarse al entorno de infraestructura de producción. Generar
 | 
						|
una imagen de contenedor al momento de la compilación permite tener un entorno
 | 
						|
consistente que va desde desarrollo hasta producción. De igual forma, los contenedores
 | 
						|
son más transparentes que las máquinas virtuales y eso hace que el monitoreo y la
 | 
						|
administración sean más fáciles. Esto se aprecia más cuando los ciclos de vida de
 | 
						|
los contenedores son administrados por la infraestructura en vez de un proceso supervisor
 | 
						|
escondido en el contenedor. Por último, ya que solo hay una aplicación por contenedor,
 | 
						|
administrar el despliegue de la aplicación se reduce a administrar el contenedor.
 | 
						|
 | 
						|
En resumen, los beneficios de usar contenedores incluyen:
 | 
						|
 | 
						|
* **Ágil creación y despliegue de aplicaciones**:
 | 
						|
    Mayor facilidad y eficiencia al crear imágenes de contenedor en vez de máquinas virtuales
 | 
						|
* **Desarrollo, integración y despliegue continuo**:
 | 
						|
    Permite que la imagen de contenedor se construya y despliegue de forma frecuente y confiable,
 | 
						|
    facilitando los rollbacks pues la imagen es inmutable
 | 
						|
* **Separación de tareas entre Dev y Ops**:
 | 
						|
    Puedes crear imágenes de contenedor al momento de compilar y no al desplegar, desacoplando la
 | 
						|
    aplicación de la infraestructura
 | 
						|
* **Observabilidad**
 | 
						|
    No solamente se presenta la información y métricas del sistema operativo, sino la salud de la
 | 
						|
    aplicación y otras señales
 | 
						|
* **Consistencia entre los entornos de desarrollo, pruebas y producción**:
 | 
						|
    La aplicación funciona igual en un laptop y en la nube
 | 
						|
* **Portabilidad entre nubes y distribuciones**:
 | 
						|
    Funciona en Ubuntu, RHEL, CoreOS, tu datacenter físico, Google Kubernetes Engine y todo lo demás
 | 
						|
* **Administración centrada en la aplicación**:
 | 
						|
    Eleva el nivel de abstracción del sistema operativo y el hardware virtualizado a la aplicación que funciona en un sistema con recursos lógicos
 | 
						|
* **[Microservicios](https://martinfowler.com/articles/microservices.html)** distribuidos, elásticos, liberados y débilmente acoplados:
 | 
						|
    Las aplicaciones se separan en piezas pequeñas e independientes que pueden ser desplegadas y administradas de forma dinámica, y no como una aplicación monolítica que opera en una sola máquina de gran capacidad
 | 
						|
* **Aislamiento de recursos**:
 | 
						|
    Hace el rendimiento de la aplicación más predecible
 | 
						|
* **Utilización de recursos**:
 | 
						|
    Permite mayor eficiencia y densidad
 | 
						|
 | 
						|
## ¿Qué significa Kubernetes? ¿Qué significa K8S?
 | 
						|
 | 
						|
El nombre **Kubernetes** proviene del griego y significa *timonel* o *piloto*. Es la raíz de *gobernador* y de [cibernética](http://www.etymonline.com/index.php?term=cybernetics). *K8s*
 | 
						|
es una abrevación que se obtiene al reemplazar las ocho letras "ubernete" con el número 8.
 | 
						|
 | 
						|
 | 
						|
 | 
						|
## {{% heading "whatsnext" %}}
 | 
						|
 | 
						|
*   ¿Estás listo para [empezar](/docs/setup/)?
 | 
						|
*   Para saber más, visita el resto de la [documentación de Kubernetes](/docs/home/).
 | 
						|
 | 
						|
 | 
						|
 |