Vm - > Docker - > K8s

Prólogo
En el proceso de desarrollo de software real, necesitamos muchos entornos: como entorno de desarrollo, entorno de prueba, entorno sandbox, entorno de automatización, entorno de prelanzamiento, entorno de producción ... ¿cómo mantener tantos entornos? ¿Se implementa una aplicación en una máquina o se implementan varias aplicaciones en una máquina? ¿Cómo aislar múltiples aplicaciones antes? En este momento, es necesario utilizar la tecnología de virtualización.

VM (Máquina virtual) La
llamada máquina virtual (Máquina virtual) se refiere a un sistema informático completo con funciones completas del sistema de hardware que se simula mediante software y se ejecuta en un entorno completamente aislado. Esto suena un poco complicado. De hecho, a través del aislamiento del software, su computadora puede instalar múltiples sistemas informáticos completos simultáneamente. Los programas más famosos mencionados aquí son VMWare y OpenStack. A través de VMWare u OpenStack, estamos en la computadora original. Simular uno o más "subcomputadoras". Estas subcomputadoras pueden ser cualquier sistema y cualquier versión entre Mac, Windows y Linux. Solo su software es compatible y puede encontrar la imagen reflejada. En la "subcomputadora", puede ejecutar programas como computadoras normales, como abrir Word. El software y el hardware de cada subcomputadora están aislados entre sí y no se afectan entre sí.
¿Cuáles son las ventajas de la virtualización?
Inserte la descripción de la imagen aquí
Ventajas: las
máquinas virtuales pueden hacer que una máquina funcione como varias máquinas, lo que significa que necesita menos servidores y puede aprovechar al máximo los servidores que posee. Este aumento de la eficiencia puede ahorrar costes de hardware, refrigeración y mantenimiento. Con la virtualización, podemos ejecutar varios tipos de aplicaciones, escritorios y sistemas operativos en la misma máquina.

Desventajas:
aunque la máquina virtual puede aislar muchos "equipos secundarios", ocupa más espacio y se inicia más lentamente. El software de la máquina virtual también puede costar dinero, como
el espacio operativo de VMWare , las máquinas virtuales generalmente requieren de unos pocos GB a docenas de GB de espacio

Docker
Docker es un motor de contenedor de aplicaciones de código abierto que permite a los desarrolladores empaquetar sus aplicaciones y dependencias en un contenedor portátil y luego publicarlo en cualquier máquina Linux popular, que también se puede virtualizar. Los contenedores utilizan el mecanismo de la caja de arena por completo y no habrá interfaces entre ellos.

Nacido a principios de 2013, originalmente era un proyecto paralelo dentro de dotCloud. Se basa en el lenguaje Go introducido por Google. Posteriormente, el proyecto se unió a la
Fundación Linux y cumple con el protocolo Apache 2.0. El código del proyecto se mantiene en GitHub. Docker
ha recibido una amplia atención y discusión desde que fue de código abierto, por lo que dotCloud luego cambió su nombre a Docker Inc. Redhat ha
concentrado el soporte para Docker en su RHEL6.5 ; Google también se usa ampliamente en sus productos PaaS

Inserte la descripción de la imagen aquí

Docker se basa en tecnologías como Linux Content (LXC). Sobre la base de LXC, Docker ha encapsulado aún más, para que los usuarios no tengan que preocuparse por la gestión de contenedores, lo que facilita la operación. Los usuarios que operan contenedores Docker son tan simples como operar una máquina virtual rápida y liviana.

La idea de Docker viene del contenedor ¿Qué problema resuelve el contenedor? En un barco grande, la mercancía se puede organizar de forma ordenada. Y todo tipo de mercancías están estandarizadas por contenedores, y los contenedores y contenedores no se afectarán entre sí. Entonces no necesito un barco dedicado al transporte de frutas y un barco dedicado al transporte de productos químicos. Siempre que estos productos estén bien embalados en contenedores, puedo transportarlos todos en un barco grande. Docker es un concepto similar.

La computación en la nube es popular ahora, la computación en la nube es como un gran carguero y Docker es un contenedor.

Los tres conceptos centrales de la tecnología Docker son:

1. Imagen
reflejada 2. Contenedor
3. Depósito de almacén

idea principal:

Construir, enviar y ejecutar (construir, transportar, ejecutar).
Construir una vez, ejecutar en cualquier lugar (construir una vez, ejecutar en cualquier lugar).

¿Cuál es la razón del peso ligero de Docker? Creo que también tendrá tales dudas: ¿Por qué Docker se inicia rápido? ¿Cómo compartir el kernel con el host?

Cuando solicitamos a Docker que ejecute un contenedor, Docker configurará un entorno aislado de recursos en la computadora.

