pods nodeselector name deployment kubernetes containers google-kubernetes-engine kubernetes-pod

deployment - nodeselector - kubernetes rollout



Cómo configurar una Implementación Multi-Pod de Kubernetes (2)

La respuesta de pagids tiene la mayoría de los conceptos básicos. Debe crear 4 Deployments para su escenario. Cada implementación creará un ReplicaSet que programa y supervisa la colección de PODs para la Deployment .

Es muy probable que cada Deployment también requiera un Service delante de él para tener acceso. Por lo general, creo un solo archivo yaml que tiene una Deployment y el Service correspondiente. Aquí hay un ejemplo para un nginx.yaml que uso:

apiVersion: v1 kind: Service metadata: annotations: service.alpha.kubernetes.io/tolerate-unready-endpoints: "true" name: nginx labels: app: nginx spec: type: NodePort ports: - port: 80 name: nginx targetPort: 80 nodePort: 32756 selector: app: nginx --- apiVersion: extensions/v1beta1 kind: Deployment metadata: name: nginxdeployment spec: replicas: 3 template: metadata: labels: app: nginx spec: containers: - name: nginxcontainer image: nginx:latest imagePullPolicy: Always ports: - containerPort: 80

Aquí algunos datos adicionales para aclarar:

  • Un POD no es una unidad escalable. Un Deployment que programa los PODs es.
  • Una Deployment pretende representar un solo grupo de POD que cumplen un solo propósito juntos.
  • Puede tener muchas Deployments trabajando juntas en la red virtual del clúster.
  • Para acceder a una Deployment que puede consistir en muchos PODs ejecutan en diferentes nodos, debe crear un Servicio.
  • Las implementaciones están destinadas a contener servicios sin estado. Si necesita almacenar un estado, debe crear StatefulSet lugar (por ejemplo, para un servicio de base de datos).

Me gustaría implementar un grupo de aplicaciones gestionando mi implementación a través del objeto de implementación de k8s. La documentación me tiene extremadamente confundido. Mi diseño básico tiene los siguientes componentes que se escalan de forma independiente:

  1. Servidor API
  2. Servidor de interfaz de usuario
  3. Redis caché
  4. Temporizador / Servidor de tareas programadas

Técnicamente, los 4 anteriores pertenecen a pods separados que se escalan independientemente.

Mis preguntas son:

  1. ¿Debo crear archivos pod.yml y luego hacer referencia a ellos en el archivo pod.yml o puedo un archivo de implementación también incrustar definiciones de pod?
  2. La documentación de K8 parece implicar que la parte de spec de la Deployment es equivalente a la definición de un pod. ¿Es eso correcto? ¿Qué sucede si deseo describir de forma declarativa las implementaciones de varios pods? ¿Necesito múltiples archivos deploy.yml?

Puede usar la referencia de la API de Kubernetes para la Deployment y encontrará que el campo spec -> template es de tipo PodTemplateSpec junto con el comentario relacionado ( Template describe los pods que se crearán ) . Responde sus preguntas. Por supuesto, se puede encontrar una descripción más extensa en la guía del usuario de Implementación .

Para responder tu pregunta...

1) Los Pods son administrados por la Deployment y definirlos por separado no tiene sentido, ya que son creados a pedido por la Implementación. Tenga en cuenta que podría haber más réplicas del mismo tipo de pod.

2) Para cada una de las aplicaciones en su lista, tendría que definir una Deployment , lo que también tiene sentido cuando se trata de diferencia de conteos de réplicas y despliegues de aplicaciones.

3) no lo ha pedido, pero está relacionado : junto con las Deployments separadas, cada una de sus aplicaciones también necesitará un Service dedicado para que los demás puedan acceder a él.