Yandex.Cloud
  • Сервисы
  • Почему Yandex.Cloud
  • Сообщество
  • Решения
  • Тарифы
  • Документация
  • Связаться с нами
Подключиться
Yandex Managed Service for Kubernetes
  • Начало работы
  • Пошаговые инструкции
    • Все инструкции
    • Подключение к узлу по SSH
    • Создание файла конфигурации
    • Сетевые сценарии
      • Обеспечение доступа к приложению, запущенному в кластере Kubernetes
      • Работа с сетевыми политиками кластера Kubernetes
    • Шифрование секретов
    • Работа с постоянными томами
      • Динамическая подготовка тома
      • Статическая подготовка тома
      • Управление классами хранилищ
      • Увеличение размера тома
      • Подключение тома в блочном режиме
    • Управление кластером Kubernetes
      • Добавление учетных данных кластера Kubernetes в конфигурационный файл kubectl
      • Получение информации о кластере Kubernetes
      • Создание кластера Kubernetes
      • Изменение кластера Kubernetes
      • Удаление кластера Kubernetes
    • Управление группой узлов
      • Получение информации о группе узлов
      • Создание группы узлов
      • Изменение группы узлов
      • Управление метками узлов кластера
      • Удаление группы узлов
  • Сценарии использования
    • Все сценарии
    • Интеграция с Container Registry
    • Запуск рабочих нагрузок с GPU
    • Установка NGINX Ingress Controller с Let's Encrypt®
    • Резервное копирование в Object Storage
    • Интеграция с корпоративной зоной DNS
  • Концепции
    • Взаимосвязь ресурсов сервиса
    • Релизные каналы и обновления
    • Использование объектов API Kubernetes
      • Том
      • Сервис
    • Группа узлов
      • Автоматическое масштабирование группы узлов
      • Расселение подов с узла
      • Динамическое резервирование ресурсов для узла
      • Группы узлов с GPU
    • Сетевые политики кластера Kubernetes
    • Квоты и лимиты
  • Управление доступом
  • Правила тарификации
  • Справочник API
    • Аутентификация в API
    • gRPC
      • Обзор
      • ClusterService
      • NodeGroupService
      • VersionService
      • OperationService
    • REST
      • Обзор
      • Cluster
        • Обзор
        • create
        • delete
        • get
        • list
        • listNodeGroups
        • listOperations
        • update
      • NodeGroup
        • Обзор
        • create
        • delete
        • get
        • list
        • listOperations
        • update
      • Version
        • Обзор
        • list
  • Вопросы и ответы
  1. Сценарии использования
  2. Резервное копирование в Object Storage

Резервное копирование кластера Kubernetes в Yandex Object Storage

  • Требования
  • Резервное копирование
  • Восстановление данных их резервной копии

Данные в кластерах Managed Service for Kubernetes надежно хранятся и реплицируются в инфраструктуре Yandex.Cloud. Однако в любой момент вы можете сделать резервные копии данных из групп узлов кластеров Kubernetes и хранить их в Object Storage или другом хранилище.

Вы можете делать резервные копии:

  • данных из групп узлов кластера Kubernetes с помощью инструмента Velero;

  • постоянных томов (Persistent Volumes) с помощью программы restic. Более подробная информация о настройке программы restic описана в документации Velero.

    Программа restic копирует данные с Persistent Volumes в виде файлов, поэтому мы рекомендуем выполнять резервное копирование БД средствами самого приложения. Например, для СУБД ClickHouse использовать утилиту clickhouse-backup, для СУБД MySQL — утилиту MySQLdump, для PostgreSQL — pg_dump.

Требования

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

Резервное копирование