Luego, copie la aplicación empaquetada y los archivos asociados al sistema de archivos en el espacio de nombres, y la configuración del entorno estará completa. Después de eso, Docker ejecutará nuestros comandos preespecificados para ejecutar la aplicación.

La imagen no contiene datos dinámicos y su contenido no se modificará una vez que se haya creado.
Debido a que las funciones de espacio de nombres y grupos C solo están disponibles en Linux, los contenedores no se pueden ejecutar en otros sistemas operativos. Entonces, ¿cómo se ejecuta Docker en macOS o Windows? Docker en realidad usa un truco para instalar una máquina virtual Linux en un sistema operativo que no es Linux y luego ejecutar el contenedor dentro de la máquina virtual.
Una imagen es un paquete ejecutable que contiene el código, el tiempo de ejecución, las bibliotecas, las variables de entorno y los archivos de configuración necesarios para ejecutar la aplicación. El contenedor es una instancia de tiempo de ejecución de la imagen.

Para entender mejor qué es Docker, tomemos un ejemplo
: necesito construir una casa, así que muevo piedras, corto leña, dibujo dibujos y construyo una casa. Después de una operación, finalmente se construyó la casa.
Inserte la descripción de la imagen aquí

Como resultado, después de vivir un tiempo, quise mudarme a la playa por capricho. En este momento, según el método anterior, solo puedo ir a la playa, mover piedras, cortar leña, dibujar dibujos y volver a construir casas.

Inserte la descripción de la imagen aquí

Cuando estaba preocupado, un mago vino a enseñarme una especie de magia. Este tipo de magia puede hacer una copia de la casa que construí, convertirla en un "espejo" y ponerla en mi mochila.

Inserte la descripción de la imagen aquí
Cuando llego a la playa, uso este "espejo" para copiar una casa y mudarme con mis maletas.

¿No es asombroso? En correspondencia con nuestro proyecto, la casa es el proyecto en sí, el espejo es la copia del proyecto y la mochila es el almacén de espejos.
Si desea ampliar la capacidad de forma dinámica, saque la imagen del proyecto del almacén y cópiela a voluntad. ¡Construya una vez, ejecute en cualquier lugar!
Ya no es necesario prestar atención a problemas como la versión, la compatibilidad, la implementación, etc.

Contenedor: virtualiza la capa del sistema operativo y es una unidad de software estándar,
sus características son las siguientes:

* • Ejecutar en cualquier lugar: el contenedor puede empaquetar el código con archivos de configuración y bibliotecas dependientes relacionadas para garantizar un funcionamiento coherente en cualquier entorno.

• Alta utilización de recursos: el contenedor proporciona aislamiento a nivel de proceso, por lo que puede configurar el uso de la CPU y la memoria con mayor precisión y luego hacer un mejor uso de los recursos informáticos del servidor.

• Expansión rápida: cada contenedor puede ejecutarse como un proceso independiente y puede compartir los recursos del sistema del sistema operativo subyacente, lo que puede acelerar la eficiencia de inicio y detención del contenedor. *

Cuando la
tecnología de contenedores K8S Docker estaba en pleno apogeo, todos descubrieron que si desea aplicar Docker a implementaciones comerciales específicas, existen dificultades: no es fácil de organizar, administrar y programar. Por tanto, la gente necesita urgentemente un sistema de gestión para una gestión más avanzada y flexible de Docker y contenedores. Entonces apareció K8S

K8S es una plataforma de gestión de clústeres basada en contenedores, su nombre completo es kubernetes.

Inserte la descripción de la imagen aquí

1. Arquitectura de K8s :
Inserte la descripción de la imagen aquí
Generalmente hablando, la arquitectura de K8s es un Master correspondiente a un grupo de nodos de Nodo. Introduzcamos el maestro y el nodo en el diagrama de arquitectura de K8 uno por uno.

La estructura del nodo maestro es la siguiente:

• apiserver es la puerta de enlace de K8s. Todas las solicitudes de comando deben pasar por apiserver.

• Programador El programador utiliza un algoritmo de programación para programar el recurso solicitado en un determinado nodo de nodo.

• Controlador controlador, manteniendo los objetos de recursos de K8s.

• etcd almacena objetos de recursos.

La estructura del nodo Nodo es la siguiente:
• Kubelet existe en cada nodo Nodo, y las instrucciones de operación de recursos en el nodo Nodo son ejecutadas por Kubelet.

• Servicio de proxy Kube-proxy, que maneja el equilibrio de carga entre servicios.

• Pod es la unidad básica (unidad mínima) de la gestión de K8s. Dentro del Pod hay un contenedor. K8s no gestiona directamente el contenedor, sino que gestiona el Pod.

