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 create
ykubectl apply
tener un efecto idéntico o no.kubectl create
arrojará un error si el recurso ya existe.kubectl apply
no lo haré La diferencia es quekubectl create
específicamente dice "crear esta cosa" mientras quekubectl apply
dice "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=true
y-o yaml
opciones: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=nginx
Solo 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
apply
likedocker-compose up -d
+ usecreate
likedocker-compose up -d --build
?Estos son comandos imperativos :
kubectl run
=kubectl create deployment
Ventajas:
Desventajas
Estas son configuraciones de objetos imprescindibles :
kubectl create -f your-object-config.yaml
kubectl delete -f your-object-config.yaml
kubectl replace -f your-object-config.yaml
Ventajas 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 create
por 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