4 основни инструмента, необходими при работата на DevOps инженерите

4 март
Траян Лазаров, DevOps инженер в българския офис на глобалната софтуерна компания DataArt
4 основни инструмента, необходими при работата на DevOps инженерите
DevOps специалистите са все по-търсени на пазара на труда и това направление в софтуерната разработка става все по-популярно. В същото време обаче не е лесно да се постигне едно наистина добро ниво в тази професия, тъй като тя изисква доста комплексни познания – освен опит в сферата на програмирането, са нужни и знания по системна администрация и операционни системи.

 

trayan lazarov

След като тази основа е налице, може само да се надгражда с различни инструменти, които са се превърнали в стандарт за използване. Инструментите, за които ще ви разкажа в тази статия, са само примерни и са такива, които лично аз използвам на дневна база. Разбира се, ако искате да се запознаете с още варианти, в интернет могат да бъдат намерени най-разнообразни Open-Source програми, но споменатите 5 са основополагащи.

1. Инфраструктура:  AWS + Terraform

AWS + Terraform

Нека да започнем от инфраструктурата - най-важната част и буквално основата, на която се базира вашата апликация, услуга и т.н. Тук водеща значение имат Terraform и AWS.

Вероятно повечето хора са запознати с облачните услуги на Amazon или иначе казано - AWS (Amazon Web Services). Те са най-популярната платформа за IaaS (Infrastructure as a Service). А знаете ли, че AWS и Terraform вървят ръка за ръка? Нека обясня. Terraform е софтуерен open-source инструмент, създаден от Hashicorp, чрез който да менажирате, създавате и разрушавате своята облачна инфраструктура. Всичко това се случва под формата на код, а не кликайки по безкрайни менюта.

  • Писане на код в AWS:

По този начин изглежда един ресурс като код, който може да бъде създаден в AWS. Целият файл се нарича “модул” и се пише чрез конфигурационния език HCL на Terraform.

код в AWS
  • Тerraform Plan:

Използвайте Terraform Plan в конзолата, след като сте създали всички ресурси като код, за да тествате дали планът на екзекуция съвпада с очакванията ви.

Тerraform Plan

Източник: terraform.io

  • Terraform Apply:

И накрая, като трета стъпка използвайте Terraform Apply, за да създадете тази инфраструктура при избрания от вас облачен доставчик.

Полезна документация относно Terraform можете да намерите тук: https://www.terraform.io/docs/index.html

2. CI/CD: Jenkins

CI/CD: Jenkins

Източник: Jenkins.io

Продължителната интеграция и продължителното разработване (Continuous Integration & Continuous Development) са част от основните функции, с които е ангажиран един DevOps инженер. Ще се опитам да ви запозная с основните неща, свързани с Jenkins.

Jenkins е open-source сървър, написан на популярния програмен език Java. Неговата цел е да автоматизира напълно процеса от момента, в който програмистите приключат със заданието си, до момента, в който техният код вече е в ръцете на крайния потребител под формата на приложение. Причината за популярността на Jenkins е свързана с голямата общност от хора, които го използват, както и с компаниите, които го подкрепят. Ето една примерна схема за това как работи:

CI/CD: Jenkins

Източник: Jenkins.io

А какво прави Jenkins лесен инструмент за работа и защо препоръчвам и вие да го ползвате? Ето няколко причини:

  • Лесна инсталация и конфигурация:

Изисква се просто да влезете в техният сайт https://www.jenkins.io/ и да изтеглите инсталационния файл. След като бъде инсталиран на вашата операционна система, може да се конфигурира от лесния за използване уеб-интерфейс.

  • Open-Source Софтуер:

Общността, която стои зад този инструмент, е огромна, и винаги ще има хиляди други потребители, към които да се обърнете, ако възникне проблем. За разлика от други софтуерни решения, документацията тук е на доста добро ниво.

  • Богата база от плъгини:

Гръбнакът на Jenkins всъщност са неговите плъгини, разработени от хората, които го използват ежедневно. DevOps инженерите имат на разположение над 1500 плъгина, в това число:

  1. Git - за по-бързи известия относно това кога кодът се е променил във вашето repository, за да може билда да се задейства веднага, а не да чака ръчно сканиране.
  2. Join - за паралелно изпълнение на Jenkins задачите и имплементиране на т нар. „диамантена структура“.
  3. Email Extension - за незабавна обратна връзка относно статуса на вашите пуснати задачи, която получавате по e-mail.

3. Контейнеризация: Docker

Docker

Третият инструмент, който ще разгледаме, е Docker. Това е софтуерна платформа за пакетиране на приложения, базирана на контейнери - малки и леки обособени среди, които споделят общо ядро на операционната система, но в същото време работят изолирани едно от друго.

Защо бихте използвали този подход? Защото за разлика от виртуалните машини, контейнерите работят със същия капацитет от ресурси, но по-ефективно. Стартират по-бързо, по-независими са и при евентуално възникване на проблем дават възможност за по-бързо и ефективно елиминиране поради факта, че апликацията се състои от няколко отделни части.

Ето едно сравнение между виртуална машина и контейнер:

schema

Източник: weave.works

Както се вижда, се пропуска цялата секция Guest OS, която хаби излишни ресурси, време и най-вече - нерви. Ако искате да разберете повече, посетете сайта им: https://www.docker.com/. Документацията тук отново е на ниво.

4. Деплоймънти: Kubernetes

Kubernetes

Kubernetes е последното звено, което е нужно, за да се затвори веригата. По-рано говорихме за контейнери, а Kubernetes е платформа за оркестриране на същите тези контейнери. Казано иначе – тя дава възможност за автоматизиране на процеси като менажиране, деплойване и разрастване. Kubernetes предлага следните възможности:

  1. Оркестрация на множество контейнери, намиращи се на множество хостове.
  2. Оптимално използване на хардуера без загуба на ресурси.
  3. Контрол и автоматизация на ъпдейти и деплоймънти на апликации.
  4. Увеличаване на контейнери и ресурси в движение.
  5. Прецизно управление на приложенията, което позволява винаги да работят както вие искате да работят.

Какво представлява обаче един Kubernetes Cluster и как работи в тандем с Docker? Ето тази диаграма може да ви даде яснота:

Източник: dzone.com

Най-общо казано, това са инструментите, на които исках да се спра и за които може да се говори още много. Разбира се, съществуват и редица други вариации, но лично аз, в ежедневната си работа като DevOps, използвам най-активно именно изброените в статията решения. Ако и вие сте се насочили към тази сфера, съветът ми е да се запознаете обстойно с всеки един от тези инструменти и да не спирате да надграждате познанията си, тъй като всичко се променя изключително бързо и динамично.