Tengo un total de 2030 pvc's y quiero borrar 2000 pvc's de ellos y quedarme con los 30.
Esos 30 pvc son los últimos y solo tienen menos de 2 días... por eso no quiero eliminarlos. Los otros 2000 pvc tienen más de 2 días.
Quiero crear un script que se ejecute automáticamente para eliminar los pvc que tienen más de 2 días.
algún ejemplo de mis pvcs:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE data-14353-postgresql-0 Bound pvc-1a6 8Gi RWO gp2 2d15h data-14354-postgresql-0 Bound pvc-2d6 8Gi RWO gp2 16d data-14358-postgresql-0 Bound pvc-9dc 8Gi RWO gp2 127m data-14367-postgresql-0 Bound pvc-2eb 8Gi RWO gp2 65h data-14370-postgresql-0 Bound pvc-90d 8Gi RWO gp2 56dahora, como pueden ver, tengo una etiqueta de EDAD mixta.
Se pueden eliminar usando:
kubectl delete pvcpero esto borrará todo... ¡y no quiero borrarlo todo!
TL:RD;
kubectl get pvc --sort-by=.metadata.creationTimestamp --no-headers | tac | cut -d ' ' -f 1 | sed -n 31,2000p | xargs kubectl delete pvcExpliquemos por partes:
kubectl get pvc --sort-by=.metadata.creationTimestamp --no-headers :
Esta parte enumera los PVC en orden descendente sin la fila de encabezado
tac
invertir la salida y producir orden ascendente
cut -d ' ' -f 1
Obtenga la primera columna que tiene los nombres de los PVC.
sed -n 31,2000p
Imprime todos los PVC después de la línea 30 que contendrá sus 30 PVC que tienen menos de 2 días de antigüedad
p - Imprime el espacio del patrón (a la salida estándar). Este comando generalmente solo se usa junto con la opción de línea de comando -n.
n: si la impresión automática no está deshabilitada, imprima el espacio del patrón y luego, independientemente, reemplace el espacio del patrón con la siguiente línea de entrada. Si no hay más entradas, sed sale sin procesar más comandos.
xargs kubectl delete pvc
Elimina tus PVC.
No hay una manera fácil de hacer esto simplemente usando un comando kubectl , solo es fácil de operar de esa manera cuando puede usar etiquetas de una buena manera.
Pero puede hacerlo mediante programación, utilizando un lenguaje de programación o secuencias de comandos contra el servidor API de Kubernetes.
Tal vez, en este caso, puede agregar manualmente una etiqueta a los 30 PVC que desea conservar y luego eliminar los PVC que no tienen esta etiqueta.
Si ha logrado etiquetar los PVC que desea conservar, puede usar, por ejemplo
kubectl delete pvc -l !keepObtenga más información sobre cómo agregar etiquetas y seleccionar recursos usando etiquetas en Etiquetas y selectores