Yandex Cloud
  • Сервисы
  • Решения
  • Почему Yandex Cloud
  • Сообщество
  • Тарифы
  • Документация
  • Связаться с нами
Подключиться
Language / Region
Проект Яндекса
© 2023 ООО «Яндекс.Облако»
Yandex Managed Service for Kubernetes
  • Сопоставление с другими сервисами Yandex Cloud
  • Начало работы
  • Пошаговые инструкции
    • Все инструкции
    • Подключение к узлу по SSH
    • Обновление Kubernetes
    • Настройка автомасштабирования
    • Подключение к кластеру
      • Обзор способов подключения
      • Настройка групп безопасности
      • Создание статического файла конфигурации
    • Установка приложений из Cloud Marketplace
      • Основы работы с Cloud Marketplace
      • Установка Argo CD
      • Установка Container Storage Interface для S3
      • Установка Crossplane
      • Установка External Secrets Operator
      • Установка Falco
      • Установка Filebeat
      • Установка Fluent Bit
      • Установка Gateway API
      • Установка GitLab Agent
      • Установка GitLab Runner
      • Установка HashiCorp Vault
      • Установка Ingress-контроллера Application Load Balancer
      • Установка Jaeger
      • Установка Kyverno & Kyverno Policies
      • Установка Loki
      • Установка Metrics Provider
      • Установка NodeLocal DNS
      • Установка Policy Reporter
      • Установка Thumbor
    • Сетевые сценарии
      • Обеспечение доступа к приложению, запущенному в кластере Kubernetes
      • Настройка контроллера сетевых политик Calico
      • Настройка контроллера сетевых политик Cilium
      • Настройка NodeLocal DNS для контроллера сетевых политик Cilium
    • Работа с постоянными томами
      • Динамическая подготовка тома
      • Статическая подготовка тома
      • Управление классами хранилищ
      • Увеличение размера тома для подов
      • Увеличение размера тома для контроллера StatefulSet
      • Подключение тома в блочном режиме
      • Интеграция с Object Storage
    • Управление кластером Kubernetes
      • Получение информации о кластере Kubernetes
      • Создание кластера Kubernetes
      • Изменение кластера Kubernetes
      • Создание пространства имен в кластере Kubernetes
      • Удаление кластера Kubernetes
    • Управление группой узлов
      • Информация об имеющихся группах узлов
      • Создание группы узлов
      • Подключение к узлу по SSH
      • Настройка автомасштабирования
      • Изменение группы узлов
      • Управление метками узлов кластера Kubernetes
      • Удаление группы узлов
    • Подключение внешних узлов к кластеру
  • Практические руководства
    • Все руководства
    • Создание нового Kubernetes-проекта в Yandex Cloud
    • Интеграция с Container Registry
    • Подпись и проверка Docker-образов Container Registry
    • Сканирование уязвимостей Container Registry при непрерывном развертывании приложений с помощью GitLab
    • Запуск рабочих нагрузок с GPU
    • Установка Ingress-контроллера NGINX с Let's Encrypt®
    • Установка Ingress-контроллера NGINX с сертификатом из Certificate Manager
    • Резервное копирование в Object Storage
    • Горизонтальное масштабирование приложения в кластере
    • Вертикальное масштабирование приложения в кластере
    • Развертывание и нагрузочное тестирование gRPC-сервиса с масштабированием
    • Работа со снапшотами
    • Интеграция с корпоративной зоной DNS
    • Автоматическое масштабирование DNS по размеру кластера
    • Настройка локального кеширования DNS
    • Проверка DNS Challenge для сертификатов Let's Encrypt®
    • Мониторинг кластера с помощью Prometheus и Grafana
    • Непрерывное развертывание контейнеризованных приложений с помощью GitLab
    • Изменение параметров сервера метрик (Metrics Server)
    • Использование продуктов Cloud Marketplace
      • Интеграция с Argo CD
      • Интеграция с Crossplane
      • Синхронизация с секретами Yandex Lockbox
      • Настройка Fluent Bit для работы с Cloud Logging
      • Настройка Gateway API
      • Настройка Application Load Balancer Ingress-контроллера
      • Использование Jaeger для трассировки запросов в Managed Service for YDB
      • Настройка Kyverno & Kyverno Policies
      • Использование Metrics Provider для трансляции метрик
  • Концепции
    • Взаимосвязь ресурсов сервиса
    • Релизные каналы и обновления
    • Шифрование секретов
    • Использование объектов API Kubernetes
      • Том
      • Сервис
    • Группа узлов
      • Автоматическое масштабирование группы узлов
      • Расселение подов с узла
      • Динамическое резервирование ресурсов для узла
      • Группы узлов с GPU
    • Сеть в Managed Service for Kubernetes
    • Внешние узлы кластера
    • Сетевые настройки и политики кластера
    • Автоматическое масштабирование
    • Квоты и лимиты
    • Рекомендации по использованию Managed Service for Kubernetes
  • Управление доступом
  • Правила тарификации
  • Справочник API
    • Аутентификация в API
    • gRPC (англ.)
      • Overview
      • ClusterService
      • NodeGroupService
      • VersionService
      • OperationService
    • REST (англ.)
      • Overview
      • Cluster
        • Overview
        • create
        • delete
        • get
        • list
        • listNodeGroups
        • listNodes
        • listOperations
        • start
        • stop
        • update
      • NodeGroup
        • Overview
        • create
        • delete
        • get
        • list
        • listNodes
        • listOperations
        • update
      • Version
        • Overview
        • list
  • Вопросы и ответы
    • Общие вопросы
    • Хранилище данных
    • Настройка и обновление
    • Автоматическое масштабирование
    • Ресурсы
    • Логи
    • Все вопросы на одной странице
  1. Практические руководства
  2. Работа со снапшотами

