¿Qué es Kubernetes (K8s)? Un tutorial básico de Kubernetes

¿Qué es Kubernetes (K8s)? Un tutorial básico de Kubernetes

  • ITOps y DevOps
6 min de lectura Actualizado May 6, 2020

Puntos clave: Kubernetes (K8s) es una plataforma de código abierto que automatiza la gestión de aplicaciones contenedorizadas, mejorando su despliegue y escalabilidad. Este tutorial cubre su arquitectura, componentes clave e instalación usando Minikube.

  • Kubernetes orquesta cargas de trabajo de computación, redes y almacenamiento.
  • Ofrece despliegues automatizados, escalado y capacidades de autorreparación para aplicaciones.

En esta entrada, vamos a explicar Kubernetes, también conocido como K8s. En esta introducción, trataremos:

  • Qué es Kubernetes
  • Lo que no puede hacer
  • Los problemas que resuelve
  • Componentes arquitectónicos K8s
  • Instalación
  • Opciones alternativas

Este artículo asume te son nuevo en Kubernetes y quiere Obtén una comprensión sólida de sus conceptos y bloques de construcción.

¿Qué es Kubernetes?

Para empezar a entender la utilidad de Kubernetes, primero debemos comprender dos conceptos: infraestructura inmutable y contenedores.

  • La infraestructura inmutable están una práctica en la que los servidores, una vez desplegados, nunca son modificados. Si hay que cambiar algo, te nunca hacerlo directamente en el servidor. En su lugar, te construirá un nuevo servidor a partir de una imagen base, que incluirá todos los cambios necesarios integrados. De esta manera podemos simplemente reemplazar el servidor antiguo por el nuevo sin ninguna modificación adicional.
  • Los contenedores ofrecen una forma de empaquetar código, tiempo de ejecución, herramientas del sistema, bibliotecas del sistema y configuraciones en conjunto. Este envío están un ejecutable ligero e independiente. De este modo, tu aplicación se comportará igual siempre sin importar dónde se ejecute (por ejemplo, Ubuntu, Windows, etc.). La contenedorización no están un concepto nuevo, pero ha ganado una enorme popularidad con el auge de los microservicios y Docker.

Armados con esos conceptos, ahora podemos Define Kubernetes como una plataforma contenedor o microservicio que orquesta cargas de trabajo de infraestructura informática, de redes y almacenamiento. Como no limita los tipos de aplicaciones te pueden desplegar (cualquier lenguaje funciona), Kubernetes amplía la forma en que escalamos aplicaciones contenedorizadas para que podamos disfrutar de todos los beneficios de una infraestructura verdaderamente inmutable. La regla general para K8S: si tu aplicación cabe en un contenedor, Kubernetes la desplegará. Por cierto, si te preguntas de dónde viene el nombre "Kubernetes", están una palabra griega que significa timonel o piloto. La abreviatura K8s se está derivando sustituyendo las ocho letras de "ubernete" por el dígito 8. El Proyecto Kubernetes fue abierto por Google en 2014 tras usarlo para ejecutar cargas de trabajo de producción a gran escala durante más de una década. Kubernetes ofrece la capacidad de ejecutar aplicaciones de escalado dinámico, contenedorizadas y utilizar una API para la gestión. Kubernetes están una herramienta de gestión de contenedores independiente del fabricante, que minimiza los costes de computación en la nube mientras simplifica el funcionamiento de aplicaciones resilientes y escalables. Kubernetes se ha convertido en el estándar para ejecutar aplicaciones contenecidas en la nube, con los principales proveedores de la nube (AWS, Azure, GCE, IBM y Oracle) ofreciendo ahora servicios gestionados de Kubernetes.

Términos básicos y definiciones de Kubernetes

Para empezar a entender cómo utilizar K8S, debemos comprender los objetos de la API. Los objetos básicos de K8S y varias abstracciones de nivel superior son conocidos como controladores. Estos son el bloque básico del ciclo de vida de tu aplicación. Los objetos básicos incluyen:

  • Cápsula. Un grupo de uno o más contenedores.
  • Service. Una abstracción que define un conjunto lógico de pods así como la política para acceder a ellos.
  • Volumen. Una abstracción que nos permite persistir datos. (Esto es necesario porque los contenedores son efímeros, es decir, los datos se están eliminados cuando el contenedor están eliminados.)
  • Espacio de nombres. Un segmento del clúster dedicado a un propósito concreto, por ejemplo, un proyecto o equipo de desarrolladores.

