Анализ кластера k8s и очистка диска Nexus

Сценарий описывает последовательность действий: диагностика состояния кластера, проверка Nexus, расширение PVC и настройка автоочистки репозиториев. Подходит для команд, поддерживающих сборки/деплой бэкенда в Kubernetes.
1. Подготовка доступа
- Убедитесь, что локально установлены
kubectl,docker,curl,jq. - Настройте kubeconfig с правами администратора на целевой кластер.
- Получите учётные данные администратора Nexus (UI/Admin API).
Проверка контекста kubectl
kubectl config current-context
kubectl version --client
2. Диагностика состояния Nexus в кластере
Поиск подов и сервисов
kubectl get pods -A | grep nexus
kubectl get svc -A | grep nexus
Проверка пода и логов
kubectl get pod nexus-0 -n nexus -o wide
kubectl describe pod nexus-0 -n nexus | tail -30
kubectl logs nexus-0 -n nexus --tail=100
В логах часто встречается ошибка No space left on device, если переполнено PV.
Проверка состояния PVC/PV и свободного места
kubectl get pvc -n nexus
kubectl get pv -n nexus | grep nexus
kubectl exec -n nexus nexus-0 -- df -h /nexus-data
kubectl exec -n nexus nexus-0 -- sh -c "du -sh /nexus-data/* | sort -hr | head -10"
/nexus-data/blobs, значит артефакты не чистились.3. Расширение PVC Nexus
Если StorageClass позволяет расширение (поле allowVolumeExpansion: true), можно увеличить объём.
Проверка StorageClass
kubectl get storageclass sas-disk-infra -o yaml | grep -A2 allowVolumeExpansion
Изменение размера PVC
kubectl patch pvc nexus-data-nexus-0 -n nexus \
-p '{"spec":{"resources":{"requests":{"storage":"800Gi"}}}}'
После выполнения дождитесь событий успешного расширения:
kubectl describe pvc nexus-data-nexus-0 -n nexus
В событиях появится:
ExternalExpanding– ожидание контроллераVolumeResizeSuccessfulFileSystemResizeSuccessful
Проверьте новое свободное место:
kubectl exec -n nexus nexus-0 -- df -h /nexus-data
4. Настройка очистки артефактов в Nexus
Получение списка репозиториев
Сначала пробросьте порт или выполните kubectl exec для обращения к REST API:
kubectl port-forward -n nexus svc/nexus 8081:8081
curl -s -u admin:*** http://localhost:8081/service/rest/v1/repositories \
| jq -r '.[] | "\(.name) \(.format) \(.type)"'
Создание политики Cleanup (пример для docker-repo)
curl -u admin:*** -X POST \
http://localhost:8081/service/rest/v1/security/cleanup-policies \
-H 'Content-Type: application/json' \
-d '{
"name": "docker-older-than-30d",
"format": "docker",
"criteria": {
"lastDownloaded": "30d"
},
"notes": "Удалять docker-артефакты старше 30 дней"
}'
Привязка политики к репозиторию
curl -u admin:*** -X PUT \
http://localhost:8081/service/rest/v1/repositories/docker/hosted/lkmrdvs \
-H 'Content-Type: application/json' \
-d '{
"name": "lkmrdvs",
"online": true,
"storage": {
"blobStoreName": "default",
"strictContentTypeValidation": true,
"writePolicy": "ALLOW_ONCE"
},
"cleanup": {
"policies": ["docker-older-than-30d"]
},
"docker": {
"forceBasicAuth": true,
"v1Enabled": false,
"httpPort": null,
"httpsPort": 8443,
"subdomain": null
}
}'
Убедитесь, что параметры соответствуют текущей конфигурации репозитория.
Запуск задачи Cleanup вручную
curl -u admin:*** -X POST \
http://localhost:8081/service/rest/v1/tasks \
-H 'Content-Type: application/json' \
-d '{
"name": "docker-cleanup-now",
"typeId": "repositoryCleanup",
"schedule": "manual",
"properties": {
"repositoryName": "lkmrdvs"
}
}'
После создания выполните задачу:
curl -u admin:*** -X POST \
http://localhost:8081/service/rest/v1/tasks/{taskId}/run
Task ID можно получить из ответа на предыдущий POST или из UI (админ-панель → System → Tasks).
5. Скрипт автоматизации очистки
Пример bash-скрипта, который удаляет docker-теги старше 30 дней по REST API:
#!/usr/bin/env bash
NEXUS_URL="https://nexus.example.com"
USER="admin"
PASS="***"
REPO="lkmrdvs"
OLDER_THAN="30d"
curl -s -u "$USER:$PASS" \
"$NEXUS_URL/service/rest/v1/components?repository=$REPO" |
jq -r '.items[] | "\(.id) \(.assets[0].downloadUrl) \(.assets[0].lastDownloaded)"' |
while read -r ID URL LAST; do
if [[ -z "$LAST" ]]; then continue; fi
if [[ $(date -j -f "%Y-%m-%dT%H:%M:%S%z" "$LAST" +%s) -lt $(date -v-"${OLDER_THAN}" +%s) ]]; then
echo "Deleting $ID ($URL, last downloaded $LAST)"
curl -u "$USER:$PASS" -X DELETE \
"$NEXUS_URL/service/rest/v1/components/$ID"
fi
done
6. Контроль после очистки
- Проверить
df -h /nexus-data— убедиться, что свободное место выросло. - Запустить тестовую сборку/деплой, чтобы удостовериться, что образы по-прежнему доступны.
- Настроить мониторинг PVC (Prometheus/Grafana) и оповещения при достижении порога (например, 80%).
Заключение
Комбинированный подход — расширение диска + автоматическая очистка старых артефактов — позволяет избежать повторного переполнения Nexus и падения CI/CD-пайплайнов. Регулярно проверяйте состояние PVC, ведите журнал очисток и храните скрипты с настройками в репозитории инфраструктуры.