Работа со снапшотами

Статья создана
Yandex Cloud
  • Перед началом работы
  • Подготовьте тестовое окружение
  • Создайте снапшот
  • Восстановите объекты из снапшота
  • Удалите созданные ресурсы

В Managed Service for Kubernetes доступны снапшоты — копии дисков PersistentVolume на определенный момент времени.

Чтобы создать снапшот, а потом восстановить его:

  1. Подготовьте тестовое окружение.
  2. Создайте снапшот.
  3. Восстановите объекты из снапшота.

Если созданные ресурсы вам больше не нужны, удалите их.

Перед началом работы

  1. Создайте ресурсы Kubernetes:

    Вручную
    С помощью Terraform

    Создайте кластер Managed Service for Kubernetes и группу узлов любой подходящей конфигурации с версией Kubernetes не ниже 1.20.

    1. Если у вас еще нет Terraform, установите его.

    2. Скачайте файл с настройками провайдера. Поместите его в отдельную рабочую директорию и укажите значения параметров.

    3. Скачайте в ту же рабочую директорию файл конфигурации кластера k8s-cluster.tf. В файле описаны:

      • Сеть.
      • Подсеть.
      • Группа безопасности по умолчанию и правила, необходимые для работы кластера:
        • Правила для служебного трафика.
        • Правила для доступа к API Kubernetes и управления кластером с помощью kubectl (через порты 443 и 6443).
      • Кластер Managed Service for Kubernetes.
      • Сервисный аккаунт, необходимый для создания кластера и группы узлов Managed Service for Kubernetes.
    4. Укажите в файле конфигурации идентификатор каталога.

    5. Выполните команду terraform init в директории с конфигурационными файлами. Эта команда инициализирует провайдер, указанный в конфигурационных файлах, и позволяет работать с ресурсами и источниками данных провайдера.

    6. Проверьте корректность файлов конфигурации Terraform с помощью команды:

      terraform validate
      

      Если в файлах конфигурации есть ошибки, Terraform на них укажет.

    7. Создайте необходимую инфраструктуру:

      1. Выполните команду для просмотра планируемых изменений:

        terraform plan
        

        Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.

      2. Если вас устраивают планируемые изменения, внесите их:

        1. Выполните команду:

          terraform apply
          
        2. Подтвердите изменение ресурсов.

        3. Дождитесь завершения операции.

      В указанном каталоге будут созданы все требуемые ресурсы. Проверить появление ресурсов и их настройки можно в консоли управления.

  2. Установите kubectl и настройте его на работу с созданным кластером.

