La Red de Conocimientos Pedagógicos - Currículum vitae - ¿Qué es Kubernetes?

¿Qué es Kubernetes?

¿Qué es Kubernetes?

En primer lugar, se trata de una nueva solución líder para arquitectura distribuida basada en tecnología de contenedores. Aunque esta solución es todavía muy nueva, es un resultado importante de los más de diez años de acumulación y sublimación de experiencia de Google en la aplicación a gran escala de la tecnología de contenedores. Para ser precisos, Kubernetes es la versión de código abierto de Borg, el arma secreta de Google que se ha mantenido estrictamente confidencial durante más de diez años. Borg es un conocido sistema de gestión de clústeres a gran escala utilizado internamente por Google. Se basa en tecnología de contenedores y tiene como objetivo automatizar la gestión de recursos y maximizar la utilización de recursos en múltiples centros de datos. Durante más de diez años, Google ha gestionado una gran cantidad de grupos de aplicaciones a través del sistema Borg. Dado que los empleados de Google firmaron acuerdos de confidencialidad y no pueden revelar el diseño interno de Borg incluso si se van, el mundo exterior no ha podido saber más. No fue hasta 2065438+abril de 2005 que Google publicó por primera vez el artículo de Borg, del que se rumoreaba desde hace mucho tiempo, bajo la publicidad de alto perfil de Kubernetes, y todos pudieron aprender más sobre él. Precisamente porque nos apoyamos en los hombros de Borg y aprendimos de sus diez años de experiencia y lecciones, Kubernetes se convirtió en un éxito instantáneo y rápidamente dominó el campo de los contenedores. En segundo lugar, si el diseño de nuestro sistema sigue las ideas de diseño de Kubernetes, el código subyacente o los módulos funcionales de la arquitectura del sistema tradicional que tienen poco que ver con el negocio pueden desaparecer inmediatamente de nuestra vista. No tenemos que preocuparnos por la selección, implementación e implementación de balanceadores de carga, no tenemos que introducir o desarrollar marcos de gobierno de servicios complejos nosotros mismos y no tenemos que preocuparnos por el desarrollo de monitoreo de servicios y manejo de fallas. módulos. En definitiva, con las soluciones que nos proporciona Kubernetes, no sólo podemos ahorrar nada menos que un 30% de los costes de desarrollo, sino también centrarnos más en el propio negocio. Y gracias al poderoso mecanismo de automatización proporcionado por Kubernetes, la dificultad y el costo de operación y mantenimiento posteriores del sistema se reducen considerablemente.

Entonces, Kubernetes es una plataforma de desarrollo abierta. A diferencia de J2EE, no está limitado a ningún lenguaje y no tiene interfaz de programación, por lo que cualquier servicio escrito en Java, Go, C++ o Python puede asignarse a un servicio de Kubernetes e interactuar a través del protocolo de comunicación TCP estándar. Además, la plataforma Kubernetes no interfiere con los lenguajes de programación, los marcos de programación ni el middleware existentes, por lo que los sistemas existentes se pueden actualizar y migrar fácilmente a la plataforma Kubernetes.

Finalmente, Kubernetes es una plataforma completa de soporte de sistemas distribuidos. Kubernetes tiene capacidades completas de administración de clústeres, que incluyen mecanismos de acceso y protección de seguridad de múltiples niveles, capacidades de soporte de aplicaciones multiinquilino, mecanismos transparentes de registro y descubrimiento de servicios, balanceadores de carga inteligentes integrados, potentes capacidades de descubrimiento de fallas y autorreparación, y desarrollo continuo. actualizaciones de servicios y capacidades de expansión en línea, mecanismo de programación automática de recursos escalable, capacidades de gestión de cuotas de recursos de granularidad múltiple. Al mismo tiempo, Kubernetes proporciona herramientas de gestión integrales que cubren todos los aspectos, incluido el desarrollo, las pruebas de implementación y el monitoreo de operación y mantenimiento. Por lo tanto, Kubernetes es una nueva solución de arquitectura distribuida basada en tecnología de contenedores y una plataforma integral y completa de soporte y desarrollo de sistemas distribuidos.

Antes de comenzar el viaje de Hello World en este capítulo, primero debemos adquirir algunos conocimientos básicos de Kubernetes para comprender las soluciones que proporciona Kubernetes.

En Kubernetes, los servicios son el núcleo de la arquitectura del clúster distribuido y los objetos de servicio tienen las siguientes características clave.

Tener un nombre único (como mysql-server).

Contar con IP virtual (IP de cluster, IP de servicio o VIP) y número de puerto.

Capacidad de proporcionar algún tipo de servicio remoto.

Asignado a un conjunto de aplicaciones contenedoras que proporcionan esta funcionalidad de servicio.

El proceso de servicio actual del Servicio se basa en la comunicación de Socket para proporcionar servicios externos, como Redis, Memcache, MySQL,

servidor web o un proceso de servidor TCP específico que implementa un proceso específico. negocio.

