run nodeselector logs delete kubernetes kubectl

kubernetes - nodeselector - kubectl apply vs kubectl create?



kubernetes nodeselector (4)

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 las --dry-run=true y -o yaml :

kubectl create whatever --dry-run=true -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 puede utilizar el patrón declarativo (por ejemplo, al crear un secreto de registro de acopladores).

Lo que entendí por la documentación es que kubectl apply = kubectl create + kubectl replace . Reference

Entiendo que si quiero crear un nuevo recurso k8s en el clúster, debería usar la operación de creación de kubectl . Ahora, si deseo actualizar algo en un recurso k8s en vivo, debería usar la operación de reemplazo de kubectl .

Si deseo realizar ambas operaciones (crear un nuevo recurso k8s y actualizar los recursos k8s en vivo), entonces debería usar la operación de aplicación kubectl

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ó?

En este momento estoy usando la operación de creación de kubectl para crear nuevos recursos en el clúster. Gracias


Esos son dos enfoques diferentes. kubectl create es lo que llamamos gestión imperativa . Con este enfoque, le dice a la API de Kubernetes qué desea crear, reemplazar o eliminar, no cómo desea que se vea su mundo de clúster K8.

kubectl apply es parte del enfoque de Gestión declarativa , donde los cambios que puede haber aplicado a un objeto vivo (es decir, a través de la scale ) se mantienen incluso si apply otros cambios al objeto.

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


La explicación a continuación de la documentación oficial me ayudó a entender que kubectl apply .

Este comando comparará la versión de la configuración que está presionando con la versión anterior y aplicará los cambios que haya realizado, sin sobrescribir ningún cambio automático a las propiedades que no haya especificado.

kubectl create por otro lado, creará recursos (no deberían existir).


Solo para dar una respuesta más directa, desde mi entendimiento:

apply : realiza cambios incrementales
create : sobrescribe todos los cambios


Tomando esto de un artículo de DigitalOcean que fue vinculado por el sitio web de Kubernetes:

Usamos aplicar en lugar de crear aquí para que en el futuro podamos aplicar cambios incrementales a los objetos del Controlador de Ingreso en lugar de sobrescribirlos por completo.