• El entorno básico para que Docker ejecute contenedores, el motor de contenedores.

• Servicio de recolección de registros Fluentd.

2. Componentes principales de K8s

① Componentes de K8s

K8s se usa para administrar contenedores, pero no opera directamente contenedores La unidad de operación más pequeña es Pod (contenedor de administración indirecta):
• Un Master tiene un grupo de nodos de Nodo que le corresponden.
• El nodo maestro no almacena contenedores, sino que solo es responsable de la programación, la administración de la red, los controladores y el almacenamiento de objetos de recursos.
• El contenedor se almacena en el nodo Nodo y el contenedor se almacena dentro del Pod).
• Puede haber un contenedor o varios contenedores dentro del Pod.
• Kubelet es responsable del mantenimiento del Pod local.
• Kube-proxy es responsable del equilibrio de carga y el equilibrio de carga entre varios pods.

②¿Qué es Pod?

La explicación es la siguiente:
• Pod también es un contenedor. Este contenedor contiene un contenedor creado por Docker. Pod es un contenedor que se utiliza para encapsular el contenedor. Pod es un grupo virtualizado.
• Pod es equivalente a un host independiente y puede encapsular uno o más contenedores.
Pod tiene su propia dirección IP y nombre de host, lo que equivale a un entorno sandbox independiente.

③¿Para qué se usa exactamente Pod?

En circunstancias normales, durante la implementación del servicio, Pod se usa para administrar un grupo de servicios relacionados. En un Pod se implementa un servicio o un grupo de servicios relacionados.
Un grupo de servicios relacionados se refiere a los servicios en el enlace de llamada de la llamada en cadena.

④¿Cómo realizar un clúster de servicios web?

Realice el clúster de servicios: solo necesita copiar la copia del pod de múltiples partes, que también es el punto avanzado de la administración de K8s. Si K8s continúa expandiéndose, solo necesita controlar la cantidad de pods, y el principio de reducción es similar.

⑤Pod red subyacente, ¿cómo se realiza el almacenamiento de datos?

Los detalles son los siguientes:
• Antes de que se cree el contenedor interno del Pod, primero se debe crear el contenedor Pause.
• Acceder a localhost entre contenedores de servicios equivale a acceder a servicios locales, con muy alto rendimiento.

⑥ReplicaSet controlador de réplica

Controle la cantidad de "clústeres de servicio" de réplicas de pod y mantenga siempre constante la cantidad de configuraciones esperadas.
Cuando un servicio de Pod deja de funcionar, el controlador de réplica recreará inmediatamente un nuevo Pod, siempre asegurándose de que el número de réplicas sea el número establecido.
Controlador de réplica: selector de etiquetas: elija para mantener un grupo de servicios relacionados (sus propios servicios).
• Controlador de réplica. Controlador de réplica: selección única.
• Controlador de réplica ReplicaSet: selección única, selección compuesta.
Sin embargo, en la nueva versión, se recomienda utilizar ReplicaSet como controlador de réplica, y ReplicationController ya no se utiliza.

⑦Objeto de implementación de implementación

Los objetos de implementación de implementación son los siguientes:
• Modelo de estructura de implementación de servicios
• Actualización
progresiva ReplicaSet El controlador de réplicas controla la cantidad de réplicas de Pod. Sin embargo, las necesidades del proyecto se iteran y actualizan constantemente, y la versión del proyecto se publicará continuamente. ¿Cómo actualizar el servicio si cambia la versión?
Modelo de implementación:
• ReplicaSet no admite actualización continua. El objeto Implementación admite actualización continua y generalmente se usa con ReplicaSet.
• La implementación administra ReplicaSet, RS restablece un nuevo RS y crea un nuevo Pod.

⑧ ¿Qué tipo de problemas existen cuando MySQL usa la implementación en contenedores?

Los problemas son los siguientes:
• Los contenedores tienen un ciclo de vida. Una vez inactivos, los datos se perderán.
• Implementación de pod. El pod tiene un ciclo de vida y pérdida de datos.
Para K8, la implementación no se puede utilizar para implementar servicios con estado.
En circunstancias normales, Deployment se utiliza para implementar servicios sin estado, luego, para la implementación de servicios con estado, usa StatefulSet para implementar servicios con estado.
¿Qué es un servicio con estado?
• Hay datos en tiempo real que deben almacenarse.
• En un clúster de servicios con estado, elimine un determinado servicio y únase a la red de la máquina después de un período de tiempo, si la red del clúster no está disponible.
¿Qué es un servicio sin estado?
• No hay datos en tiempo real para almacenar.
• En un clúster de servicios sin estado, extraer un determinado servicio y agregarlo a la red de la máquina después de un período de tiempo no tiene ningún efecto en el servicio del clúster.

