
DevOps специалистите са все по-търсени на пазара на труда и това направление в софтуерната разработка става все по-популярно. В същото време обаче не е лесно да се постигне едно наистина добро ниво в тази професия, тъй като тя изисква доста комплексни познания – освен опит в сферата на програмирането, са нужни и знания по системна администрация и операционни системи.
След като тази основа е налице, може само да се надгражда с различни инструменти, които са се превърнали в стандарт за използване. Инструментите, за които ще ви разкажа в тази статия, са само примерни и са такива, които лично аз използвам на дневна база. Разбира се, ако искате да се запознаете с още варианти, в интернет могат да бъдат намерени най-разнообразни Open-Source програми, но споменатите 5 са основополагащи.
1. Инфраструктура: AWS + Terraform
Нека да започнем от инфраструктурата - най-важната част и буквално основата, на която се базира вашата апликация, услуга и т.н. Тук водеща значение имат Terraform и AWS.
Вероятно повечето хора са запознати с облачните услуги на Amazon или иначе казано - AWS (Amazon Web Services). Те са най-популярната платформа за IaaS (Infrastructure as a Service). А знаете ли, че AWS и Terraform вървят ръка за ръка? Нека обясня. Terraform е софтуерен open-source инструмент, създаден от Hashicorp, чрез който да менажирате, създавате и разрушавате своята облачна инфраструктура. Всичко това се случва под формата на код, а не кликайки по безкрайни менюта.
- Писане на код в AWS:
По този начин изглежда един ресурс като код, който може да бъде създаден в AWS. Целият файл се нарича “модул” и се пише чрез конфигурационния език HCL на Terraform.

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

Източник: terraform.io
- Terraform Apply:
И накрая, като трета стъпка използвайте Terraform Apply, за да създадете тази инфраструктура при избрания от вас облачен доставчик.
Полезна документация относно Terraform можете да намерите тук: https://www.terraform.io/docs/index.html
2. CI/CD: Jenkins
Източник: Jenkins.io
Продължителната интеграция и продължителното разработване (Continuous Integration & Continuous Development) са част от основните функции, с които е ангажиран един DevOps инженер. Ще се опитам да ви запозная с основните неща, свързани с Jenkins.
Jenkins е open-source сървър, написан на популярния програмен език Java. Неговата цел е да автоматизира напълно процеса от момента, в който програмистите приключат със заданието си, до момента, в който техният код вече е в ръцете на крайния потребител под формата на приложение. Причината за популярността на Jenkins е свързана с голямата общност от хора, които го използват, както и с компаниите, които го подкрепят. Ето една примерна схема за това как работи:

Източник: Jenkins.io
А какво прави Jenkins лесен инструмент за работа и защо препоръчвам и вие да го ползвате? Ето няколко причини:
- Лесна инсталация и конфигурация:
Изисква се просто да влезете в техният сайт https://www.jenkins.io/ и да изтеглите инсталационния файл. След като бъде инсталиран на вашата операционна система, може да се конфигурира от лесния за използване уеб-интерфейс.
- Open-Source Софтуер:
Общността, която стои зад този инструмент, е огромна, и винаги ще има хиляди други потребители, към които да се обърнете, ако възникне проблем. За разлика от други софтуерни решения, документацията тук е на доста добро ниво.
- Богата база от плъгини:
Гръбнакът на Jenkins всъщност са неговите плъгини, разработени от хората, които го използват ежедневно. DevOps инженерите имат на разположение над 1500 плъгина, в това число:
- Git - за по-бързи известия относно това кога кодът се е променил във вашето repository, за да може билда да се задейства веднага, а не да чака ръчно сканиране.
- Join - за паралелно изпълнение на Jenkins задачите и имплементиране на т нар. „диамантена структура“.
- Email Extension - за незабавна обратна връзка относно статуса на вашите пуснати задачи, която получавате по e-mail.
3. Контейнеризация: Docker
Третият инструмент, който ще разгледаме, е Docker. Това е софтуерна платформа за пакетиране на приложения, базирана на контейнери - малки и леки обособени среди, които споделят общо ядро на операционната система, но в същото време работят изолирани едно от друго.
Защо бихте използвали този подход? Защото за разлика от виртуалните машини, контейнерите работят със същия капацитет от ресурси, но по-ефективно. Стартират по-бързо, по-независими са и при евентуално възникване на проблем дават възможност за по-бързо и ефективно елиминиране поради факта, че апликацията се състои от няколко отделни части.
Ето едно сравнение между виртуална машина и контейнер:

Източник: weave.works
Както се вижда, се пропуска цялата секция Guest OS, която хаби излишни ресурси, време и най-вече - нерви. Ако искате да разберете повече, посетете сайта им: https://www.docker.com/. Документацията тук отново е на ниво.
4. Деплоймънти: Kubernetes
Kubernetes е последното звено, което е нужно, за да се затвори веригата. По-рано говорихме за контейнери, а Kubernetes е платформа за оркестриране на същите тези контейнери. Казано иначе – тя дава възможност за автоматизиране на процеси като менажиране, деплойване и разрастване. Kubernetes предлага следните възможности:
- Оркестрация на множество контейнери, намиращи се на множество хостове.
- Оптимално използване на хардуера без загуба на ресурси.
- Контрол и автоматизация на ъпдейти и деплоймънти на апликации.
- Увеличаване на контейнери и ресурси в движение.
- Прецизно управление на приложенията, което позволява винаги да работят както вие искате да работят.
Какво представлява обаче един Kubernetes Cluster и как работи в тандем с Docker? Ето тази диаграма може да ви даде яснота:

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