Introducción al servicio de aplicación de lanzamiento de k8s (5)

Target

  • Comprender el servicio de Kubernetes
  • Comprender la relación entre Labels y LabelSelector and Service
  • En el clúster de kubernetes, publique aplicaciones a través del Servicio

Descripción general del servicio Kubernetes

De hecho, Pod (Container Group) tiene su propio  ciclo de vida . Cuando el nodo de trabajo (nodo) falla, el Pod (grupo de contenedores) que se ejecuta en el nodo también desaparecerá. Luego, la implementación  puede ajustar dinámicamente el clúster a su estado original creando un nuevo Pod (grupo de contenedores) para mantener la aplicación en funcionamiento.

Por ejemplo, suponga que hay un programa de fondo de procesamiento de imágenes con 3 copias en tiempo de ejecución. Estas 3 copias son reemplazables (aplicaciones sin estado). Incluso si el Pod (grupo de contenedores) desaparece y se recrea, o el número de copias aumenta de 3 a 5, el sistema de front-end no necesita prestar atención a los cambios de las copias de fondo. Dado que cada Pod (grupo de contenedores) en el clúster de Kubernetes tiene una dirección IP única (incluso si es un Pod diferente en el mismo nodo), necesitamos un mecanismo para proteger el Pod (grupo de contenedores) del sistema back-end del sistema front-end. Cambios en la dirección IP durante el proceso de destrucción y creación.

El servicio en Kubernetes proporciona una capa de abstracción que selecciona Pods (grupos de contenedores) con ciertas características y define un método de acceso para ellos. El servicio desacopla la interdependencia entre Pods (grupos de contenedores) (el acceso original a otro Pod desde un Pod requiere conocer la dirección IP de la otra parte) . El PodSelector (grupo de contenedores) seleccionado por un Servicio generalmente lo determina LabelSelector.

Al crear un Servicio, al establecer el valor del campo spec.type en el archivo de configuración, la aplicación puede exponerse al exterior de diferentes maneras:

  • ClusterIP (predeterminado)

    Anuncie servicios en IP internas en el clúster, de esta manera solo se puede acceder al Servicio dentro del clúster

  • NodePort

    Use NAT para anunciar servicios en el mismo puerto de cada clúster. De esta manera, puede acceder al servicio accediendo a cualquier nodo + número de puerto en el clúster  <NodeIP>:<NodePort>. En este momento, el método de acceso de ClusterIP todavía está disponible.

  • LoadBalancer

    En un entorno de nube (requiere soporte del proveedor de la nube), cree un equilibrador de carga fuera del clúster y use la dirección IP del equilibrador de carga como la dirección de acceso al servicio. En este momento, los métodos de acceso de ClusterIP y NodePort todavía están disponibles.

Resumen:

El servicio es una capa de abstracción: selecciona un grupo de pods (grupos de contenedores) a través de LabelSelector, publica los puertos designados de estos pods en el exterior del clúster y admite el equilibrio de carga y el descubrimiento de servicios.

  • Anuncie el puerto de Pod para hacerlo accesible
  • Balanceo de carga entre múltiples pods
  • Usar etiqueta y LabelSelector

Servicios y etiquetas

En la figura siguiente, hay dos servicios, el Servicio A (línea amarilla discontinua) y el Servicio B (línea azul discontinua). El Servicio A reenvía la solicitud al Pod con una IP de 10.10.10.1, y el Servicio B reenvía la solicitud a la IP con 10.10.10.2, 10.10. 10.3, 10.10.10.4 Pod.

Tutorial de Kubernetes: servicios y etiquetas

El servicio enruta las solicitudes externas a un conjunto de Pods, que proporciona una capa de abstracción que permite a Kubernetes programar dinámicamente grupos de contenedores sin afectar al llamador del servicio (recrear el grupo de contenedores después de que el grupo de contenedores falle y aumentar o disminuir el mismo Una implementación corresponde a la cantidad de grupos de contenedores, etc.) .

El servicio utiliza  etiquetas, LabelSelector (etiquetas y selectores) para que  coincida con un grupo de pods . Las etiquetas (etiquetas) son pares clave / valor unidos a objetos de Kubernetes y tienen múltiples usos:

  • Asigne objetos de Kubernetes (Nodo, Implementación, Pod, Servicio, etc.) para el entorno de desarrollo, el entorno de prueba o el entorno de producción
  • Etiquetas de versión integradas, use etiquetas para distinguir diferentes versiones de software de aplicación
  • Use etiquetas para clasificar objetos de Kubernetes

