[Nativo de la nube] Servicio de aprendizaje profundo en kubernetes

Servicio

Tabla de contenido

1 ¿Qué es el servicio?

2 características

3 Relación entre Servicio y Pod

4 Utilice el servicio

5 multipuerto

6 tipostipo

7 Comunicación interna


1 ¿Qué es el servicio?

1.1 Definición

Dirección del sitio web oficial: Servicio | Kubernetes

Un método para exponer una aplicación de red que se ejecuta en un Pod o un grupo de Pods como un servicio de red.

Definición popular: el servicio es una forma de proporcionar servicios de red para pods.

1.2 Por qué se necesita el servicio

Pregunta: Si un conjunto de Pods (llamado "backend") proporciona funcionalidad a otros Pods dentro del clúster (llamado "frontend"), ¿cómo averigua el frontend y realiza un seguimiento de la dirección IP a la que conectarse para que el frontend ¿Puedo usarlo para atender la carga de trabajo de la parte backend?

imagen-20230307133342270

Si se trata de un backend de procesamiento de imágenes, ejecuta 3 copias. Estas copias son intercambiables: los frontends no necesitan preocuparse a qué copia de backend llaman. Sin embargo, los Pods que componen este grupo de programas backend pueden cambiar. El cliente front-end no debe ni necesita saberlo, y no es necesario realizar un seguimiento del estado de este grupo de backends. La abstracción definida por Servicio puede desacoplar esta conexión .

2 características

  • El servicio asocia el Pod correspondiente mediante etiqueta

  • El ciclo de vida del Servicio no está vinculado al Pod y la IP no cambiará debido a la recreación del Pod.

  • Proporciona función de equilibrio de carga para reenviar automáticamente el tráfico a diferentes Pods

  • Proporciona puertos de acceso fuera del clúster.

  • Se puede acceder al clúster a través del nombre del servicio.

3 Relación entre Servicio y Pod

4 Utilice el servicio

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  replicas: 1
  template:
    metadata:
      name: nginx
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: nginx:1.19
          imagePullPolicy: IfNotPresent
          ports:
            - containerPort: 80
      restartPolicy: Always
  selector:
    matchLabels:
      app: nginx
---
apiVersion: v1
kind: Service
metadata:
  name: nginx
spec:
  selector:
    app: nginx
  ports:
    - port: 8080 #service 端口
      targetPort: 80 #容器端口
      nodePort: 31001 #node 节点端口 固定在 30000-32767 之间
  type: NodePort

注意:节点端口固定在 30000-32767 之间

5 multipuerto

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  replicas: 1
  template:
    metadata:
      name: nginx
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: nginx:1.19
          imagePullPolicy: IfNotPresent
          ports:
            - containerPort: 80
      restartPolicy: Always
  selector:
    matchLabels:
      app: nginx
---
apiVersion: v1
kind: Service
metadata:
  name: nginx
spec:
  selector:
    app: nginx
  ports:
    - port: 8080 #service 端口
      name: write
      targetPort: 80 #容器端口
      nodePort: 31001 #node 节点端口 固定在 30000-32767 之间
    - port: 8081
      name: read
      targetPort: 80
      nodePort: 31002
​
  type: NodePort

6 tipostipo

Servicio | Kubernetes

Para determinadas partes de algunas aplicaciones (como el front-end), es posible que desee exponerlas a direcciones IP fuera del clúster de Kubernetes.

Kubernetes ServiceTypesle permite especificar el tipo de Servicio que necesita.

  • ClusterIP: El servicio está expuesto dentro del clúster y solo otros objetos dentro del clúster pueden acceder a él. Generalmente se usa para el descubrimiento de servicios internos y no se expondrá fuera del clúster.

  • NodePort: Exponer el Servicio en un determinado puerto del Nodo, para que se pueda acceder al Servicio a través de la dirección IP y el número de puerto del Nodo, generalmente se usa en entornos de desarrollo y prueba.

  • LoadBalancer: Exponer el Servicio a la red pública a través del balanceador de carga proporcionado por el proveedor de servicios en la nube, para que los usuarios externos puedan acceder al Servicio.

  • ExternalName: Asigne el Servicio a un nombre DNS, de modo que se pueda acceder al Servicio a través del nombre DNS, que generalmente se usa para acceder a servicios externos.