Чтобы выполнить резервное копирование данных группы узлов:

  1. Выберите последнюю версию программы Velero для своей платформы.

  2. Скачайте Velero, распакуйте архив и установите программу. Подробнее об установке программы читайте в документации Velero.

  3. Посмотрите описание любой команды Velero с помощью флага --help. Например:

    CLI
    velero --help
    
  4. Создайте в Object Storage бакет, в котором будет храниться резервная копия данных:

    Консоль управления
    1. В консоли управления выберите каталог, в котором хотите создать бакет.
    2. Выберите сервис Object Storage.
    3. Нажмите кнопку Создать бакет.
    4. На странице Новый бакет:
      1. Введите Имя бакета в соответствии с правилами именования.

        Например, velero-backup.

      2. При необходимости ограничьте Максимальный размер бакета.

        Размер 0 означает отсутствие ограничений и аналогичен включенной опции Без ограничений.

      3. Выберите тип Доступа.

      4. Выберите Класс хранилища: Стандартное.

      5. Нажмите кнопку Создать бакет для завершения операции.

  5. Создайте сервисный аккаунт, которому будет назначен доступ к бакету:

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

    2. Выберите вкладку Сервисные аккаунты.

    3. Нажмите кнопку Создать сервисный аккаунт.

    4. Введите Имя сервисного аккаунта. Например, velero-sa.

      • Длина — от 3 до 63 символов.
      • Может содержать строчные буквы латинского алфавита, цифры и дефисы.
      • Первый символ — буква. Последний символ — не дефис.
    5. Нажмите кнопку Создать.

    Если у вас еще нет интерфейса командной строки Yandex.Cloud, установите и инициализируйте его.

    По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --folder-name или --folder-id.

    Создайте сервисный аккаунт:

    yc iam service-account create --name velero-sa
    

    Где:

    • name — имя сервисного аккаунта.

    Результат выполнения команды:

    id: abcdo12h3j04odg56def
    folder_id: b1g23ga45ghf0cljderg
    created_at: "2020-10-19T12:59:56Z"
    name: velero-sa
    
  6. Создайте статический ключ доступа для сервисного аккаунта velero-sa:

    Консоль управления
    CLI
    1. В консоли управления выберите каталог, которому принадлежит сервисный аккаунт velero-sa.

    2. Выберите вкладку Сервисные аккаунты.

    3. Выберите сервисный аккаунт velero-sa и нажмите на строку с его именем.

    4. На странице Обзор нажмите кнопку Создать новый ключ на верхней панели.

    5. Выберите пункт Создать статический ключ доступа.

    6. В открывшемся окне Новый ключ нажмите кнопку Создать.

    7. Сохраните идентификатор и секретный ключ.

      Внимание

      После закрытия диалога значение секретного ключа будет недоступно.

    1. Создайте статический ключ доступа для сервисного аккаунта:

      yc iam access-key create --service-account-name velero-sa
      

      Где:

      • service-account-name — имя сервисного аккаунта.

      Результат выполнения команды:

      access_key:
        id: abcdo12h3j04odg56def
        service_account_id: ajego12h3j03slk16upe
        created_at: "2020-10-19T13:22:29Z"
        key_id: y1qiM23o-Y3WeoP5oSdc
      secret: MLSeE12TYJZpjFkfgMeKJ3e7PR7z6dk3UyEeC7PJ
      
    2. Сохраните идентификатор key_id и секретный ключ secret. Получить значение ключа снова будет невозможно.

  7. Создайте файл со статическим ключом доступа.

    Например, вы можете создать файл с именем credentials и сохранить его в домашней директории.

    Чтобы созданные статические ключи доступа были совместимы с AWS API, содержимое файла должно выглядеть следующим образом:

    [default]
    aws_access_key_id=y1qiM23o-Y3WeoP5oSdc
    aws_secret_access_key=MLSeE12TYJZpjFkfgMeKJ3e7PR7z6dk3UyEeC7PJ
    
  8. Выдайте сервисному аккаунту velero-sa доступ к бакету velero-backup. Object Storage поддерживает управление доступом с помощью ACL.

    Консоль управления
    1. В консоли управления выберите каталог, в котором создан бакет velero-backup.
    2. Выберите сервис Object Storage.
    3. Чтобы отредактировать ACL, нажмите значок справа от имени бакета и выберите ACL бакета.
    4. В появившемся окне Редактирование ACL:
      1. Выберите пользователя velero-sa.
      2. Выдайте ему разрешения READ + WRITE.
    5. Нажмите кнопку Добавить.
    6. Нажмите кнопку Сохранить.
  9. Установите программу Velero в кластер Kubernetes, из которого необходимо сделать резервное копирование данных:

    CLI
    velero install \
      --backup-location-config s3Url=https://storage.yandexcloud.net,region=ru-central1 \
      --bucket velero-backup \
      --plugins velero/velero-plugin-for-aws:v1.0.0 \
      --provider aws \
      --secret-file ./credentials \
      --use-restic \
      --use-volume-snapshots false
    

    Где:

    • backup-location-config — конфигурация адреса хранилища резервных копий. URL-адрес хранилища Object Storage и зоны доступности.
    • bucket — имя бакета для хранения резервных копий.
    • plugins — образ плагина для совместимости с AWS API.
    • provider — имя провайдера объектного хранилища Object Storage.
    • secret-file — имя файла со статическим ключом доступа и путь до него.
    • use-restic — флаг для использования программы restic для резервного копирования Persistent Volumes.
    • use-volume-snapshots — флаг, необходимый, чтобы снимки хранилищ не создавались автоматически.

    Результат выполнения команды:

    CustomResourceDefinition/backups.velero.io: attempting to create resource
    CustomResourceDefinition/backups.velero.io: already exists, proceeding
    CustomResourceDefinition/backups.velero.io: created
    ...
    DaemonSet/restic: already exists, proceeding
    DaemonSet/restic: created
    Velero is installed! ⛵ Use 'kubectl logs deployment/velero -n velero' to view the status.
    
  10. Выполните резервное копирование данных с группы узлов кластера Kubernetes:

    CLI
    velero backup create my-backup --default-volumes-to-restic
    

    Где:

    • default-volumes-to-restic — копирование Persistent Volumes из пространства имен default с помощью программы restic.

    Результат выполнения команды:

    Backup request "my-backup" submitted successfully.
    Run `velero backup describe my-backup` or `velero backup logs my-backup` for more details.
    
  11. Дождитесь завершения резервного копирования. В графе STATUS появится значение Completed.

    CLI
    velero backup get
    

    Результат выполнения команды:

    NAME        STATUS      ERRORS   WARNINGS   CREATED                         EXPIRES   STORAGE LOCATION   SELECTOR
    my-backup   Completed   0        0          2020-10-19 17:13:25 +0300 MSK   29d       default            <none>
    