Los controladores, o abstracciones de nivel superior, incluyen:

  • ReplicaSet (RS). Asegura que la cantidad deseada de pod están en ejecución.
  • Despliegue. Ofrece actualizaciones declarativas para pods y RS.
  • StatefulSet. Un objeto API de carga de trabajo que gestiona aplicaciones con estado, como bases de datos.
  • DaemonSet. Asegura que todos o algunos nodos de trabajo ejecuten una copia de un pod. Esto es útil para aplicaciones de daemons como Fluentd.
  • Trabajo. Crea uno o más pods, ejecuta una tarea concreta hasta completarlo y luego elimina el/los pod(s).

Micro Servicio

Una parte específica de una aplicación previamente monolítica. Una arquitectura tradicional basada en microservicios tendría múltiples servicios que componen uno o más productos finales. Los microservicios suelen son compartidos entre aplicaciones y facilitan la gestión de la Integración Continua y la Entrega Continua. Explora la diferencia entre arquitectura monolítica y arquitectura de microservicios.

Imágenes

Normalmente una imagen contenedor docker: una imagen ejecutable que contiene todo lo que te necesita para ejecutar tu aplicación; código de aplicación, librerías, un tiempo de ejecución, variables de entorno y archivos de configuración. En tiempo de ejecución, una imagen contenedor se convierte en un contenedor que ejecuta todo lo que están empaquetado en esa imagen.

Cápsulas

Un solo o grupo de contenedores que comparten almacenamiento y red con una configuración de Kubernetes, indicando a esos contenedores cómo comportarse. Los pods comparten espacio de direcciones IP y puertos y pueden comunicarse entre sí a través de redes localhost. A cada pod se está asignada una dirección IP desde la que pueden acceder otros pods dentro de un clúster. Las aplicaciones dentro de un pod tienen acceso a volúmenes compartidos, lo cual es útil cuando te necesitas que los datos persistan más allá de la vida útil de un pod. Conoce más sobre los pods de Kubernetes.

Espacios de nombres

Los espacios de nombres son una forma de Crea múltiples clústeres virtuales de Kubernetes dentro de un solo clúster. Los espacios de nombres se son usados normalmente para despliegues a gran escala donde son muchos usuarios, equipos y proyectos.

Juego de réplica

Un conjunto de réplicas de Kubernetes asegura que el número especificado de pods en un conjunto de réplicas son ejecutándose en todo momento. Si un pod falla o se bloquea, la configuración del conjunto de réplicas asegurará que se están cree uno nuevo en su lugar. te normalmente utiliza un Despliegue para gestiona esto en lugar de un Conjunto de Réplica. conoce más sobre Kubernetes ReplicaSets.

Despliegues

Una forma de Define el estado deseado de los pods o de un conjunto de réplicas. Los despliegues se son utilizados para Define políticas de HA para tus contenedores definiendo políticas sobre cuántos de cada contenedor deben estar ejecutándose en un momento dado.

Servicios

Acoplamiento de un conjunto de pods a una política mediante la cual acceder a ellos. Los servicios se son utilizados para exponer aplicaciones contenedorizadas a orígenes externos al clúster. Conoce más sobre los servicios de Kubernetes.

Nodos

Un host(s) virtual(es) (normalmente) en el que son ejecutados contenedores/pods.

Arquitectura y componentes de Kubernetes

Un clúster K8S está formado por un nodo maestro, que expone la API, programa despliegues y, en general, gestiona el clúster. Múltiples nodos worker pueden ser responsables del tiempo de ejecución del contenedor, como Docker o rkt, junto con un agente que se comunica con el maestro.

Componentes maestros

Estos componentes maestros comprenden un nodo maestro:

  • Kube-apiserver. Expone la API.
  • Etc. Valor clave almacena todos los datos del clúster. (Puede ejecutarse en el mismo servidor que un nodo maestro o en un clúster dedicado.)
  • Kube-planificador. Programa nuevos pods en nodos de trabajo.
  • Kube-controlador-gestor. Ejecuta los controladores.
  • Gestor de controladores en la nube. Habla con proveedores de la nube.

Componentes nodos

  • Kubelet. Agente que asegura que los contenedores en una cápsula son funcionando.
  • Kube-proxy. Mantiene las reglas de red y realiza el reenvío.
  • Tiempo de ejecución del contenedor. Ejecuta contenedores.

¿Qué beneficios ofrece Kubernetes?

