Работа со снапшотами
В Managed Service for Kubernetes доступны снапшоты — копии дисков PersistentVolume на определенный момент времени. Подробнее о механизме снапшотов см. в документации Kubernetes
Чтобы создать снапшот, а потом восстановить его:
Если созданные ресурсы вам больше не нужны, удалите их.
Перед началом работы
-
Создайте ресурсы Kubernetes:
ВручнуюTerraform-
Создайте группы безопасности для кластера Managed Service for Kubernetes и входящих в него групп узлов.
Важно
От настройки групп безопасности зависит работоспособность и доступность кластера, а также запущенных в нем сервисов и приложений.
-
Создайте кластер Managed Service for Kubernetes и группу узлов любой подходящей конфигурации. При создании укажите группы безопасности, подготовленные ранее.
-
Если у вас еще нет Terraform, установите его.
-
Получите данные для аутентификации. Вы можете добавить их в переменные окружения или указать далее в файле с настройками провайдера.
-
Настройте и инициализируйте провайдер. Чтобы не создавать конфигурационный файл с настройками провайдера вручную, скачайте его
. -
Поместите конфигурационный файл в отдельную рабочую директорию и укажите значения параметров. Если данные для аутентификации не были добавлены в переменные окружения, укажите их в конфигурационном файле.
-
Скачайте в ту же рабочую директорию файл конфигурации кластера k8s-cluster.tf
. В файле описаны:-
Сеть.
-
Подсеть.
-
Кластер Managed Service for Kubernetes.
-
Сервисный аккаунт, необходимый для создания кластера и группы узлов Managed Service for Kubernetes.
-
Группы безопасности, которые содержат необходимые правила для кластера Managed Service for Kubernetes и входящих в него групп узлов.
Важно
От настройки групп безопасности зависит работоспособность и доступность кластера, а также запущенных в нем сервисов и приложений.
-
-
Укажите в файле конфигурации идентификатор каталога.
-
Проверьте корректность файлов конфигурации Terraform с помощью команды:
terraform validate
Если в файлах конфигурации есть ошибки, Terraform на них укажет.
-
Создайте необходимую инфраструктуру:
-
Выполните команду для просмотра планируемых изменений:
terraform plan
Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply
-
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
В указанном каталоге будут созданы все требуемые ресурсы. Проверить появление ресурсов и их настройки можно в консоли управления
. -
-
-
Установите kubectl
и настройте его на работу с созданным кластером.
Подготовьте тестовое окружение
Для проверки работы со снапшотами будет создан PersistentVolumeClaim и под, имитирующий рабочую нагрузку.
-
Создайте файл
01-pvc.yaml
с манифестомPersistentVolumeClaim
:--- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-dynamic spec: accessModes: - ReadWriteOnce storageClassName: yc-network-hdd resources: requests: storage: 5Gi
-
Создайте
PersistentVolumeClaim
:kubectl apply -f 01-pvc.yaml
-
Убедитесь, что
PersistentVolumeClaim
создан и имеет состояниеPending
:kubectl get pvc pvc-dynamic
-
Создайте файл
02-pod.yaml
с манифестом подаpod-source
:--- apiVersion: v1 kind: Pod metadata: name: pod-source spec: containers: - name: app image: ubuntu command: ["/bin/sh"] args: ["-c", "while true; do echo $(date -u) >> /data/out.txt; sleep 5; done"] volumeMounts: - name: persistent-storage mountPath: /data volumes: - name: persistent-storage persistentVolumeClaim: claimName: pvc-dynamic
Контейнер пода будет записывать текущие дату и время в файл
/data/out.txt
. -
Создайте под
pod-source
:kubectl apply -f 02-pod.yaml
-
Убедитесь, что под перешел в состояние
Running
:kubectl get pod pod-source
-
Убедитесь, что в файл
/data/out.txt
попадают записи даты и времени. Для этого выполните команду на поде:kubectl exec pod-source -- tail /data/out.txt
Результат:
Thu Feb 3 04:55:21 UTC 2022 Thu Feb 3 04:55:26 UTC 2022 ...
Создайте снапшот
-
Создайте файл
03-snapshot.yaml
с манифестом снапшота :--- apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshot metadata: name: new-snapshot-test spec: volumeSnapshotClassName: yc-csi-snapclass source: persistentVolumeClaimName: pvc-dynamic
-
Создайте снапшот:
kubectl apply -f 03-snapshot.yaml
-
Убедитесь, что снапшот создан:
kubectl get volumesnapshots.snapshot.storage.k8s.io
-
Убедитесь, что создан VolumeSnapshotContent
:kubectl get volumesnapshotcontents.snapshot.storage.k8s.io
Восстановите объекты из снапшота
При восстановлении из снапшота
- Объект
PersistentVolumeClaim
с именемpvc-restore
. - Под с именем
pod-restore
, содержащий записи в файле/data/out.txt
.
Чтобы восстановить снапшот:
-
Создайте файл
04-restore-snapshot.yaml
с манифестом новогоPersistentVolumeClaim
:--- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-restore spec: storageClassName: yc-network-hdd dataSource: name: new-snapshot-test kind: VolumeSnapshot apiGroup: snapshot.storage.k8s.io accessModes: - ReadWriteOnce resources: requests: storage: 10Gi
Совет
Вы можете изменить размер создаваемого
PersistentVolumeClaim
. Для этого укажите нужный размер в значении настройкиspec.resources.requests.storage
. -
Создайте новый
PersistentVolumeClaim
:kubectl apply -f 04-restore-snapshot.yaml
-
Убедитесь, что
PersistentVolumeClaim
создан и имеет состояниеPending
:kubectl get pvc pvc-restore
-
Создайте файл
05-pod-restore.yaml
с манифестом нового подаpod-restore
:--- apiVersion: v1 kind: Pod metadata: name: pod-restore spec: containers: - name: app-restore image: ubuntu command: ["/bin/sh"] args: ["-c", "while true; do sleep 5; done"] volumeMounts: - name: persistent-storage-r mountPath: /data volumes: - name: persistent-storage-r persistentVolumeClaim: claimName: pvc-restore
Контейнер нового пода не будет производить никаких действий с файлом
/data/out.txt
. -
Создайте под
pod-restore
:kubectl apply -f 05-pod-restore.yaml
-
Убедитесь, что под перешел в состояние
Running
:kubectl get pod pod-restore
-
Убедитесь, что новый
PersistentVolumeClaim
перешел в состояниеBound
:kubectl get pvc pvc-restore
-
Убедитесь, что файл
/data/out.txt
на новом поде содержит записи, которые контейнер подаpod-source
записал в файл до создания снапшота:kubectl exec pod-restore -- tail /data/out.txt
Результат:
Thu Feb 3 04:55:21 UTC 2022 Thu Feb 3 04:55:26 UTC 2022 ...
Удалите созданные ресурсы
Удалите ресурсы, которые вы больше не будете использовать, чтобы за них не списывалась плата:
-
Удалите кластер Managed Service for Kubernetes:
ВручнуюTerraform-
В терминале перейдите в директорию с планом инфраструктуры.
Важно
Убедитесь, что в директории нет Terraform-манифестов с ресурсами, которые вы хотите сохранить. Terraform удаляет все ресурсы, которые были созданы с помощью манифестов в текущей директории.
-
Удалите ресурсы:
-
Выполните команду:
terraform destroy
-
Подтвердите удаление ресурсов и дождитесь завершения операции.
Все ресурсы, которые были описаны в Terraform-манифестах, будут удалены.
-
-
-
Если вы зарезервировали для кластера публичный статический IP-адрес, удалите его.