Aunque un servicio generalmente es proporcionado por múltiples procesos de servicio relacionados, y cada proceso de servicio tiene un punto final independiente (IP + puerto), Kubernetes nos permite conectarnos a un servicio específico a través del servicio (clúster virtual IP + puerto de servicio). Con el mecanismo integrado de recuperación de fallas y equilibrio de carga transparente de Kubernetes, no importa cuántos procesos de servicio haya en el backend o si un proceso de servicio se vuelve a implementar en otras máquinas debido a una falla, no afectará la invocación normal del servicio. Es más, una vez creado el servicio en sí, no cambiará, lo que significa que ya no tendremos que preocuparnos por los cambios en la dirección IP del servicio en el clúster de Kubernetes.

Los contenedores proporcionan poderosas capacidades de aislamiento, por lo que es necesario aislar este conjunto de procesos que brindan servicios en el contenedor. Por lo tanto, Kubernetes diseñó un objeto Pod para empaquetar cada proceso de servicio en un Pod correspondiente, convirtiéndolo en un contenedor que se ejecuta en el Pod. Para establecer la relación entre los servicios y los Pods, Kubernetes primero etiqueta cada Pod, marcando el Pod que ejecuta MySQL con nombre=mysql, marcando el Pod que ejecuta PHP con nombre=php y luego define un selector de etiquetas para el servicio correspondiente. Por ejemplo, la condición de selección del selector de etiquetas del servicio MySQL es nombre = mysql, lo que significa que el servicio debe actuar en todos los pods que contienen la etiqueta nombre = mysql. Esto resuelve inteligentemente el problema de asociación entre servicios y Pods.

La siguiente es una breve introducción al concepto de Pod. Primero, los Pods se ejecutan en un entorno llamado nodo. Un nodo puede ser una máquina física o una máquina virtual en una nube privada o pública. Generalmente hay cientos de Pods ejecutándose en un nodo. En segundo lugar, cada Pod ejecuta un contenedor especial llamado Pausa, y otros contenedores son contenedores comerciales. Estos contenedores comerciales * * * comparten la pila de red del contenedor pausado y los volúmenes de montaje de volumen, por lo que la comunicación y el intercambio de datos entre ellos son más eficientes. Podemos aprovechar al máximo esta función y colocar un grupo de procesos de servicio estrechamente relacionados en el mismo Pod durante el diseño. Finalmente, cabe señalar que no todos los Pod y contenedores que se ejecutan dentro de él pueden asignarse a un servicio, solo el conjunto de Pods que brindan el servicio (ya sean internos o externos) se asignarán a un servicio.

En la gestión del clúster, Kubernetes divide las máquinas del clúster en un nodo maestro y algunos nodos. En el servidor maestro se ejecuta un conjunto de procesos relacionados con la gestión del clúster, kube-apiserver, kube-controller-manager y kube-scheduler. Estos procesos implementan las funciones de gestión de todo el clúster, como gestión de recursos, programación de pods, expansión flexible, control de seguridad, monitoreo del sistema y corrección de errores, etc., y todos se completan automáticamente. Como nodo de trabajo en el clúster, Node ejecuta aplicaciones reales. La unidad en ejecución más pequeña administrada por Kubernetes en Node es Pod. Los nodos ejecutan los procesos de servicio kubelet y kube-proxy de Kubernetes, que son responsables de crear, iniciar, monitorear, reiniciar y destruir Pods e implementar un equilibrador de carga en modo software.

Finalmente, veamos los dos problemas principales de la expansión y la actualización del servicio en los sistemas de TI tradicionales, así como las nuevas soluciones proporcionadas por Kubernetes. La expansión de los servicios implica la asignación de recursos (seleccionar qué nodo expandir), la implementación de instancias y el inicio. En sistemas comerciales complejos, estos dos problemas se resuelven básicamente mediante operaciones manuales paso a paso, lo que requiere mucho tiempo y mano de obra, y es difícil garantizar la calidad de la implementación.

En un clúster de Kubernetes, solo necesita crear un RC (controlador de replicación) para el Pod asociado con el servicio que necesita expandirse, y se resolverán problemas problemáticos como la expansión y actualización del servicio. Los siguientes tres datos clave se incluyen en el archivo de definición de RC.

Definición de Pod objetivo.

El número de copias que el Pod de destino necesita para ejecutar.

La etiqueta del Pod de destino que se va a monitorear.

Después de crear el RC (el sistema creará automáticamente el Pod), Kubernetes monitoreará el estado y la cantidad de instancias de LabelPod definidas en el RC en tiempo real.

Si la cantidad de instancias es menor que la cantidad definida de réplicas, se creará un nuevo Pod basado en la plantilla de Pod definida en RC, y luego el Pod se asignará al nodo apropiado para comenzar a ejecutarse hasta que alcance la cantidad de instancias de Pod. el objetivo predeterminado. Este proceso está completamente automatizado y no requiere intervención humana. Con RC, la ampliación del servicio se convierte en un puro y simple juego digital. Sólo necesitas modificar el número de copias en RC. Las actualizaciones de servicio posteriores también se completarán automáticamente modificando RC.