6.1 Tipo de IP del clúster

  • 这是最常用的 Service 类型之一. Cree una dirección IP virtual dentro del clúster, a la que puedan acceder otros Pods en el mismo clúster, pero no mediante solicitudes fuera del clúster. Este tipo de servicio se suele utilizar para exponer servicios internos, como servicios de base de datos o caché. Por ejemplo, en una aplicación web, es posible que necesite conectarse a una base de datos, pero no es necesario que la base de datos esté expuesta fuera de la aplicación. En este momento, puede utilizar el servicio de tipo ClusterIP para permitir que la aplicación acceda a la base de datos.

6.2 Tipo de puerto de nodo

  • Este tipo de Servicio creará un puerto y lo vinculará a cada nodo del clúster, permitiendo que el tráfico externo acceda al Servicio. Este tipo se utiliza normalmente para exponer servicios públicos, como aplicaciones web o API. Por ejemplo, si necesita acceder a una aplicación web que se ejecuta en el clúster desde fuera del clúster, puede crear un Servicio de tipo NodePort y exponer el Servicio al exterior nodePortdel clúster especificando el campo Servicio.

  • Si typeconfigura el campo en NodePort, el plano de control de Kubernetes --service-node-port-rangeasignará puertos en el rango especificado por la bandera (predeterminado: 30000-32767).

6.3 Tipo de equilibrador de carga

  • Este tipo de Servicio es similar a NodePort, pero crea un equilibrador de carga en el proveedor de la nube. Este tipo se suele utilizar para implementar aplicaciones en plataformas en la nube. El equilibrador de carga de la plataforma en la nube distribuye el tráfico a los nodos del clúster. Este tipo de Servicio solo se puede utilizar en plataformas en la nube y requiere soporte de los proveedores de la nube.

6.4 Tipo de nombre externo

  • Este tipo de Servicio permite el reenvío del Servicio a cualquier entrada DNS CNAME a la que deba accederse. A diferencia de otros tipos de Servicios, no envía solicitudes a ningún Pod. En cambio, reenvía la solicitud a la dirección externa configurada. Este tipo de servicio se utiliza normalmente para enviar servicios a otros servicios fuera del clúster. Por ejemplo, si tiene un servicio ejecutándose en la red externa y desea utilizar el servicio en el clúster de Kubernetes, puede crear un Servicio de tipo NombreExterno para resolver el DNS del servicio en el clúster de Kubernetes.

7 Comunicación interna

7.1 Crear grupo

apiVersion: apps/v1
kind: Deployment
metadata:
  name: mysql
  labels:
    app: mysql
spec:
  selector:
    matchLabels:
      app: mysql
  replicas: 1
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
      - name: mysql
        image: mysql/mysql-server:8.0
        env:
        - name: MYSQL_ROOT_PASSWORD
          value: root
        ports:
        - name: mysql
          containerPort: 3306
---
apiVersion: v1
kind: Service
metadata:
  name: mysql
spec:
  selector:
    app: mysql
  ports:
  - name: mysql
    port: 3306
    targetPort: 3306
    type: ClusterIP
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 1
  template:
    metadata:
      labels:
        app: nginx
    spec:
      hostNetwork: true
      containers:
      - name: nginx
        image: nginx:latest
        #command: ["/bin/sh", "-c"]
        #args:
        #- apt-get update && apt-get install -y mysql-client && nginx -g 'daemon off;'
        ports:
        - name: http
          containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: nginx
spec:
  selector:
    app: nginx
  ports:
  - name: http
    port: 8081
    targetPort: 80
    type: ClusterIP

7.2 Acceso mutuo

# Ingrese nginx para acceder a mysql 
$ mysql -h mysql -uroot -ppassword 
# Nota: mysql aquí es el nombre del servicio MySQL, no el nombre del Pod.

Supongo que te gusta

Origin blog.csdn.net/weixin_53678904/article/details/132308877
Recomendado
Clasificación