Introducción a k8s (kubernetes)

1. ¿Qué es Kubernetes?

Kubernetes es una nueva solución de arquitectura distribuida basada en tecnología de contenedores. Es un sistema de gestión de clústeres de contenedores de código abierto de Google. Kubernetes se conoce como K8S.

Kubernetes es una plataforma integral y completa de soporte y desarrollo de sistemas distribuidos. También es una plataforma abierta y no es intrusiva para los lenguajes de programación, marcos de programación y middleware existentes.

Kubernetes proporciona herramientas de gestión integrales que cubren todos los aspectos del desarrollo, las pruebas de implementación y el monitoreo de operación y mantenimiento.

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, servicio rodante. capacidades de actualización y expansión en línea, mecanismo de programación automática de recursos escalable y capacidades de gestión de cuotas de recursos de granularidad múltiple.

Documentación oficial de Kubernetes: Kubernetes

2. Funciones de Kubernetes

① Autorreparación
Cuando falla un nodo, reinicie los contenedores fallidos, reemplácelos y vuelva a implementarlos para garantizar la cantidad esperada de copias; elimine los contenedores que no superen las comprobaciones de estado y no procesarán las solicitudes de los usuarios hasta que estén listos para garantizar que los servicios en línea no se interrumpan.
​②
El escalado automático
utiliza comandos, interfaz de usuario o expande y reduce automática y rápidamente las instancias de aplicaciones según el uso de la CPU para garantizar una alta disponibilidad cuando los picos comerciales de las aplicaciones son simultáneos; los recursos se reciclan durante los picos comerciales bajos para ejecutar servicios a un costo mínimo.
​③
Implementación y reversión automáticas
K8S utiliza una estrategia de actualización continua para actualizar las aplicaciones, actualizando un Pod a la vez en lugar de eliminar todos los Pods al mismo tiempo. Si ocurre un problema durante el proceso de actualización, los cambios se revertirán para garantizar que la actualización no afecta el negocio.
​④
Descubrimiento de servicios y equilibrio de carga
K8S proporciona una entrada de acceso unificada (dirección IP interna y un nombre DNS) para múltiples contenedores, y equilibra la carga de todos los contenedores asociados, de modo que los usuarios no necesitan considerar problemas de IP de contenedores.
​⑤
La gestión confidencial y de configuración
gestiona datos confidenciales y configuraciones de aplicaciones sin exponer datos confidenciales a espejos, lo que mejora la seguridad de los datos confidenciales. Y algunas configuraciones de uso común se pueden almacenar en K8S para facilitar el uso de la aplicación.
​⑥
La orquestación de almacenamiento
monta sistemas de almacenamiento externos, ya sea desde almacenamiento local, nube pública o almacenamiento en red, como parte de los recursos del clúster, lo que mejora en gran medida la flexibilidad del uso del almacenamiento.

El procesamiento por lotes
proporciona tareas únicas y tareas programadas y cumple con los escenarios del procesamiento y análisis de datos por lotes.

3. Diagrama de infraestructura

Componentes principales:
• etcd guarda el estado de todo el clúster y la información de implementación de aplicaciones;
• Kube-apiserver proporciona la única entrada a las operaciones de recursos y proporciona mecanismos tales como autenticación, autorización, control de acceso, registro y descubrimiento de API;
• Kube-Controller - El administrador es responsable de mantener el estado del clúster, como la detección de fallas, la expansión automática, las actualizaciones continuas, etc.;
• Kube-scheduler es responsable de la programación de recursos, programando Pods en las máquinas correspondientes de acuerdo con la política de programación predeterminada;

kubelet es responsable del registro de nodos y el envío de latidos, la gestión del ciclo de vida de las aplicaciones, la verificación del estado de las aplicaciones, el almacenamiento de acoplamiento de la interfaz de almacenamiento CSI; • el
tiempo de ejecución del contenedor es responsable de la gestión de imágenes y el funcionamiento real de Pods y contenedores (CRI);
• kube-proxy es responsable de la implementación de la exposición del servicio;           
Nota
: kubelet, contenedor Runtime y componentes kube-proxy también se pueden encontrar en el nodo maestro. El nodo maestro también puede formar un clúster. Las funciones específicas las puede buscar usted mismo.

Node y Pod son conceptos diferentes: Node es una máquina física o virtual, mientras que Pod es una colección de uno o más contenedores. Los pods se pueden ejecutar en un nodo, un nodo puede ejecutar varios pods y un pod también se puede ejecutar en varios nodos.

4. Límite de cuota

(1) Asignación de recursos

Para configurar dos:

solicitud--solicitud de recursos, límite--límite máximo;

实例:
 spec:
      containers:
      - name: hostnames
        image: mirrorgooglecontainers/serve_hostname
        resources:
          requests:
            cpu: 100m
            memory: 100Mi
          limits:
            cpu: 100m
            memory: 100Mi
            
100 millicpu,也就是 0.1 个 CPU 的意思。也可以写成 cpu:0.1;
memory100Mi:1Mi=1024*1024;1M=1000*1000,所以这里就是100MB内存的意思。

Pregunta: Es lógico que establecer el límite máximo de recursos sea suficiente, similar a la configuración anterior de docker-compose ¿Por qué k8s necesita establecer un parámetro de solicitud de recursos?
Respuesta
: El campo `resources.requests` puede especificar la cantidad de recursos de CPU y memoria que requiere el Pod. El programador de Kubernetes seleccionará los nodos apropiados según este parámetro para garantizar que los recursos en el nodo puedan satisfacer las necesidades del Pod. Si no se establece este parámetro, el programador de Kubernetes establecerá los requisitos de recursos del Pod en 0 de forma predeterminada, lo que puede hacer que el Pod se programe en un nodo con recursos insuficientes, lo que afectará el rendimiento y la estabilidad del Pod.
Cabe señalar que el campo resources.requests es solo un valor recomendado y el programador de Kubernetes no obliga a los nodos a proporcionar estos recursos. Si no hay recursos suficientes en el nodo, es posible que el Pod aún se quede sin recursos. Por lo tanto, al configurar el campo resources.requests, debe configurarlo adecuadamente de acuerdo con la situación real para garantizar que el Pod pueda ejecutarse normalmente.

(2) preferencia de recursos

Para recursos incompresibles como la memoria, si se produce una preferencia de recursos, los pods serán desalojados (cerrados) según la prioridad. La estrategia de desalojo es: desalojar primero los Pods con Solicitud = Límite = 0 (nivel BestEffort) y luego desalojar Solicitud! = Límite (Burstable). Se retendrán los pods con 0<Request==Limit;

La configuración de Solicitud comparte proporcionalmente el intervalo de tiempo de programación de la CPU, por lo que, a la inversa, cuanto mayor sea el valor de la solicitud, significa que cuando se produce la preferencia de recursos, a cada Pod se le asignan más intervalos de tiempo de CPU;

Supongo que te gusta

Origin blog.csdn.net/Mr_wilson_liu/article/details/132567209
Recomendado
Clasificación