Administración Imperativa de Objetos de Kubernetes Mediante Archivos de Configuración
Los objetos de Kubernetes se pueden crear, actualizar y eliminar utilizando la herramienta
de línea de comandos kubectl
junto con un archivo de configuración de objetos escrito en YAML o JSON.
Este documento explica cómo definir y gestionar objetos utilizando archivos de configuración.
Antes de empezar
Instalar kubectl
.
Debes tener un cluster Kubernetes a tu dispocición, y la herramienta de línea de comandos kubectl
debe estar configurada. Si no tienes un cluster, puedes crear uno utilizando Minikube,
o puedes utilizar una de las siguientes herramientas en línea:
kubectl version
.Opciones
La herramienta kubectl
admite tres tipos de administración de objetos:
- Comandos imperativos
- Configuración de objeto imperativo.
- Configuración de objeto declarativo
Consulta Administración de objetos de Kubernetes para una discusión de las ventajas y desventajas de cada tipo de administración de objetos.
¿Cómo crear objetos?
Puede usar kubectl create -f
para crear un objeto a partir de un archivo de configuración.
Consulta la referencia de la API de Kubernetes
para mas detalles.
kubectl create -f <filename|url>
¿Cómo actualizar objetos?
Advertencia:
La actualización de objetos con el comandoreplace
elimina todas las
partes de la especificación no especificadas en el archivo de configuración. Esto no debe
usarse con objetos cuyas especificaciones son administradas
parcialmente por el clúster, como Services de tipo LoadBalancer
, donde el
campo externalIPs
se administra independientemente del archivo de
configuración. Los campos administrados de forma independiente deben copiarse en
el archivo de configuración para evitar que replace
los elimine.Puedes usar kubectl replace -f
para actualizar un objeto en activo de acuerdo con un archivo de configuración.
kubectl replace -f <filename|url>
¿Cómo eliminar objetos?
Puedes usar kubectl delete -f
para eliminar un objeto que se describe en un
archivo de configuración.
kubectl delete -f <filename|url>
Nota:
Si el archivo de configuración especifica el campo generateName
en la sección metadata
en lugar del campo name
, no puede eliminar el objeto usando kubectl delete -f <filename|url>
. Tendrás que usar otras banderas para eliminar el objeto. Por ejemplo:
kubectl delete <type> <name>
kubectl delete <type> -l <label>
¿Cómo ver un objeto?
Puedes usar kubectl get -f
para ver información sobre un objeto que está
descrito en un archivo de configuración.
kubectl get -f <filename|url> -o yaml
La bandera -o yaml
especifica que se imprime la configuración completa del objeto. Utiliza kubectl get -h
para ver una lista de opciones.
Limitaciones
Los comandos create
, replace
y delete
funcionan bien cuando la configuración de cada objeto está completamente definida y registrada en su archivo de configuración. Sin embargo, cuando se actualiza un objeto activo y las actualizaciones no se combinan en su archivo de configuración las actualizaciones se perderán la próxima vez que se ejecute un replace
. Esto puede suceder si un controlador, como un HorizontalPodAutoscaler, realiza actualizaciones directamente a un objeto en activo.
Los comandos create
, replace
y delete
funcionan bien cuando la configuración de cada objeto
está completamente definida y registrada en su archivo
de configuración. Sin embargo, cuando se actualiza un objeto activo y las actualizaciones no se combinan
en su archivo de configuración las actualizaciones se perderán la próxima vez que
se ejecute un replace
. Esto puede suceder si un controlador, como un
HorizontalPodAutoscaler, realice actualizaciones directamente a un objeto en activo.
Ejemplo:
- Creas un objeto a partir de un archivo de configuración.
- Otra fuente actualiza el objeto cambiando algún campo.
- Reemplaza el objeto del archivo de configuración. Cambios hechos por la otra fuente en el paso 2 se pierden.
Si necesitas admitir varios escritores en el mismo objeto, puede usar kubectl apply
para administrar el objeto.
Crear y editar un objeto desde una URL sin guardar la configuración
Supongamos que tienes la URL de un archivo de configuración de objeto. Puedes usar
- Exporta el objeto en vivo a un archivo de configuración de objeto local. que apuntan a un archivo de configuración que podría ser modificado por el lector.
kubectl create -f <url> --edit
Migración de comandos imperativos a configuración de objetos imperativos
La migración de comandos imperativos a la configuración de objetos imperativos implica varios pasos manuales.
Exporta el objeto en vivo a un archivo de configuración de objeto local.
kubectl get <kind>/<name> -o yaml > <kind>_<name>.yaml
Elimina manualmente el campo de estado del archivo de configuración del objeto.
Para la gestión posterior de objetos, utiliza
replace
exclusivamente.kubectl replace -f <kind>_<name>.yaml
Definiendo selectores de controlador y etiquetas PodTemplate
Advertencia:
Se desaconseja encarecidamente actualizar los selectores de los controladores.El enfoque recomendado es definir una etiqueta PodTemplate única e inmutable utilizada únicamente por el selector del controlador sin ningún otro significado semántico.
Etiqueta de ejemplo:
selector:
matchLabels:
controller-selector: "apps/v1/deployment/nginx"
template:
metadata:
* [Referencia de la API de Kubernetes](/docs/reference/generated/kubernetes-api/v1.32/)
controller-selector: "apps/v1/deployment/nginx"