De fábrica, K8S ofrece varias características clave que nos permiten ejecutar infraestructuras inmutables. Los contenedores pueden ser desactivados, reemplazados y autocurados automáticamente, y el nuevo contenedor obtiene acceso a esos volúmenes de soporte , secretos, configuraciones, etc., que lo Haz funcionar. Estas características clave de K8S Haz que tu aplicación contenedora escale de forma eficiente:

  • Escalado horizontal. Escala tu aplicación según necesites desde la línea de comandos o la interfaz.
  • Despliegues y reversiones automatizadas. Despliega cambios que supervisen la salud de tu aplicación, asegurando que todas las instancias no fallen ni caigan simultáneamente. Si algo falla, K8S reverte automáticamente el cambio.
  • Descubrimiento de servicios y balanceo de carga. Los contenedores Obtén su propia IP para te pueden poner un conjunto de contenedores detrás de un único nombre DNS para el balanceo de carga.
  • Orquestación de almacenamiento. Montar automáticamente la nube local, pública o un almacenamiento en red.
  • Gestión de secretos y configuración. Crea y actualiza secretos y configuraciones sin reconstruir tu imagen.
  • Auto-reparación. La plataforma soluciona muchos problemas: reiniciar contenedores fallidos, reemplazar y reclasificar contenedores a medida que los nodos mueren, eliminar contenedores que no responden a tu chequeo de salud definido por el usuario y esperar a anunciar contenedores a los clientes hasta que estén listos.
  • Ejecución por lotes. Gestiona tus cargas de trabajo por lotes e integración continua y reemplaza contenedores fallidos.
  • Empaquetado automático de contenidos. Programa automáticamente los contenedores en función de los requisitos de recursos y otras restricciones.

¿Qué no hará Kubernetes?

Kubernetes puede hacer muchas cosas interesantes y útiles. Pero es igual de importante considerar lo que Kubernetes no es capaz de hacer:

  • No reemplaza herramientas como Jenkins, por lo que no construirá tu aplicación por ti.
  • No están middleware, por lo que no realizará tareas que realiza un middleware, como el bus de mensajes o la caché, por nombrar algunas.
  • No le importa qué solución de registro están uses. Haz que tu app registre en stdout y luego te recoger los registros con lo que te quieras.
  • No le importa tu lenguaje de configuración (por ejemplo, JSON).

K8s no está muy opinativo con estas cosas simplemente para permitirnos construir nuestra app como queramos, exponer cualquier tipo de información y recopilarla como queramos.

Competidores de Kubernetes

Por supuesto, Kubernetes no es la única herramienta en el mercado. Son variedades, entre ellas:

  • Docker Compose—bueno para montaje, pero no listo para producción.
  • Nomad—permite la gestión y planificación de clústeres, pero no resuelve las necesidades de gestión de secretos y configuraciones, detección de servicios y monitorización.
  • Titus—La plataforma de orquestación de código abierto de Netflix no tiene suficientes personas usándola en producción.

En general, Kubernetes ofrece las mejores funciones listas para usar, junto con innumerables complementos de terceros para extiende fácilmente su funcionalidad.

Empezando con Kubernetes

Normalmente, te instala Kubernetes en hardware local o en uno de los principales proveedores de nube. Muchos proveedores de nube y terceros ahora son ofrecer servicios Kubernetes gestionados, sin embargo, para una experiencia de pruebas/aprendizaje esto están costoso y no necesario. La forma más fácil y rápida de Obtén comenzó con Kubernetes en un entorno aislado de desarrollo/prueba están minikube.

Cómo instalar Kubernetes

Instalar K8S localmente está sencillo y directo. Necesitas dos cosas para Obtén funcionando: Kubectl y Minikube.

  • Kubectl está una herramienta de CLI que permite interactuar con el clúster.
  • Minikube es un binario que despliega un clúster localmente en tu máquina de desarrollo.

Con estos, te puedes Comienza desplegar tus aplicaciones contenedorizadas en un clúster localmente en solo unos minutos. Para un clúster de calidad de producción que están muy disponible, te puede utiliza herramientas como:

  • Kops
  • EKS, que es un servicio gestionado por AWS
  • GKE, proporcionado por Google

Minikube permite te ejecutar un clúster de un solo nodo dentro de una Máquina Virtual (normalmente ejecutándose dentro de VirtaulBox). Sigue la documentación oficial de Kubernetes para instala minikube en tu máquina. https://kubernetes.io/docs/setup/minikube/. Con minikube instalado te son ahora listo para ejecutar un clúster virtualizado de un solo nodo en tu máquina local. te puedes Comienza tu clúster de minikube con:

    $ minikube start

