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.