kubectl aplicar vs kubectl crear?

Resuelto Suresh Vishnoi asked hace 6 años • 11 respuestas

Lo que entendí por la documentación es que:

  • kubectl create
    
    Crea un nuevo recurso k8s en el clúster.
  • kubectl replace
    
    Actualiza un recurso en el clúster en vivo.
  • kubectl apply
    
    Si quiero crear + reemplazar ( Referencia )

mis preguntas son

  1. ¿Por qué hay tres operaciones para realizar la misma tarea en un clúster?
  2. ¿Cuáles son los casos de uso para estas operaciones?
  3. ¿En qué se diferencian entre sí bajo el capó?
Suresh Vishnoi avatar Nov 19 '17 01:11 Suresh Vishnoi
Aceptado

Esos son dos enfoques diferentes:

Gestión imperativa

kubectl createEs lo que llamamos Gestión Imperativa . En este enfoque, le dice a la API de Kubernetes lo que desea crear, reemplazar o eliminar, no cómo desea que se vea su mundo de clústeres K8.

Gestión declarativa

kubectl applyes parte del enfoque de Gestión Declarativa , donde los cambios que haya aplicado a un objeto activo (es decir, a través de scale) se " mantienen " incluso si realiza applyotros cambios en el objeto.

Puede leer más sobre la gestión imperativa y declarativa en la documentación de Kubernetes Object Management .

En laicos hacen cosas diferentes. Si el recurso existe, kubectl createse producirá un error y kubectl applyno se producirá un error.

Ara Pulido avatar Nov 20 '2017 09:11 Ara Pulido

Cuando se ejecuta en un script de CI, tendrá problemas con los comandos imperativos, ya que la creación genera un error si el recurso ya existe.

Lo que puedes hacer es aplicar (patrón declarativo) la salida de tu comando imperativo, usando --dry-run=truey -o yamllas opciones:

kubectl create whatever --dry-run=client -o yaml | kubectl apply -f -

El comando anterior no generará un error si el recurso ya existe (y lo actualizará si es necesario).

Esto es muy útil en algunos casos en los que no se puede utilizar el patrón declarativo (por ejemplo, al crear un secreto de registro de Docker).

Sébastien Dan avatar Jan 18 '2019 06:01 Sébastien Dan

Una de las mejores formas de comprender la diferencia entre patrones imperativos y declarativos para principiantes.


ingrese la descripción de la imagen aquí


Ref: https://www.digitalocean.com/community/tutorials/imperative-vs-declarative-kubernetes-management-a-digitalocean-comic


EDITAR

Hay un error, es el ejemplo mencionado en la imagen. Consulte los comentarios para una mejor comprensión.

También puede consultar el siguiente ejemplo.

Imperativo :

  • toma una sartén.
  • enciende la estufa.
  • agregue agua, azúcar, café en polvo, leche en la cacerola
  • esperar hasta la preparación del café
  • servir café en taza.

Declarativo:

  • Dile al camarero que necesitas una taza de café. Él te sirve café.

Desde la perspectiva de K8:

Imperativo: debe administrar diferentes recursos como pods, servicios, conjuntos de réplicas, etc. por su cuenta.

Declarativo: K8 se encargará de todos los recursos, todo lo que necesita es especificar cuál es su requisito real.

dahiya_boy avatar Jul 18 '2020 18:07 dahiya_boy

Solo para dar una respuesta más sencilla, según tengo entendido:

apply- realiza cambios incrementales en un objeto existente
create- crea un objeto completamente nuevo (anteriormente no existente/eliminado)


Tomando esto de un artículo de DigitalOcean vinculado al sitio web de Kubernetes:

Usamos aplicar en lugar de crear aquí para que en el futuro podamos aplicar cambios de forma incremental a los objetos del controlador de ingreso en lugar de sobrescribirlos por completo.

User9123 avatar May 03 '2019 13:05 User9123