company_banner

Памятка системного администратора: шаблоны — первый шаг миграции в облако

    Собираетесь мигрировать в облако, но не знаете, с чего начать? Уже готовы сделать этот ответственный шаг или вплотную задумываетесь о том, чтобы перейти в виртуальную среду?



    Наверняка вы уже задали себе вопрос вроде: «А что делать, если уже куплены лицензии Windows, RHEL, Suse?» или, например, «Как эффективно протестировать функциональность, которую мы хотим предоставить из облачной среды?»

    Необходимо самостоятельно устанавливать собственные операционные системы и готовить из них шаблоны — эталонные конфигурации серверов.

    Преимущества подготовки шаблонов


    1. Во-первых, это быстрый старт. Можно использовать сервера автоматической установки или системы централизованного управления конфигурацией, но установка сервера из шаблона выполняется гораздо быстрее.
    2. Во-вторых, шаблоны дают стабильную и контролируемую конфигурацию. Для отладки или тестирования нового функционала не изменяющаяся конфигурация сервера и версии ПО будут очень кстати. Особенно это может быть полезно для проектов, где ведется активная разработка собственного ПО.
    3. В-третьих, использование шаблонов позволит быстро масштабироваться, просто запуская необходимое количество новых однотипных серверов.
    4. В-четвертых, шаблоны часто применяются в процессе переноса физических серверов в облачное окружение или любую другую виртуальную среду.


    Создаём первый шаблон на Linux


    Ниже — про Linux-шаблон, автоматическую генерацию пароля, вывод его на консоль при загрузке ОС, плюс про то, как подойти к выполнению других автоматических действий во время разворачивания нового виртуального сервера в облачной инфраструктуре. Про Windows-решения, если интересно, будет позже.

    Для примера используется наше облако (КРОК), но механики работают со всеми амазон-совместимыми облаками.

    1. Установка операционной системы с собственного диска.


    Перед тем, как выполнить установку необходимого вам Linux дистрибутива, необходимо загрузить iso-образ установочного диска в файловое хранилище. Для этого мы воспользуемся специальным скриптом c2-s3curl (http://storage.cloud.croc.ru/tools/c2-s3curl), который предназначен для выполнения основных файловых операций с нашим S3-совместимым хранилищем.

    root@c-jenkins:~# c2-s3curl --put my-bucket/rhel-server-6.1-x86_64-dvd.iso rhel-server-6.1-x86_64-dvd.iso
    Uploading object: my-bucket/rhel-server-6.1-x86_64-dvd.iso
    ######################################################################## 100.0%
    OK


    Процесс установки продемонстрируем на примере загруженного в файловое хранилище образа дистрибутива RedHat Enterprise Linux 6.1. После загрузки iso-файла необходимо создать образ диска, который будет использоваться для установки:



    Установка нового виртуального сервера состоит из двух шагов: выбора образа установочного диска и размера системного диска, а также выбора параметров виртуального сервера и сетей. На первом шаге выберем создание нового экземпляра:



    На втором шаге настраивается окружение и параметры нового виртуального сервера. Оставим все параметры по умолчанию, изменив только тип экземпляра, чем добавим серверу немного ресурсов, чтобы установка прошла быстрее.



    После запуска нового экземпляра, воспользуемся удаленной консолью для проведения процесса установки (имена виртуальных сетей и IP-информация о сервере удалены из иллюстрации):



    Установим ОС (подробно останавливаться не будем):



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

    Создание собственного Linux-шаблона


    Удаляем из udev правила создания сетевых интерфейсов:
    root@localhost:~# rm -Rf /etc/udev/rules.d/70-persistent-net.rules

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

    Затем нужно отредактировать информацию о первом сетевом интерфейсе, который обычно подключается к виртуальной сети, где работает DHCP сервер:

    [root@ i-F98949C2 ~]# cat >> /etc/sysconfig/network-scripts/ifcfg-eth0 << EOF
    DEVICE="eth0"
    NM_CONTROLLED="no"
    ONBOOT="yes"
    TYPE=Ethernet
    BOOTPROTO=dhcp
    DEFROUTE=yes
    PEERDNS=yes
    PEERROUTES=yes
    EOF


    Без этого шага созданный из шаблона сервер не получит от облака сетевых настроек и подключиться к нему будет невозможно.

    Теперь убедитесь, что SSH-сервер будет запускаться при загрузке операционной системы.

    [root@@ i-F98949C2~]# chkconfig --list | grep ssh
    sshd 0:off 1:off 2:on 3:on 4:on 5:on 6:off


    Потом — что фаервол операционой системы пропускает подключения к SSH-серверу. В некоторых случаях его можно совсем отключить, так как для каждой виртуальной сети в нашем облаке у вас уже работает фаервол, который блокирует абсолютно весь входящий трафик.

    Следующий шаг — установим автоматическую генерацию пароля администратора при каждом старте нового сервера.

    [root@ i-F98949C2 ~]# cat >> /etc/rc.local << EOF
    sh /usr/sbin/set-ssh-key.sh
    EOF


    Содержимое файла /usr/sbin/set-ssh-key.sh

    #!/bin/sh
    if [ -f /etc/.ssh_done ]; then
    exit 0
    fi
    getpw()
    {
    echo `pwqgen`
    }
    if [ $? -eq 0 ]; then
    PWRES=1
    while [ $PWRES -eq 1 ];
    do
    ROOT_PW=$(getpw)
    echo $ROOT_PW | passwd root --stdin > /dev/null 2>&1
    PWRES=$?
    done
    echo ""
    echo "$ROOT_PW" > /dev/ttyS0
    fi
    touch /etc/.ssh_done


    Этот шаг позволит каждому новому создаваемому из вашего шаблона серверу генерировать пароль для пользователя root и выдавать его на серийную консоль сервера:



    Передача дополнительных параметров виртуальному серверу


    Поле «пользовательские данные» на третьем рисунке (этап создания нового виртуального сервера) предназначено для передачи вашим серверам дополнительных параметров, инструкций или любой другой информации на этапе создания нового виртуального сервера. Получить информацию из данного поля или записать её туда можно в течение всего жизненного цикла виртуального сервера. Для этого необходимо использовать любую утилиту, позволяющую получать доступ к Amazon-совместимому API нашего облака. В этой статье мы для этих целей будем использовать утилиту boto и небольшой скрипт, иллюстрирующий работу с нашим облачным API:

    #!/usr/bin/env python

    import sys
    import os
    from boto.ec2.connection import EC2Connection
    import boto
    import boto.ec2
    from operator import attrgetter
    from optparse import OptionParser
    from boto.ec2.blockdevicemapping import BlockDeviceType
    from boto.ec2.blockdevicemapping import BlockDeviceMapping
    from pprint import pprint
    import time
    import base64
    import logging

    global region
    global conn
    AWS_ACCESS_KEY_ID = os.environ['EC2_ACCESS_KEY']
    AWS_SECRET_ACCESS_KEY = os.environ['EC2_SECRET_KEY']
    logging.basicConfig(filename="boto.log", level=logging.DEBUG)

    region = boto.ec2.regioninfo.RegionInfo(name="ru-msk-vol51", endpoint="console.cloud.croc.ru")

    conn = boto.connect_ec2(AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY,
    is_secure=False,
    region=region,
    path="/services/cloud")

    def getInstanceUserData(ami):
    reservations = conn.get_all_instances()
    instances = [i for r in reservations for i in r.instances]
    for i in instances:
    if (i.__dict__['id'] == ami):
    return base64.b64decode(i.get_attribute('userData')['userData'])
    return ''

    def setInstanceUserData(ami, userData=''):
    conn.modify_instance_attribute(ami, 'userData', base64.b64encode(userData))

    ''' Иллюстрируем работу функций '''
    setInstanceUserData('i-9A4D0DDF','test!!!!')
    print getInstanceUserData('i-9A4D0DDF')


    Дополнительный вариант использования данного поля — это возможность изменения пароля административной учетной записи, если пароль был по каким-то причинам забыт или потерян, а также установка дополнительного программного обеспечения или любая другая настройка вашего шаблона. Детальнее можно рассмотреть отдельно, если интересно, тема очень большая.

    Резюме


    Облака — удобные. Удобства начинаются с эталонных инсталляций — шаблонов. Шаблоны нужны, чтобы не конфигурировать руками каждый раз сервера, иметь возможность использовать свои дистрибутивы со своими лицензиями, экономить время, защищаться от ошибок и вообще стандартизировать процессы. Один такой шаблон мы только что создали.

    В комментариях c удовольствием отвечу на вопросы по данной части работы в облаке.
    КРОК
    IT-компания

    Комментарии 1

      0
      Честно говоря — просто выжимка из документации, если быть точнее — никакой привязки к какому-то продукту.
      «Что за облако? В каком окружении делали?»
      Создается ощущение, что первую часть публикации оторвали.

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

      Самое читаемое