Наръчник за използване на CGroups в облака

Е, както знаете, GNU & Linux са страхотни. Защо? Защото можем да ползваме контролни групи (CGroups)! Тази публикация:

  • ще ви научи как да защитите критичните системни процеси както за паметта, така и за процесора.
  • и предоставя видео наръчник за въвеждане на cgroups на работещ сървър.
  • показва примерно внедряване на CGroups или SystemD slices.

Как да държите всичко под контрол

Можете да използвате CGroups, за да ограничите количеството ресурси, което е разрешено за процес или група от процеси. Да, така е. След като сте поставили даден процес в CGroups, можете спокойно да забравите за недостиг на изчислителни мощности.

В CloudSigma обичамe CGroups. Всъщност ги обичаме толкова много, че ги използваме навсякъде. Използваме CGroups за нашите чаши за кафе! Шегата настрана, използваме ги, за да ограничим наличните ресурси за процесите, които се изпълняват на нашите сървъри. По този начин ги държим под контрол.

Не по-малко важно е, че ги използваме, за да гарантираме ресурсите нужни на най-важните подсистеми на нашите физически хостове, което води до стабилност на клиентските виртуални машини.

Например, нашата системна част разполага само с 4 GiB! Повече от достатъчно за всяка GNU & Linux система да работи, нали? А в началото беше само 640 kiB… 🙁

Как да направим това? Например, как можем да гарантираме ресурси за нашата DRBD сторидж система?

Лесно! Ние просто ограничаваме всичко. И оставяме достатъчно ресурси за дистрибутирания сторидж CGroup, което в същото време има свои собствени ограничени.

Ако не знаете как да правите CGroups, позволете ми да ви науча на основите в този блог пост…

Има различни видове CGroups. Имаме памет CGroups, CPU CGroups, Block устройство CGroups и т.н.

Наблюдавайте ме как ограничавам процес в работеща система в този видеоклип:

Започваме

Първо инсталирайте инструментите, от които се нуждаете, за да манипулирате CGroups. Така е много по-лесно.

Аз съм потребител на Funtoo/Gentoo и Fedora, така че примерите са в контекста на тези операционни системи, но са също така постижими във всички Linux дистрибуции:

    # Funtoo/Gentoo
    su -c 'emerge libCGroup'

    # Fedora
    su -c 'yum -y install libCGroup-tools'

Вече сме готови да създадем няколко CGroups.

Да кажем, че имате потребител в сървъра си, който използва много повече памет, отколкото бихте искали. Да предположим, че името му е Благоварт. Да кажем, че е използвал много повече памет, отколкото ви се иска и желаете да ограничите паметта и изчислителните мощности, които той използва.

Затова създаваме CGroups за процесора и паметта:

    # become root
    su -

    # create blagovart's CGroup
    cgcreate -g cpu,memory:blagovart

Тази команда ще създаде директория в: /sys/fs/CGroup/cpu/blagovart и /sys/fs/CGroup/memory/blagovart. Принципно можем да постигнем това просто с mkdir, но е по-добре да използвате инструментите, предоставени от libCGroup. Те се грижат за някои от изисканията за работа на CGroups.

Така създадохме CGroups паметта и процесора на Благоварт. Сега нека създадем контейнер за неговия скрипт:

    cgcreate -g cpu,memory:blagovart/litecoin-mining

И да поставим скрипта тук:

    cgclassify -g cpu,memory:blagovart/litecoin-mining $( pidof my-litecoin-mining-script )

Сега неговият скрипт е готов, но все още не сме създали ограниченията. Нека определим някои лимити:

    # Set memory to 1 GiB
    cgset -r memory.limit_in_bytes=1G blagovart/litecoin-mining

    # Set CPU priority to ~10% (1024 is 100% priority)
    cgset -r cpu.shares=102 blagovart/litecoin-mining

И ето, вече Благоварт няма да използва всички ресурси и останалите потребители ще бъдат по-щастливи!

Сега можем да направим това в цялата система.

SystemD Slices

Ако използвате SystemD система като Fedora, трябва да прочетете за slices. Човек може лесно да конфигурира ограничения в slices, също както ограниченията на груповите процеси и на ресурсите.

Пример:

    # constraint users' memory usage to 256 MiB
    systemctl set-property user.slice MemoryLimit=256M

    # constraint system's memory usage to 512 MiB
    systemctl set-property system.slice MemoryLimit=512M

Готово! Това вече е постоянно. Тъй като има промени, за да бъдат приложени ще трябва да рестартирате системата.

Тази команда ще създаде следните файлове:

    /etc/systemd/system/system.slice.d/50-MemoryLimit.conf
    /etc/systemd/system/user.slice.d/50-MemoryLimit.conf

Ако искате настройките да изчезнат просто ги изтрийте и рестартирайте.

За системи, които частично използват SystemD, като Ubuntu 14.04 или за такива, които не го използват, като Funtoo, имате други опции.

Една от тях използва следния код:

# /etc/cgconfig.conf
    group litecoin-mining {
      cpu { }
      memory { }
    }

    group blagovart/litecoin-mining {
      cpu {
        cpu.shares = 102;
      }
      memory {
        memory.limit_in_bytes = 1G;
      }
    }

Недостатък е, че все още не поставям скрипта в CGroups. Това просто създава CGroup структура, към която да закача процеси. В този случай просто мога да направя следното:

    cgclassify -g cpu,memory:blagovart/litecoin-mining $( pidof my-litecoin-mining-script )

И след това идва ред на Ubuntu. Доколкото знам, Ubuntu 14.04, най-новият LTS към момента на писане, има проблеми със SystemD. Ще е нужен алтернативен подход като init скрипт :

# /etc/init/cgroups-myCGroups
    description "My CGroups Init"
    author "Renich Bon Ciric "

    start on started CGroup-lite

    console log

    pre-start script
        # create main CGroups
        cgcreate -g cpu,memory:blagovart
        
        # set memory to 1 GiB
        cgset -r memory.limit_in_bytes=1G blagovart/litecoin-mining

        # set CPU priority to ~10% (1024 is 100% priority)
        cgset -r cpu.shares=102 blagovart/litecoin-mining
    end script

И това е! Сега имате конфигурирани CGroups. Както виждате, лесно е да се работи с тях, но е много по-добре да имате система, съвместима със SystemD, благодарение на slices.

CGroups е страхотен ресурс от ядрото на Linux. Можете да го използвате навсякъде, където искате да контролирате използването на ресурси. Например, имаме библиотека CGroups, наречена: cgroupspy, която можете свободно да използвате от Python, за да направите каквото желаете със CGroups. Както обикновено, нашият лиценз няма как да бъде по-безплатен:

References

About Ekaterina Palasheva

Ekaterina is a Marketing Expert at CloudSigma, pursuing a bachelor's degree in Business Administration at the University of Mannheim. Following her strong interest in technology and the business of technology she is currently contributing to the website content of Cloudsigma and supports all marketing campaigns, analysis and events.