Уменьшение размера тома сервиса Метрики без потери данных
Чтобы уменьшить размер тома сервиса Метрики без потери данных:
- Отмонтируйте том сервиса Метрики:
- Получите имя тома, используемого сервисом Метрики. В дальнейшем имя тома понадобится для поиска данных тома и реплик тома. Имена реплик начинаются с имени тома.
sudo k0s kubectl get pvc metrics -n kuma -o json | jq '.spec.volumeName' - Останавите сервис Метрики.
sudo k0s kubectl scale deployment/metrics -n kuma --replicas=0 - Убедитесь, что под сервиса Метрики metrics-<UID> пропал (отсутствует в выводе команды).
sudo k0s kubectl get pods -n kuma - Если под не пропадает в течение нескольких минут, выполните принудительное удаление. Имя пода нужно взять из вывода предыдущей команды.
sudo k0s kubectl delete pod metrics-<UID> -n kuma --force - Убедитесь, что том сервиса Метрики перешел в состояние detached.
sudo k0s kubectl get volume <имя_тома> -n longhorn-system -o json | jq '.status.state'
- Получите имя тома, используемого сервисом Метрики. В дальнейшем имя тома понадобится для поиска данных тома и реплик тома. Имена реплик начинаются с имени тома.
- Создайте временную задачу:
- Создайте временную задачу с именем tmp-metrics-job в пространстве имен kuma и подключите том сервиса Метрики.
sudo k0s kubectl apply -f - <<EOF
---
apiVersion: batch/v1
kind: Job
metadata:
name: tmp-metrics-job
namespace: kuma
spec:
ttlSecondsAfterFinished: 300
backoffLimit: 0
parallelism: 1
completions: 1
template:
spec:
containers:
- name: tmp-container
image: docker.io/library/busybox:1.35.0
imagePullPolicy: IfNotPresent
command: ["/bin/sh"]
args:
- -c
- >-
sleep 36000
volumeMounts:
- mountPath: /metrics
name: metrics
restartPolicy: Never
volumes:
- name: metrics
persistentVolumeClaim:
claimName: metrics
EOF
- Определите имя рабочего узла, на котором запущена временная задача.
sudo k0s kubectl get pods -n kuma -o wide | grep tmp-metrics - На этом рабочем узле определите точку монтирования.
sudo lsblk | grep "<имя_тома>" - Перейдите в найденную директорию вида /var/lib/k0s/kubelet/pods/....../mount. Содержимое выглядит примерно следующим образом:
ls -al
total 48
drwxrwsr-x 9 root 65532 4096 Aug 26 10:36 .
drwxr-x--- 3 root root 4096 Aug 26 11:08 ..
drwx--S--- 2 65532 65532 4096 Aug 26 10:36 certificates
drwx--S--- 2 65532 65532 4096 Aug 26 10:36 dashboards
drwxrwsr-x 8 root 65532 4096 Aug 26 10:34 data
drwx--S--- 2 65532 65532 4096 Aug 26 10:36 log
drwxrws--- 2 root 65532 16384 Aug 26 10:34 lost+found
drwx--S--- 2 65532 65532 4096 Aug 26 10:36 rules
drwx--S--- 2 65532 65532 4096 Aug 26 10:36 tmp
- Создайте временную задачу с именем tmp-metrics-job в пространстве имен kuma и подключите том сервиса Метрики.
- Копируйте данные:
- Копируйте из директории вида /var/lib/k0s/kubelet/pods/....../mount все данные, кроме каталогов lost+found и tmp во временную директорию с сохранением прав доступа на каталоги и файлы.
- После копирования перейдите из точки монтирования в / или /home, чтобы не блокировать последующее демонтирование тома.
- Удалите временную задачу, под, PVC и том сервиса Метрики:
- Удалите временную задачу с помощью следующей команды:
sudo k0s kubectl delete job tmp-metrics-job -n kuma - Убедитесь, что под временной задачи metrics-<UID> отсутствует в выводе команды.
sudo k0s kubectl get pods -n kuma - Если под не пропадает в течение нескольких минут, выполните принудительное удаление. Имя пода нужно взять из вывода предыдущей команды.
sudo k0s kubectl delete pod tmp-metrics-job-<UID> -n kuma --force - Убедитесь, что том сервиса Метрики перешел в состояние detached.
sudo k0s kubectl get volume <имя_тома> -n longhorn-system -o json | jq '.status.state' - Удалите PVC сервиса Метрики.
sudo k0s kubectl delete pvc metrics -n kuma - Убедитесь, что том сервиса Метрики отсутствует в выводе команды.
sudo k0s kubectl get volume <имя_тома> -n longhorn-systemНа всех рабочих узлах при этом в директории /opt/longhorn/replicas должны пропасть директории, имя которых начинается с имени удаленного тома. Если этого не произошло, то их нужно удалить вручную. Важно не удалить по ошибке реплики, относящиеся к другим томам.
- Удалите временную задачу с помощью следующей команды:
- Создайте новый том:
- Создайте PVC для сервиса Метрики, предварительно исправив размер в строке storage на нужное значение.
sudo k0s kubectl apply -f - <<EOF---apiVersion: v1kind: PersistentVolumeClaimmetadata:name: metricsnamespace: kumaspec:accessModes:- ReadWriteOncestorageClassName: kuma-network-storageresources:requests:storage: 30GiEOF - Заново получите имя тома, используемого сервисом Метрики.
sudo k0s kubectl get pvc metrics -n kuma -o json | jq '.spec.volumeName' - Снова создайте временную задачу с именем tmp-metrics-job в пространстве имен kuma и подключите новый том сервиса Метрики.
sudo k0s kubectl apply -f - <<EOF
---
apiVersion: batch/v1
kind: Job
metadata:
name: tmp-metrics-job
namespace: kuma
spec:
ttlSecondsAfterFinished: 300
backoffLimit: 0
parallelism: 1
completions: 1
template:
spec:
containers:
- name: tmp-container
image: docker.io/library/busybox:1.35.0
imagePullPolicy: IfNotPresent
command: ["/bin/sh"]
args:
- -c
- >-
sleep 36000
volumeMounts:
- mountPath: /metrics
name: metrics
restartPolicy: Never
volumes:
- name: metrics
persistentVolumeClaim:
claimName: metrics
EOF
- Определите имя рабочего узла, на котором запущена временная задача.
sudo k0s kubectl get pods -n kuma -o wide | grep tmp-metrics - На этом рабочем узле определите точку монтирования.
sudo lsblk | grep "<имя_тома>" - Перейдите в найденную директорию вида /var/lib/k0s/kubelet/pods/....../mount.
- Создайте PVC для сервиса Метрики, предварительно исправив размер в строке storage на нужное значение.
- Копируйте данные:
- Копируйте в найденную директорию вида /var/lib/k0s/kubelet/pods/....../mount ранее сохраненные во временной директории данные сервиса Метрики с сохранением владельцев и прав файлов. В результате содержимое директории будет примерно следующим.
ls -al
total 48
drwxrwsr-x 9 root 65532 4096 Aug 26 10:36 .
drwxr-x--- 3 root root 4096 Aug 26 11:08 ..
drwx--S--- 2 65532 65532 4096 Aug 26 10:36 certificates
drwx--S--- 2 65532 65532 4096 Aug 26 10:36 dashboards
drwxrwsr-x 8 root 65532 4096 Aug 26 10:34 data
drwx--S--- 2 65532 65532 4096 Aug 26 10:36 log
drwxrws--- 2 root 65532 16384 Aug 26 10:34 lost+found
drwx--S--- 2 65532 65532 4096 Aug 26 10:36 rules
drwx--S--- 2 65532 65532 4096 Aug 26 10:36 tmp
- После копирования перейдите из точки монтирования в / или /home, чтобы не блокировать последующее демонтирование тома.
- Копируйте в найденную директорию вида /var/lib/k0s/kubelet/pods/....../mount ранее сохраненные во временной директории данные сервиса Метрики с сохранением владельцев и прав файлов. В результате содержимое директории будет примерно следующим.
- Удалите временную задачу, под, PVC и том сервиса Метрики:
- Удалите временную задачу с помощью следующей команды.
sudo k0s kubectl delete job tmp-metrics-job -n kuma - Убедитесь, что под временной задачи metrics-<UID> отсутствует в выводе команды.
sudo k0s kubectl get pods -n kuma - Если под не пропадает в течение нескольких минут, выполните форсированное удаление. Имя пода нужно взять из вывода предыдущей команды.
sudo k0s kubectl delete pod tmp-metrics-job-<UID> -n kuma --force - Убедитесь, что том сервиса Метрики перешел в состояние detached.
sudo k0s kubectl get volume <имя_тома> -n longhorn-system -o json | jq '.status.state'
- Удалите временную задачу с помощью следующей команды.
- Запустите сервис Метрики:
- Запустите сервис Метрики с помощью следующей команды, увеличив число реплик до 1.
sudo k0s kubectl scale deployment/metrics -n kuma --replicas=1 - Убедитесь, что под сервиса Метрики запущен и метрики доступны в веб-интерфейсе KUMA.
- Запустите сервис Метрики с помощью следующей команды, увеличив число реплик до 1.
Уменьшение размера тома сервиса Метрики без потери данных выполнено.