La interacción con clústeres Kubernetes están realiza principalmente a través de la CLI kubectl o el Panel de Kubernetes. La CLI kubectl también soporta autocompletación bash, lo que ahorra mucho tipo (y memoria). instala la CLI kubectl en tu máquina usando las instrucciones oficiales de instalación https://kubernetes.io/docs/tasks/tools/install-kubectl/. Para interactuar con tus clústeres Kubernetes te necesitarás establecer el contexto de tu CLI kubectl. Un contexto Kubernetes están un grupo de parámetros de acceso que define a qué usuarios tienen acceso a los espacios de nombres dentro de un clúster. Al iniciar minikube, el contexto está automáticamente cambiado a minikube por defecto. Son varios comandos de CLI de kubectl usados para Define contra qué clúster Kubernetes se ejecutan los comandos.

    $ kubectl config get-context
$ kubectl config set-context
    $ Kubectl config delete-context

Despliegue de tu primera aplicación contenedorizada en Minikube

Hasta ahora te debería tener un clúster Kubernetes local de un solo nodo ejecutándose en tu máquina local. El resto de este tutorial están detallar los pasos necesarios para desplegar una aplicación contenedora sencilla de Hello World, dentro de un pod, con un punto final expuesto en la dirección IP del nodo minikube. Crea el despliegue de Kubernetes con:

    $ kubectl run hello-minikube --image=k8s.gcr.io/
    echoserver:1.4 --port=8080

Podemos Ve que nuestro despliegue fue exitoso, así que podemos verlo con:

    $ kubectl get deployments

Nuestro despliegue debería haber creado un Pod Kubernetes. Podemos ver los pods ejecutándose en nuestro clúster con;

    $ kubectl get pods

Antes de poder acceder a nuestra aplicación Hello World con una solicitud HTTP desde un origen externo a nuestro clúster (es decir, nuestra máquina de desarrollo), necesitamos exponer el pod como un servicio Kubernetes. Por defecto, los pods solo son accesibles desde su dirección IP interna, que no tiene acceso desde fuera del clúster.

    $ kubectl expose deployment hello-minikube --
    type=NodePort

Exponer un despliegue crea un servicio Kubernetes. Podemos ver el servicio con:

    $ kubectl get services

Al usar un proveedor en la nube, normalmente te configurarías —type=balanceador de carga para asignar el servicio con una dirección IP privada o pública fuera del rango ClusterIP. Minikube no soporta balanceadores de carga, al ser un entorno local de desarrollo/prueba, y por tanto —type=NodePort usa la IP del host de Minikube para el punto final del servicio. Para averiguar la URL utilizada para acceder a tu tipo de aplicación contenedorizada;

    $ minikube service hello-minikube -—url

Ajusta la respuesta de tu terminal para comprobar que nuestro servicio expuesto está llegando a nuestro pod.

    $ curl http://:

Ahora que hemos hecho una petición HTTP a nuestro pod a través del servicio Kubernetes, podemos confirmar que todo está funcionando como se esperaba. Revisando los registros del pod deberíamos Ve nuestra solicitud HTTP.

    $ kubectl logs hello-minikube-c8b6b4fdc-sz67z

Para concluir, ahora son ejecutamos una aplicación contenedora sencilla dentro de un clúster Kubernetes de un solo nodo, con un punto final expuesto a través de un servicio Kubernetes.

Minikube para aprender

Minikube están ideal para familiarizarse con Kubernetes y aprender los conceptos de orquestación de contenedores a gran escala, pero no te querrías ejecutar tus cargas de trabajo de producción desde tu máquina local. Siguiendo lo anterior, te ahora deberías tener un pod de Kubernetes funcional, servicio y despliegue ejecutando una aplicación sencilla de Hello World. A partir de aquí, si te son buscas Comienza usar Kubernetes para tus aplicaciones contenedorizadas, te estaría mejor posicionado para construir un clúster Kubernetes o comparar las muchas ofertas de Kubernetes gestionado de los proveedores de nube populares.

Recursos adicionales

Para más información sobre Kubernetes, explora estos recursos:

Estas publicaciones son mías y no representan necesariamente la posición, estrategias u opinión de BMC.

Más de ITOps y DevOps

¿Te interesa saber más de BMC?

El Brief están nuestro correo mensual sobre el mainframe y la orquestación empresarial: investigación, historias de clientes, noticias de productos, eventos.

Al registrarse para esta oferta te son confirmar que te leído y aceptado la Política de Privacidad de BMC.

Tú te has suscrito a The Brief

El Brief abarca la orquestación de mainframe y empresa—BMC AMI y Control-M—y la investigación de analistas, despliegues de clientes y eventos en ambas áreas.