La siguiente figura muestra la asociación entre Labels y LabelSelector

  • La implementación B contiene LabelSelector para app = B.  De esta manera, declare Pod con la etiqueta app = B asociada a ella
  • El Pod creado por Deployment B contiene la etiqueta app = B
  • El servicio B selecciona Pods que se pueden enrutar a través de la aplicación de selector de etiquetas = B

Tutorial de Kubernetes: servicios y etiquetas

Se pueden adjuntar etiquetas al crear objetos de Kubernetes, o se pueden adjuntar después de la creación. Puede modificar las etiquetas de un objeto Kubernetes en cualquier momento

Combate real: crear un servicio para la implementación de nginx

Las etiquetas se definen en la implementación que creó nginx, de la siguiente manera:

metadatos: # El nombre traducido son metadatos, es decir, algunos atributos básicos e información del 
  nombre de implementación : nginx-implement # 
  Etiquetas de nombre de implementación : #etiquetas , puede ubicar de manera flexible uno o más recursos, donde la clave y el valor se pueden personalizar y definir Múltiples grupos de 
    aplicaciones: nginx # Establezca la clave para la implementación en la aplicación y el valor para las etiquetas nginx

Crear archivo nginx-service.yaml

  •    vi nginx-service.yaml

El contenido es el siguiente

apiVersion: v1 
kind: 
metadatos del servicio : 
  nombre: nginx-service 
    # 
  Etiquetas del nombre del servicio : #Service propia etiqueta de la aplicación: nginx # Configure la clave para el Servicio como la aplicación y el valor como la 
especificación de la etiqueta nginx : # Esto se trata del Servicio Definición, describe cómo el Servicio selecciona Pod y cómo acceder al 
  selector: #tag selector de 
    aplicación: nginx #seleccionar 
  puertos Pod con la aplicación de etiqueta: nginx 
  : -name: nginx-port #port nombre 
    protocolo: TCP #protocol tipo TCP / 
    Puerto UDP : 80 # Se puede acceder a otros grupos de contenedores en el clúster a través del puerto 80 Puerto 
    nodo de servicio : 32600 # Acceso a través del puerto 
    32600 de cualquier nodo Puerto objetivo de servicio : 80 # Reenviar la solicitud al puerto 80 que coincida con el 
  tipo de Pod : NodePort # Tipo de servicio, ClusterIP / NodePort / LoaderBalancer
 

Comando de ejecución

[root @ guanbin-k8s-master k8s] # kubectl apply -f nginx-service.yaml 
service / nginx-service created

Verificar el resultado de la ejecución

Puede ver el servicio llamado nginx-service.

[root @ guanbin-k8s-master k8s] # kubectl get service -o wide 
NOMBRE TIPO CLUSTER-IP EXTERNAL-IP PORT (S) SELECTOR 
DE EDAD kubernetes ClusterIP 10.96.0.1 <ninguno> 443 / TCP 2d23h <ninguno> 
kubernetes-bootcamp NodePort 10.96.52.43 <ninguno> 8080: 31393 / TCP 2d run = kubernetes-bootcamp 
nginx-service NodePort 10.96.10.148 <ninguno> 80: 32600 / TCP 70s app = nginx

Servicio de acceso

rizo <任意节点的 IP>:32600

[root @ guanbin-k8s-master k8s] # curl guanbin-k8s-master: 32600 
<! DOCTYPE html> 
<html> 
<head> 
<title> ¡Bienvenido a nginx! </title> 
<style> 
    body { 
        width: 35em; 
        margen: 0 automático; 
        Familia tipográfica: Tahoma, Verdana, Arial, sans-serif; 
    } 
</style> 
</head> 
<body> 
<h1> ¡Bienvenido a nginx! </h1> 
<p> Si ve esta página, el servidor web nginx se ha instalado y 
funciona correctamente . Se requiere configuración adicional. </p> 

<p> Para obtener documentación y asistencia en línea, consulte 
<a href="http://nginx.org/"> nginx.org </a>. <br/>

<p> <em> Gracias por usar nginx. </em> </p> 
</body> 
</html>

 O visita la página

 

 

 

 

 

 
 

 

 

 

 

Supongo que te gusta

Origin www.cnblogs.com/guanbin-529/p/12748919.html
Recomendado
Clasificación