Перейти до змісту

Розділ 8: контейнер Snapshots

У цій главі вам потрібно буде виконувати команди як непривілейований користувач ("lxdadmin", якщо ви слідкуєте за цим з початку цієї книги).

Снепшот контейнери разом із снепшот сервером (про який ми розповімо пізніше) є, мабуть, найважливішим аспектом роботи робочого сервера LXD. Снепшоти забезпечують швидке відновлення. Доцільно використовувати їх як захист від збоїв під час оновлення основного програмного забезпечення, яке працює на певному контейнері. Якщо під час оновлення щось трапиться, що призведе до поломки цієї програми, ви просто відновите знімок, і ви відновите роботу з лише кількома секундами простою.

Автор використав контейнери LXD для загальнодоступних серверів PowerDNS, і процес оновлення цих програм став набагато безтурботнішим, оскільки ви можете спочатку зробити снепшот контейнера, перш ніж продовжити.

Ви навіть можете зробити снепшот контейнера під час його роботи.

Процес снепшот

Ми почнемо з отримання снепшот контейнера ubuntu-test за допомогою цієї команди:

lxc snapshot ubuntu-test ubuntu-test-1

Тут ми називаємо снепшот «ubuntu-test-1», але його можна називати як завгодно. Щоб переконатися, що у вас є снепшот, виконайте «lxc info» контейнера:

lxc info ubuntu-test

Ви вже дивилися на інформаційний екран. Якщо прокрутити вниз, ви побачите:

Snapshots:
  ubuntu-test-1 (taken at 2021/04/29 15:57 UTC) (stateless)

Успішно! Наш снепшот на місці.

Тепер перейдіть до контейнера ubuntu-test:

lxc exec ubuntu-test bash

І створіть порожній файл за допомогою команди touch:

touch this_file.txt

Тепер вийдіть з контейнера.

Перш ніж ми відновимо контейнер, як він був до створення файлу, найбезпечніший спосіб відновити контейнер, особливо якщо було багато змін, це спочатку зупинити його:

lxc stop ubuntu-test

Потім відновіть його:

lxc restore ubuntu-test ubuntu-test-1

Потім знову запустіть контейнер:

lxc start ubuntu-test

Якщо ви знову повернетесь у контейнер і подивитесь, наш «this_file.txt», який ми створили, тепер зник.

Якщо снепшот більше не потрібен, його можна видалити:

lxc delete ubuntu-test/ubuntu-test-1

Попередження

Ви завжди повинні видаляти снепшоти, коли контейнер запущено. Чому? Команда lxc delete також працює для видалення всього контейнера. Якби ми випадково натиснули Enter після «ubuntu-test» у наведеній вище команді, І якщо контейнер було зупинено, контейнер було б видалено. Попередження не надається, він просто виконує те, що ви просите.

Однак якщо контейнер запущено, ви отримаєте таке повідомлення:

Error: The instance is currently running, stop it first or pass --force

Тому завжди видаляйте снепшоти під час роботи контейнера.

У наступних розділах ви:

  • налаштуєте процес автоматичного створення snapshots
  • налаштуєте термін дії снепшота, щоб він зникав через певний проміжок часу
  • налаштуєте автоматичне оновлення снепшотів на снепшот сервері

Author: Steven Spencer

Contributors: Ezequiel Bruni, Ganna Zhyrnova