Wokół DevOps’a narosło całkiem sporo legend. Dla jednych to tylko stanowisko, a dla innych kultura. O tym, kim jest DevOps, jakie umiejętności powinien posiadać Junior DevOps i jak postawić pierwsze kroki w tym zawodzie — rozmawiamy z Szymonem Słowickim w kolejnym odcinku podkastu “Więcej niż konteneryzacja”.
Kim jest DevOps?
Można powiedzieć, że każda firma ma swoją definicję DevOps’a. Dla jednych są to specjaliści od chmur i Kubernetes, potrafiący robić deploymenty aplikacji bądź migrować rozwiązania uruchomione w Dockerze do Kubernetes’a, a dla innych są to ludzie tworzący pipeline CI/CD. Do tego nie możemy zapomnieć o specjalistach odpowiadających za monitoring i utrzymanie wszystkich środowisk, łącznie z produkcją. A skoro definicje są różne, to i wymagania — wszystko zależy od firmy, do której chcemy aplikować. DevOps daje szerokie możliwości, ale to także zawód związany z ciągłą nauką nowych technologii, ponieważ za 2-3 lata nasz obecny stan wiedzy będzie już nieaktualny.
Junior DevOps Engineer – wymagania
Przeglądając ogłoszenia o pracę na DevOps’a możemy przeczytać, że wymaga się 2-3 lat doświadczenia, znajomości chmur i CI/CD co jest oczywiście nie na miejscu. Najważniejsza jednak jest znajomość Linuxa — bez tego nie ruszymy z miejsca. Równie ważny jest Git. Junior DevOps powinien wiedzieć, czym jest branch, jak przełączyć się na drugi branch, jak stworzyć commit, zrobić merge, rebase i revert. Powinien także posiadać fundamenty wiedzy o działaniu sieci komputerowych oraz znać podstawy poruszania się po terminalu — potrafić sprawdzić otwarte porty na danym serwerze, sprawdzić logi, rozróżnić, za co odpowiada konkretny katalog w drzewku systemowym Linux. Konieczna jest także znajomość języka angielskiego min. na poziomie B1 do czytania dokumentacji czy do komunikacji z klientem. Wymaga się podstawowej umiejętności pisania skryptów, np. w BASH’u. Niezbędna może być także znajomość Jenkins’a — popularnego narzędzia, które przygotowuje wszelkiego rodzaju automatyzacje — od prostych automatyzacji po wdrożenia całych środowisk produkcyjnych. Naszym zdaniem jednak nie jest to konieczność na etapie rekrutacji na stanowisko Junior DevOps’a.
Znajomość Kubernetes
Zatrudniając się do pierwszej pracy jako Junior DevOps powinniśmy mieć świadomość tego, że początkowo możemy zderzyć się z rzeczywistością. Choć może się nam wydawać, że posiadamy solidny fundament wiedzy, pierwsze dni w pracy mocno to zweryfikują. Problemy mogą pojawić się wszędzie, choćby ze zrozumieniem funkcjonowania Kubernetes’a. Świetnie, jeśli posiadamy podstawową wiedzę i potrafimy stworzyć własny klaster kubernetesowy oraz uruchomić aplikację wraz z ingresem i certyfikatami SSL. To już całkiem niezły start!
Kontenery w pracy DevOps
Pracując z Kubernetes’em, nie możemy nie znać Dockera. Kubernetes m.in. służy do zarządzania kontenerami i skalowania aplikacji, które są w nim uruchamiane. Przykład: Junior DevOps uruchomił deployment, napisał ingress, ale aplikacja się wysypała. Sprawdza więc logi i widzi jakiś błąd. I co dalej? Będzie prosić kogoś o pomoc, czy znajdzie przyczynę i rozwiązanie tego problemu? Bez zrozumienia działania kontenerów nie ruszy dalej.
Programowanie – umiejetność wymagana?
Na pewno warto umieć pisać skrypty w BASH’u lub Pythonie. Programowanie może przydać się w sytuacji, gdy dostajemy zwrotkę w logach w danym deploymencie i dzięki temu wiemy, co się dzieje i komu ewentualnie zgłosić problem. Choć nie trzeba być programistą, aby zostać administratorem czy DevOps’em, wypada umieć tworzyć własne skrypty, znaleźć logi i je zrozumieć, a przynajmniej szukać odpowiedzi i internecie, co one oznaczają.
DevOps w zespole
W pracy DevOps’a nie bez znaczenia są umiejętności komunikacyjne. Praca w zespole jest tu bardzo istotnym elementem. Zwłaszcza umiejetność adresowania i rozmawiania o problemach, a także wspólne poszukiwania rozwiązań to pożądane kompetencje miękkie pracownika. Warto na pewno tworzyć własne dokumentacje, zapisywać sobie pytania i wątpliwości, a następnie wspólnie z zespołem krok po kroku omawiać te zagadnienia na przeznaczonych do tego spotkaniach. W pracy w międzynarodowym środowisku te umiejętności komunikacyjne są szczególnie ważne — DevOps może mieć kontakt z osobami z różnych kontynentów, żyjących w różnych strefach czasowych. Wyobraźmy sobie sytuację, w której pełnimy dyżur i o 2 w nocy otrzymujemy alert — widzimy, że coś się dzieje z produkcją i musimy odpowiednio zareagować, poinformować osoby odpowiedzialne za kontakt z klientem, zaktualizować status-page firmy oraz opisać dany problem. W międzyczasie oczywiście spisujemy stosowne notatki, aby niczego nie pominąć. Presja czasu, późna godzina i nieoczywiste problemy… Trzeba do tego przywyknąć, bo takie sytuacje w pracy DevOps’a po prostu się zdarzają, szczególnie jeśli w zakresie naszych obowiązków leżą dyżury oncall.
A co z portfolio w rekrutacji?
Na zakończenie kwestia portfolio, którym warto pochwalić się na etapie rekrutacji. Możemy bazować na swojej aplikacji, którą uruchomiliśmy lub na gotowym projekcie z GitHub’a. Możemy spróbować wdrożyć go zgodnie z najlepszymi praktykami, a plusem może być w tym przypadku użycie HELM’a bądź ARGO CD. Próbujemy cały ten proces jak najlepiej udokumentować w README wraz z instrukcją, jak uruchomić projekt lokalnie, tak aby osoba sprawdzająca nasze kompetencje mogła szybko na swoim laptopie uruchomić projekt i zobaczyć, czy to wszystko, co opisaliśmy działa. Warto utrzymywać swój projekt w internecie, publikując go we własnej domenie.
Podsumowując, choć zakres pożądanych kompetencji DevOps’a jest dość szeroki, wiele zależy od firmy, do której decydujemy się rekrutować. Każda firma wymaga znajomości innego stacku technologicznego w zależności od używanych technologi przez firmę. Pewne jest jedno — bez umiejętności takich jak pisanie skryptów, znajomość języka angielskiego na poziomie minimum B1, płynnym poruszaniu się w terminalach Linuxowych, podstwach Gita, fundamentach Kubernetes’a i kontenerów, będzie naprawdę ciężko.