Восстановление данных их резервной копии

Чтобы восстановить данные группы узлов кластера Kubernetes:

  1. Создайте кластер Kubernetes.

    Как создать кластер Kubernetes
    Консоль управления
    CLI
    API
    1. В консоли управления выберите каталог, в котором будет создан кластер Kubernetes.
    2. В списке сервисов выберите Managed Service for Kubernetes.
    3. Нажмите кнопку Создать кластер.
    4. Введите имя и описание кластера Kubernetes.
    5. Укажите Сервисный аккаунт для ресурсов, который будет использоваться для создания ресурсов.
    6. Укажите Сервисный аккаунт для узлов, который будет использоваться узлами для доступа к реестру Docker-образов.
    7. Укажите релизный канал.
    8. В блоке Конфигурация мастера:
      • В поле Версия Kubernetes выберите версию Kubernetes, которая будет установлена на мастере.

      • В поле Публичный адрес выберите способ назначения адреса:

        • Автоматически — чтобы назначить случайный IP-адрес из пула адресов Yandex.Cloud.
        • Без адреса — чтобы не назначать публичный IP-адрес.
      • В поле Тип мастера выберите тип мастера:

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

        Шаг доступен только для зонального мастера.

      • В поле Формат сети выберите способ отображения сетей:

        • Список — отображается список доступных сетей. Если у вас нет облачной сети, нажмите кнопку Создать сеть:
          • В открывшемся окне задайте имя сети. Укажите, что необходимо создать подсети. Нажмите кнопку Создать сеть. По умолчанию будет создана сеть с подсетями в каждой зоне доступности.
        • ID — необходимо ввести уникальные идентификаторы необходимых сетей.
      • В поле Облачная сеть выберите сеть, в которой будет создан мастер.

      • В поле Подсеть выберите подсеть, в которой будет создан мастер.

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

    9. В блоке Настройки окна обновлений:
      • В поле Частота обновлений / Отключение настройте окно для обновлений:
        • Отключено — отключение автоматических обновлений.
        • В любое время — обновления разрешены в любое время.
        • Ежедневно — обновления будут происходить во временном интервале, указанном в поле Время (UTC) и продолжительность.
        • В выбранные дни — обновления будут происходить во временном интервале, указанном в поле Расписание по дням.
    10. В блоке Сетевые настройки кластера:
      • Укажите CIDR кластера — диапазон IP-адресов, из которого будут выделяться IP-адреса для подов.
      • Укажите CIDR сервисов — диапазон IP-адресов, из которого будут выделяться IP-адреса для сервисов.
    11. Нажмите кнопку Создать кластер.

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

    yc managed-kubernetes cluster create \
      --name cluster-from-backup \
      --network-name network \
      --node-service-account-name docker \
      --service-account-name k8s \
      --zone ru-central1-a
    

    Где:

    • name — имя кластера Kubernetes.
    • network-name — имя сети.
    • node-service-account-id — уникальный идентификатор сервисного аккаунта для узлов. От его имени узлы будут скачивать из реестра необходимые Docker-образы.
    • service-account-id — уникальный идентификатор сервисного аккаунта для ресурсов. От его имени будут создаваться ресурсы, необходимые кластеру Kubernetes.
    • zone — зона доступности.

    Результат выполнения команды:

    done (6m9s)
    id: catab1c2f0fmb3d0ef94
    folder_id: b1g23ga82bcv0cdeferg
    created_at: "2020-10-19T17:41:28Z"
    name: cluster-from-backup
    status: RUNNING
    health: HEALTHY
    network_id: enpabc1rfondide2fflu3
    master:
      zonal_master:
        zone_id: ru-central1-a
        internal_v4_address: 10.0.0.32
      version: "1.17"
      endpoints:
        internal_v4_endpoint: https://10.0.0.32
      master_auth:
        cluster_ca_certificate: |
          -----BEGIN CERTIFICATE-----
          MIIAbCCCAbCgAwIBAgIBADANBgkqhkiG1w0BAQsFADAVMRMwEQYDVQQDEwdefWJl
          ...
          pi0jAbcDCLzCkfFuNimHejsSvVFN1N2bYYBCBMkhaYDzV5Ypfy/De0fHJ9U=
          -----END CERTIFICATE-----
      version_info:
        current_version: "1.17"
      maintenance_policy:
        auto_upgrade: true
        maintenance_window:
          anytime: {}
    ip_allocation_policy:
      cluster_ipv4_cidr_block: 10.112.0.0/16
      node_ipv4_cidr_mask_size: "24
      service_ipv4_cidr_block: 10.96.0.0/16
    service_account_id: ajeabcfldeftb1238n99
    node_service_account_id: ajea1b023cmndeft7t7j
    release_channel: REGULAR
    

    Чтобы создать кластер Kubernetes, воспользуйтесь методом create для ресурса Cluster.

  2. Создайте группу узлов.

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

    Как создать группу узлов
    Консоль управления
    CLI
    API
    1. В консоли управления выберите каталог, в котором будет создан кластер Kubernetes.
    2. В списке сервисов выберите Managed Service for Kubernetes.
    3. Выберите кластер Kubernetes, для которого необходимо создать группу узлов.
    4. На странице кластера Kubernetes перейдите на вкладку Группы узлов.
    5. Нажмите кнопку Создать группу узлов.
    6. Введите имя и описание группы узлов.
    7. Укажите Версию Kubernetes для узлов.
    8. Укажите количество узлов в группе узлов.
    9. В блоке Масштабирование:
      • Выберите тип политики масштабирования.
      • Укажите количество узлов в группе узлов.
    10. В блоке В процессе создания и обновления разрешено укажите максимальное количество виртуальных машин, на которое можно превысить и уменьшить размер группы.
    11. В блоке Вычислительные ресурсы:
      • Выберите платформу.
      • Укажите необходимое количество vCPU и гарантированную долю vCPU, а также объем RAM.
    12. В блоке Хранилище:
      • Укажите Тип диска узла:
        • HDD — стандартный сетевой диск, сетевое блочное хранилище на HDD-накопителе.
        • SSD — быстрый сетевой диск, сетевое блочное хранилище на SSD-накопителе.
      • Укажите размер диска узла.
    13. В блоке Сетевые настройки:
      • В поле Публичный адрес выберите способ назначения адреса:
        • Автоматически — чтобы назначить случайный IP-адрес из пула адресов Yandex.Cloud.
      • Укажите расположение узлов по зонам доступности и сетям.
    14. В блоке Доступ укажите данные для доступа на узел:
      • В поле Логин введите имя пользователя.
      • В поле SSH-ключ вставьте содержимое файла публичного ключа.
    15. В блоке Настройки окна обновлений:
      • В поле Частота обновлений / Отключение выберите окно для обновлений:
        • Отключено — отключение автоматических обновлений.
        • В любое время — обновления разрешены в любое время.
        • Ежедневно — обновления будут происходить во временной интервал, указанный в поле Время (UTC) и продолжительность.
        • В выбранные дни — обновления будут происходить во временной интервал, указанный в поле Расписание по дням.
    16. Нажмите кнопку Создать группу узлов.

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

    yc managed-kubernetes node-group create \
      --cluster-name cluster-from-backup \
      --fixed-size 1 \
      --public-ip
    

    Где:

    • cluster-name — имя кластера Kubernetes, в котором будет создана группа узлов.
    • fixed-size — количество узлов в группе.
    • public-ip — флаг, который указывается, если группе узлов требуется публичный IP-адрес.

    Результат выполнения:

    done (2m31s)
    id: catabcio1iq2sdefial3
    cluster_id: catab1c2f0fmb3d0ef94
    created_at: "2020-10-19T17:43:54Z"
    status: RUNNING
    node_template:
      platform_id: standard-v2
      resources_spec:
        memory: "4294967296"
        cores: "2"
        core_fraction: "100"
      boot_disk_spec:
        disk_type_id: network-hdd
        disk_size: "103079215104"
      v4_address_spec:
        one_to_one_nat_spec:
          ip_version: IPV4
      scheduling_policy: {}
    scale_policy:
      fixed_scale:
        size: "1"
    allocation_policy:
      locations:
      - zone_id: ru-central1-a
        subnet_id: e1bm23abcs81edef6dqg
    deploy_policy:
      max_expansion: "3"
    instance_group_id: cl1ca2bch3lde1fi2tk7
    node_version: "1.17"
    version_info:
      current_version: "1.17"
    maintenance_policy:
      auto_upgrade: true
      auto_repair: true
      maintenance_window:
        anytime: {}
    

    Чтобы создать группу узлов, воспользуйтесь методом create для ресурса NodeGroup.

  3. Установите программу Velero в кластер Kubernetes, в котором необходимо восстановить данные:

    CLI
    velero install \
      --backup-location-config s3Url=https://storage.yandexcloud.net,region=ru-central1 \
      --bucket velero-backup \
      --plugins velero/velero-plugin-for-aws:v1.0.0 \
      --provider aws \
      --secret-file ./credentials \
      --use-restic \
      --use-volume-snapshots false
    

    Где:

    • backup-location-config — конфигурация адреса хранилища резервных копий. URL-адрес хранилища Object Storage и все зоны доступности.
    • bucket — имя бакета для хранения резервных копий.
    • plugins — образ плагина для совместимости с AWS API.
    • provider — имя провайдера объектного хранилища Object Storage.
    • secret-file — имя файла со статическим ключом доступа и путь до него.
    • use-restic — использование программы restic для резервного копирования Persistent Volumes.
    • use-volume-snapshots — опция создания снимков хранилищ. Возможные значения: false — не создавать, true — создавать. Значение по умолчанию: true.

    Результат выполнения команды:

    CustomResourceDefinition/backups.velero.io: attempting to create resource
    CustomResourceDefinition/backups.velero.io: already exists, proceeding
    CustomResourceDefinition/backups.velero.io: created
    ...
    DaemonSet/restic: already exists, proceeding
    DaemonSet/restic: created
    Velero is installed! ⛵ Use 'kubectl logs deployment/velero -n velero' to view the status.
    
  4. Проверьте, что в созданном кластере Kubernetes отображается резервная копия данных:

    CLI
    velero backup get
    

    Результат выполнения команды:

    NAME        STATUS      ERRORS   WARNINGS   CREATED                         EXPIRES   STORAGE LOCATION   SELECTOR
    my-backup   Completed   0        0          2020-10-19 17:13:25 +0300 MSK   29d       default            <none>
    
  5. Восстановите данные из резервной копии:

    CLI
    velero restore create create --exclude-namespaces velero --from-backup my-backup
    

    Где:

    • exclude-namespaces — флаг, позволяющий не восстанавливать объекты из пространства имен velero.
    • from-backup — имя бакета, где хранится резервная копия.

    Результат выполнения команды:

    Restore request "create" submitted successfully.
    Run `velero restore describe create` or `velero restore logs create` for more details.
    
  6. Дождитесь завершения восстановления данных из резервной копии. В графе STATUS появится значение Completed.

    CLI
    velero get restore
    

    Результат выполнения команды:

    NAME     BACKUP    STATUS      STARTED                         COMPLETED                       ERRORS   WARNINGS   CREATED                         SELECTOR
    create   my-backup   Completed   2020-10-20 14:04:55 +0300 MSK   2020-10-20 14:05:22 +0300 MSK   0        23         2020-10-20 14:04:55 +0300 MSK   <none>
    
В этой статье:
  • Требования
  • Резервное копирование
  • Восстановление данных их резервной копии
Language / Region
Вакансии
Политика конфиденциальности
Условия использования
Брендбук
© 2021 ООО «Яндекс.Облако»