Solaris Container (zone). Создание и администрирование. Часть 2

    Solaris Container (zone). Создание и администрирование. Часть 1

    Добрый день, %username.

    В первой части статьи я постарался рассказать о том, что такое зоны в Solaris, их преимущества как одного из подходов виртуализации. Так же была успешно установлена обычная зона, без «плюшек» и других «наворотов». В этой же части я хочу показать как можно баловаться плюшками и добавим наворотов в нашу зону.

    Для начала удалим зону, которую мы создали в предыдущей статье, и т.к. у меня сервер установлен на файловую систему ZFS, мы нашу новую зону установим в ZFS датасет. Преимущества и особенности этой файловой системы достойны отдельной большой статьи. Но если коротко, то особенности ZFS это:

    • в ZFS входит не только сама файловая система, но и инструменты для управления разделами и администрирования
    • поддерживает емкие хранилища
    • резервирование данных, самолечение поврежденных частей ФС (за счет вычисленных ранее контрольных сум)
    • транзакционная модель записи файлов на диск
    • поддерживает горячее расширение ZFS пула
    • поддерживает неограниченное количество клонов и снепшотов
    • открытый исходный код и доступна в Solaris 10, MacOS X и FreeBSD


    Установка «whole root» zone



    И так у меня есть 1 физический диск, c1t1d0, на котором мы создадим zfs пул и установим туда новую зону.

    # zpool create -f habrapool c1t1d0

    Создаем zfs-датасет и устанавливаем квоту в 10G, размер датасета:

    # zfs create habrapool/zone1
    # zfs set quota=10G habrapool/zone1
    # chown root:root /habrapool/zone1/
    # chmod 700 /habrapool/zone1/


    Сейчас у нас следующая структура ZFS

    # zfs list -H | grep habrapool
    habrapool 107K 66.9G 23K /habrapool
    habrapool/zone1 21K 10.0G 21K /habrapool/zone1


    На этот раз мы будем устанавливать “whole root” зону, зону в которой отсутствуют наследуемые директорий из глобальной зоны. Зона сможет управлять переданным ей отдельным ZFS -датасетом(например для данных), у нее будет свой отдельный сетевой интерфейс. Установка новых дополнительных пакетов в “whole root” ничем не будет отличаться от обычной ОС.

    # zonecfg -z zone1
    zonecfg:zone1> create -b

    zonecfg:zone1> set ip-type=exclusive
    zonecfg:zone1> add net
    zonecfg:zone1:net> set physical=bge1
    zonecfg:zone1:net> end
    zonecfg:zone1> add dataset
    zonecfg:zone1:dataset> set name=habrapool/test
    zonecfg:zone1:dataset> end

    zonecfg:zone1> verify
    zonecfg:zone1> commit
    zonecfg:zone1> exit


    zonecfg:zone1> create –b — создаем «пустую» конфигурацию. Если не использовать ключ –b, то создается структура с наследуемыми диреториями
    zonecfg:zone1> set ip-type=exclusive – означает что будем использовать отдельный интерфейс
    zonecfg:zone1> add net
    zonecfg:zone1:net> set physical=bge1 – добавляем только интерфейс
    zonecfg:zone1:net> end
    zonecfg:zone1> add dataset
    zonecfg:zone1:dataset> set name=habrapool/test – предаем ZFS датасет в зону
    zonecfg:zone1:dataset> end

    После установки и конфигурации зоны внутри ее появляется датасет, в котором администратор зоны может создавать свои датасеты, назначать на них квоты, компрессию и т.д. Это позволяет достигнуть высокой гибкости и полноценного использования ZFS в зоне.

    # zfs list
    NAME USED AVAIL REFER MOUNTPOINT
    habrapool 3.69G 63.2G 35K /habrapool
    habrapool/test 44K 5.00G 23K /habrapool/test
    habrapool/test/inzone 21K 1024M 21K /habrapool/test/inzone


    Поскольку zonecfg может работать в интерактивном режиме (этот режим использовался до этого) и в режиме файла команд, то мы можем экспортировать файл команд из, например уже готовой зоны, и далее использовать его для создания новых зон.

    # zonecfg -z zone1 export -f /zone1.cfg
    # cat /zone1.cfg

    add dataset
    set name=habrapool/test

    # zonecfg -z zone2 -f /zone1.cfg


    Клонирование зон



    Так же зону можно создать клонированием уже существующей. Для этого необходимо создать новую зону, в которую будут склонированы данные из старой, а для начала мы берем конфиг зоны из которой мы хотим сделать клон:

    # zonecfg -z zone1 export -f /zone1.cfg

    Теперь нам необходимо отредактировать конфиг, исправив zonepath, имя зоны и IP. После редактирование конфиг выглядит приблизительно так:

    create -b
    set zonepath=/habrapool/zone2
    set autoboot=true
    set ip-type=shared
    add net
    set address=10.44.3.90
    set physical=bge1
    end
    add attr
    set name=comment
    set type=string
    set value=zone2


    Далее запускам клонирование:

    # time zoneadm -z zone2 clone zone1
    Cloning snapshot habrapool/zone1@SUNWzone1
    Instead of copying, a ZFS clone has been created for this zone.
    real 0m4.522s
    user 0m2.342s
    sys 0m0.388s


    За счет того, что используется ZFS, зона разворачивается из снапшота zone1, и процедура занимает около 5 секунд. Реально новая зона после клонирования по размеру равна 0Мб, т.к. это «дельта» (разница между датасетом zone1 и zon2). Чем больше новых данных будет появляться в zone2, тем больше она будет отличаться от zone1. Реально такое решение необходимо для быстрого разворачивания новых зон, которые буду минимально отличаться между собой. Если есть необходимо создать зону копированием, а не из снепшота, то это можно сделать с параметром –m copy, но времени затрачивается значительно больше, около 6 минут, и zone2 будет занимать ровно столько же на диске сколько и zone1:

    # time zoneadm -z zone2 clone -m copy zone1
    A ZFS file system has been created for this zone.
    Copying /habrapool/zone1...
    real 6m2.939s
    user 0m9.545s
    sys 1m29.881s


    Миграция зоны на другой хост



    Например, есть задача, мигрировать одну зону с одного хоста на другой хост, чтобы разгрузить один из них. Для начала надо «отцепить» мигрирующую зону от текущего хоста и подготовить ее к миграции:

    # zoneadm -z zone2 halt
    # zoneadm -z zone2 detach


    Теперь нам необходимо скопировать данные на другой хост. Делаем tar архив и копируем его на другой хост в путь /export/data1/ любыми удобными средствами. После копирования на целевом хосте разпаковываем tar-архив в директорию /export/data1/migrzone1. Создаем зону используя zonecfg –z newzone и указываем путь перемещенной detached-зоны. После этого создаcтся конфиг зоны, делаем attach зоны и boot:

    # zonecfg -z newzone 'create -a /habrapool/zone2'
    # zoneadm -z newzone attach
    # zoneadm -z newzone boot


    СPU и RAM для зоны



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

    zonecfg:zone1> add capped-memory
    zonecfg:zone1:capped-memory> set physical=512m
    zonecfg:zone1:capped-memory> set swap=1024m
    zonecfg:zone1:capped-memory> end


    zonecfg:zone1> add capped-memory – выделяем собственную память для зоны
    zonecfg:zone1:capped-memory> set physical=512m — это кол-во памяти, которое будет выдано зоне из пула физической памяти.
    zonecfg:zone1:capped-memory> set swap=1024m — это не тот swap, к которому мы привыкли. Здесь указывается максимальная виртуальная память, котороя может быть адресована внутри зоны.

    Для выделения dedicated cpu, отдельных VCPU, которые будут использоваться только в этой зоне, и не в какой другой (даже в глобальной). Есть более другой способ выделения ресурсов CPU для зон через специальный менеджер ресурсов, но это тема отдельной статьи.

    zonecfg:zone1> add dedicated-cpu– выделяем 1 CPU для зоны
    zonecfg:zone1: dedicated-cpu > set ncpus=1
    zonecfg:zone1: dedicated-cpu > end

    Зоне это выглядит так:
    bash-3.00# psrinfo -v
    Status of virtual processor 0 as of: 07/07/2011 02:14:08
    on-line since 07/01/2011 06:56:38.
    The sparcv9 processor operates at 1504 MHz,
    and has a sparcv9 floating point processor.

    bash-3.00# prtconf | grep Memory
    Memory size: 512 Megabytes

    В этой статье я постарался учесть замечания, который были в комментариях к предидущей части, и продемонстрировать и описать то, что обещал.

    Спасиоб за внимание!

    Similar posts

    Ads
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More

    Comments 4

      0
      Зачем tar, когда у вас есть zfs send\recieve ?!
        0
        А с помощью тара не быстрее получится? Перекинется, как один файл. Если ошибаюсь — то поясните пожалуйста.
          0
          Нет, не быстрее. Для понимания стоит иногда открывать теорию.
          zfs send [-vRp] [-[iI] snapshot] snapshot

          Creates a stream representation of the second snapshot,
          which is written to standard output. The output can be
          redirected to a file or to a different system (for exam-
          ple, using ssh(1). By default, a full stream is gen-
          erated.
          * Правда с ssh который тут рекомендуют вы получите сильную деградацию скорости передачи. Лично я использую mbuffer.
          Собственно по той же теории tar предназначался совсем не для клонирования систем, а для записи данных (бэкапов?) на ленты.
        0
        Честное слово, открыли америку, обязательно попробую. Благодарствую. Но все же ssh1 (

        Only users with full accounts can post comments. Log in, please.