⑨StatefulSet

Para resolver un problema de uso de la implementación en contenedores de servicios con estado:
• Modelo de implementación

StatefulSet de servicios con estado asegura que después de que se restablezca el Pod, el nombre de host no cambiará y el Pod puede asociar datos con el nombre de host.

3. Registro de servicios y descubrimiento de K8

①¿Cuál es la estructura de Pod?

La estructura es la siguiente:

Pod es equivalente a un contenedor. El pod tiene una dirección IP independiente y su propio nombre de host. Utiliza el espacio de nombres para el aislamiento de recursos y un entorno de pruebas independientes.
Pod encapsula un contenedor, que puede encapsular uno o varios contenedores (generalmente un grupo de contenedores relacionados).

②Red de pod

detalles como sigue:

Pod tiene su propia dirección IP independiente.
El acceso de localhost se utiliza para acceder a los contenedores internos del Pod.
El acceso al contenedor interno del pod es Localhost y la comunicación entre los pods pertenece al acceso remoto.

③¿Cómo proporciona Pod acceso a servicios externos?

Pod es un objeto de recurso virtual (proceso), no hay una entidad correspondiente (máquina física, tarjeta de red física) correspondiente y no puede proporcionar acceso de servicio directamente al exterior.

Entonces, ¿cómo resolver este problema? Si Pod desea proporcionar servicios externamente, debe vincular el puerto físico de la máquina.

Es decir, abra el puerto en la máquina física y deje que este puerto sea mapeado con el puerto del Pod, para que el paquete de datos pueda ser reenviado a través de la máquina física.

En pocas palabras: primero acceda a través de la máquina física IP + Puerto y luego reenvíe los paquetes de datos.

④¿Cómo lograr el equilibrio de carga para un grupo de copias de Pod relacionadas?

Primero aclaremos un concepto. Pod es un proceso y tiene un ciclo de vida. Se crearán tiempos de inactividad, actualizaciones de versiones, nuevos Pods.

En este momento, la dirección IP cambiará y el nombre de host cambiará. No es apropiado usar Nginx para balancear la carga.

Por tanto, debemos confiar en las capacidades de Service.

⑤¿Cómo logra Service el equilibrio de carga?

En pocas palabras, el objeto de recurso Servicio incluye las siguientes tres partes:

Pod IP: la dirección IP del Pod.
IP de nodo: la dirección IP de la máquina física.
IP del clúster: IP virtual, es un objeto de servicio abstraído por K8s, este objeto de servicio es un objeto de recurso VIP.

⑥ Discusión en profundidad de los principios de Service VIP

detalles como sigue:

El servicio y el módulo son un proceso y el servicio no puede proporcionar servicios a redes externas.
Puede haber comunicación directa entre el Servicio y el Pod, y su comunicación pertenece a la comunicación LAN.
Después de entregar la solicitud al Servicio, el Servicio utiliza iptable e ipvs para distribuir paquetes de datos.

⑦¿Cómo se relaciona el objeto Servicio con el Pod?

detalles como sigue:

Los diferentes servicios tienen diferentes servicios.
El servicio y el pod se asocian a través del selector de etiquetas.
selector:
app = x Seleccione un conjunto de pods de servicio de pedidos y cree un servicio;
almacene un conjunto de pod ips a través de los puntos finales;
Servicio seleccione un conjunto de copias relacionadas mediante el selector de etiquetas y luego cree un Servicio.

⑧Cuando el Pod está inactivo y se lanza una nueva versión, ¿cómo detecta el Servicio que el Pod ha cambiado?

Cada pod tiene Kube-Proxy, que supervisa todos los pods. Si se encuentra que el Pod cambia, la relación de mapeo de IP correspondiente (almacenada en etcd) se actualiza dinámicamente.

En resumen, aquí hay una breve introducción a la evolución de Vm -> Docker -> K8s, así como las ventajas y desventajas de diferentes operadores, y cuáles usar en el diseño de la arquitectura de software deben combinarse con las condiciones reales del proyecto.
Por ejemplo, antes de que apareciera la máquina virtual, yo era rico y capaz, y podía comprar una villa. Después de
Inserte la descripción de la imagen aquí
que apareció la máquina virtual, el costo de la máquina física era demasiado alto, así que pude comprar una casa comercial .

Inserte la descripción de la imagen aquí

Aparece Docker, para ahorrar costos, los apartamentos cápsula también son buenos
Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/vipshop_fin_dev/article/details/112524584
Recomendado
Clasificación