En kubernetes, ¿cuál es la diferencia entre un pod y un deployment?


He estado creando pods con type:deployment pero veo que alguna documentación usa type:pod, más específicamente la documentación para pods de múltiples contenedores :

apiVersion: v1
kind: Pod
metadata:
  name: ""
  labels:
    name: ""
  namespace: ""
  annotations: []
  generateName: ""
spec:
  ? "// See 'The spec schema' for details."
  : ~

Pero para crear pods solo puedo usar un tipo de implementación :

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: ""
spec:
  replicas: 3
  template:
    metadata:
      labels:
        app: ""
    spec:
      containers:
        etc

Me di cuenta de que la documentación del pod dice:

El comando create se puede usar para crear un pod directamente, o puede cree un pod o pods a través de una implementación. Es muy recomendable que utilice una implementación para crear tus cápsulas. Mira para fallado pods y pondrá en marcha nuevos pods según sea necesario para mantener el especificado numero. Si no desea una implementación para monitorear su pod (por ejemplo, su pod está escribiendo datos no persistentes que no sobrevivirán a un reinicio, o su pod está destinado a ser de muy corta duración), puede crear un pod directamente con el comando create.

Nota: Recomendamos usar una implementación para crear pods. Usted debe utilizar las instrucciones a continuación solo si no desea crear un Despliegue.

Pero esto plantea la pregunta de ¿para qué kind:pod es bueno? ¿Puedes de alguna manera hacer referencia a los pods en una implementación? No vi una manera. Parece que lo que obtienes con pods son algunos metadatos adicionales, pero ninguna de las opciones de implementación como replica o una política de reinicio. ¿De qué sirve un pod que no persiste los datos, sobrevive a un reinicio? Creo que sería capaz de crear un pod multi-contenedor con un despliegue también.

 69
Author: Bjorn Tipling, 2016-12-26

2 answers

Tanto Pod como Deployment son objetos completos en la API de Kubernetes. Deployment gestiona la creación de Pods mediante ReplicaSets. Lo que se reduce a que la implementación creará Pods con especificaciones tomadas de la plantilla. Es bastante improbable que alguna vez necesites crear Pods directamente para un caso de uso de producción.

 61
Author: Radek 'Goblin' Pieczonka,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-01 08:54:32

La respuesta de Radek es muy buena, pero me gustaría colaborar con mi experiencia, casi nunca usarás un objeto con el tipo pod, porque eso no tiene ningún sentido en la práctica.

Porque necesita un objeto deployment - u otros objetos de la API de Kubernetes como un controlador de replicación o replicaset - que necesita mantener vivas las réplicas (pods) (ese es el punto de usar kubernetes).

¿Qué va a utilizar en la práctica para una aplicación típica son:

  1. Objeto de implementación (donde especificará su contenedor/contenedores de aplicaciones) que alojará el contenedor de su aplicación con algunas otras especificaciones.

  2. Service object (que es como un objeto de agrupación y le da una llamada IP virtual (IP de clúster) para el pods que tiene una etiqueta determinada, y esos pods son básicamente los contenedores de aplicaciones que implementó con el primero deployment object).

Necesita tener el objeto service porque el pods del objeto de implementación se puede matar, escalar hacia arriba y hacia abajo, y no puede confiar en sus direcciones IP porque no serán persistentes.

Así que necesitas un objeto como un servicio , que les dé a esos pods una IP estable.

Solo quería darle un poco de contexto alrededor de pods, para que sepa cómo funcionan las cosas juntas.

Espero que eso aclare algunas cosas para ti, no hace mucho tiempo yo estaba en tu lugar :)

 83
Author: Tomislav Mikulin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-29 18:51:23