Подготовьте тестовое окружение

Для проверки работы со снапшотами будет создан PersistentVolumeClaim и под, имитирующий рабочую нагрузку.

  1. Создайте файл 01-pvc.yaml с манифестом PersistentVolumeClaim:

    ---
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: pvc-dynamic
    spec:
      accessModes:
        - ReadWriteOnce
      storageClassName: yc-network-hdd
      resources:
        requests:
          storage: 5Gi
    
  2. Создайте PersistentVolumeClaim:

    kubectl apply -f 01-pvc.yaml
    
  3. Убедитесь, что PersistentVolumeClaim создан и имеет состояние Pending:

    kubectl get pvc pvc-dynamic
    
  4. Создайте файл 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.

  5. Создайте под pod-source:

    kubectl apply -f 02-pod.yaml
    
  6. Убедитесь, что под перешел в состояние Running:

    kubectl get pod pod-source
    
  7. Убедитесь, что в файл /data/out.txt попадают записи даты и времени. Для этого выполните команду на поде:

    kubectl exec pod -- tail /data/out.txt
    

    Результат:

    Thu Feb 3 04:55:21 UTC 2022
    Thu Feb 3 04:55:26 UTC 2022
    ...
    

Создайте снапшот

  1. Создайте файл 03-snapshot.yaml с манифестом снапшота:

    ---
    apiVersion: snapshot.storage.k8s.io/v1beta1
    kind: VolumeSnapshot
    metadata:
      name: new-snapshot-test
    spec:
      volumeSnapshotClassName: yc-csi-snapclass
      source:
        persistentVolumeClaimName: pvc-dynamic
    
  2. Создайте снапшот:

    kubectl apply -f 03-snapshot.yaml
    
  3. Убедитесь, что снапшот создан:

    kubectl get volumesnapshots.snapshot.storage.k8s.io
    
  4. Убедитесь, что создан VolumeSnapshotContent:

    kubectl get volumesnapshotcontents.snapshot.storage.k8s.io
    

Восстановите объекты из снапшота

При восстановлении из снапшота в кластере будут созданы:

  • Объект PersistentVolumeClaim с именем pvc-restore.
  • Под с именем pod-restore, содержащий записи в файле /data/out.txt.

Чтобы восстановить снапшот:

  1. Создайте файл 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.

  2. Создайте новый PersistentVolumeClaim:

    kubectl apply -f 04-restore-snapshot.yaml
    
  3. Убедитесь, что PersistentVolumeClaim создан и имеет состояние Pending:

    kubectl get pvc pvc-restore
    
  4. Создайте файл 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.

  5. Создайте под pod-restore:

    kubectl apply -f 05-pod-restore.yaml
    
  6. Убедитесь, что под перешел в состояние Running:

    kubectl get pod pod-restore
    
  7. Убедитесь, что новый PersistentVolumeClaim перешел в состояние Bound:

    kubectl get pvc pvc-restore
    
  8. Убедитесь, что файл /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
    ...
    

Удалите созданные ресурсы

Если созданные ресурсы вам больше не нужны, удалите их:

  1. Удалите кластер Managed Service for Kubernetes:

    Вручную
    С помощью Terraform

    Удалите кластер Managed Service for Kubernetes.

    1. В командной строке перейдите в каталог, в котором расположен актуальный конфигурационный файл Terraform с планом инфраструктуры.

    2. Удалите ресурсы с помощью команды:

      terraform destroy
      

      Внимание

      Terraform удалит все ресурсы, которые были созданы с его помощью: кластеры, сети, подсети, виртуальные машины и т. д.

    3. Подтвердите удаление ресурсов.

  2. Если вы зарезервировали для кластера публичный статический IP-адрес, удалите его.

  3. Удалите снимок диска.

Была ли статья полезна?

Language / Region
Проект Яндекса
© 2023 ООО «Яндекс.Облако»
В этой статье:
  • Перед началом работы
  • Подготовьте тестовое окружение
  • Создайте снапшот
  • Восстановите объекты из снапшота
  • Удалите созданные ресурсы