Lo que entendí por la documentación es que:
- crear kubectl = Crea un nuevo recurso k8s en el clúster
- kubectl replace = Actualiza un recurso en el clúster en vivo
- kubectl apply = Si quiero hacer crear + reemplazar ( Referencia )
Mis preguntas son
- ¿Por qué hay tres operaciones para hacer la misma tarea en un clúster?
- ¿Cuáles son los casos de uso para estas operaciones?
- ¿Cómo se diferencian entre sí debajo del capó?
kubernetes
kubectl
Suresh Vishnoi
fuente
fuente

kubectl createykubectl applytener un efecto idéntico o no.kubectl createarrojará un error si el recurso ya existe.kubectl applyno lo haré La diferencia es quekubectl createespecíficamente dice "crear esta cosa" mientras quekubectl applydice "hacer lo que sea necesario (crear, actualizar, etc.) para que se vea así".Cuando se ejecuta en un script de CI, tendrá problemas con los comandos imperativos, ya que crear genera un error si el recurso ya existe.
Lo que puede hacer es aplicar (patrón declarativo) la salida de su comando imperativo, usando
--dry-run=truey-o yamlopciones: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 puede utilizar el patrón declarativo (por ejemplo, al crear un secreto de registro de acopladores).
fuente
kubectl delete deployment nginx --ignore-not-found; kubectl create deployment nginx --image=nginxSolo para dar una respuesta más directa, desde mi entendimiento:
apply- realiza cambios incrementales en un objeto existentecreate- crea un objeto completamente nuevo (previamente inexistente / eliminado)Tomando esto de un artículo de DigitalOcean que fue vinculado por el sitio web de Kubernetes:
fuente
applylikedocker-compose up -d+ usecreatelikedocker-compose up -d --build?Estos son comandos imperativos :
kubectl run=kubectl create deploymentVentajas:
Desventajas
Estas son configuraciones de objetos imprescindibles :
kubectl create -f your-object-config.yamlkubectl delete -f your-object-config.yamlkubectl replace -f your-object-config.yamlVentajas en comparación con los comandos imperativos:
Desventajas en comparación con los comandos imperativos:
Ventajas en comparación con la configuración de objetos declarativos:
Desventajas en comparación con la configuración de objetos declarativos:
Estas son configuraciones de objetos declarativos
kubectl diff -f configs/kubectl apply -f configs/Ventajas en comparación con la configuración de objeto imperativo:
Desventajas en comparación con la configuración imperativa de objetos:
fuente
La explicación a continuación de la documentación oficial me ayudó a entender
kubectl apply.kubectl createpor otro lado creará (debería ser inexistente) recursos.fuente
kubectl create puede funcionar con un archivo de configuración de objeto a la vez. Esto también se conoce como gestión imperativa.
kubectl create -f filename | url
kubectl apply funciona con directorios y sus subdirectorios que contienen archivos yaml de configuración de objetos. Esto también se conoce como gestión declarativa. Se pueden recoger múltiples archivos de configuración de objetos de directorios. kubectl apply -f directorio /
Detalles:
https://kubernetes.io/docs/tasks/manage-kubernetes-objects/declarative-config/ https://kubernetes.io/docs/tasks/manage-kubernetes-objects/imperative-config/
fuente
Amamos a Kubernetes porque una vez que les damos lo que queremos pasa a descubrir cómo lograrlo sin nuestra participación.
"crear" es como jugar a DIOS tomando las cosas en nuestras propias manos. Es bueno para la depuración local cuando solo desea trabajar con el POD y no le importa el Controlador de implementación / replicación.
"aplicar" es jugar según las reglas. "aplicar" es como una herramienta maestra que te ayuda a crear y modificar y no requiere nada de ti para administrar los pods.
fuente