Praktyka DevOps zyskuje na popularności jako nowoczesna metoda tworzenia i wprowadzania aplikacji, co skutkuje zwiększonym popytem na specjalistów z tej dziedziny.
W tym opracowaniu przyjrzymy się często zadawanym pytaniom podczas rozmów kwalifikacyjnych na stanowisko DevOps, oraz zaproponujemy odpowiedzi. Wykorzystanie tych pytań jako materiału do nauki może podnieść Twoje szanse na zdobycie pracy. Jeżeli jesteś rekruterem, to pytania te mogą stanowić wsparcie w procesie rekrutacji.
Najczęściej zadawane pytania i odpowiedzi na rozmowie o pracę DevOps
Jak rozumiesz pojęcie DevOps?
DevOps to podejście skoncentrowane na usprawnieniu pracy w całym cyklu życia oprogramowania. Jest to proces przedstawiany jako niekończąca się pętla, obejmująca fazy planowania, kodowania, budowania, testowania, wypuszczania, wdrażania, operacji i monitorowania.
DevOps ma wpływ na cykl życia aplikacji na każdym etapie, od planowania, poprzez tworzenie i dostarczanie, aż po eksploatację. Poszczególne fazy są od siebie współzależne i nie są specyficzne dla konkretnej roli. W prawdziwej kulturze DevOps, każda osoba zaangażowana jest w mniejszym lub większym stopniu w każdą z tych faz.
Dlaczego metodyka DevOps jest istotna?
Zespoły, które stosują praktyki DevOps, zazwyczaj realizują projekty w szybszym tempie. Minimalizując problemy komunikacyjne, umożliwiają one szybkie wprowadzanie ulepszeń oraz innych niezbędnych modyfikacji. DevOps sprzyja wzmocnionej współpracy pomiędzy zespołami programistycznymi i operacyjnymi, gdzie ich cele są bardziej zbieżne. Główne korzyści to:
- Usprawniona komunikacja
- Zgrana praca zespołowa i spójność
- Efektywniejsza współpraca
- Szybsze dostarczanie wysokiej jakości produktów
- Zmniejszona złożoność i sprawne rozwiązywanie problemów
- Lepsza skalowalność i elastyczność we wprowadzaniu nowego kodu
- Stabilniejsze środowiska pracy
- Większa automatyzacja
- Redukcja kosztów i optymalizacja wykorzystania zasobów
- Wzmocnione bezpieczeństwo dzięki wbudowanym i zautomatyzowanym narzędziom
Jakie są typowe obowiązki specjalisty DevOps?
Do typowych codziennych zadań zaliczyć można:
- Zapewnienie ciągłej integracji i ciągłego wdrażania
- Delegowanie i komunikowanie zadań
- Projektowanie i realizacja procedur testowych
- Monitorowanie i zbieranie danych o infrastrukturze i aplikacjach
- Analiza wyników uzyskanych na każdym etapie rozwoju
- Redukcja wskaźnika błędów i skrócenie czasu potrzebnego na ich naprawę
- Skrócenie czasu dostarczania oprogramowania
W jaki sposób DevOps wspiera programistów?
Dzięki wdrożeniu metodologii DevOps, programiści nie są zmuszeni czekać na informacje zwrotne od zespołu operacyjnego w celu naprawy błędów w kodzie. Mogą oni rozwiązywać problemy szybciej, dzięki ciągłemu przepływowi informacji zwrotnej.
Co rozumiemy przez kontrolę wersji?
Kontrola wersji to praktyka śledzenia zmian wprowadzanych w pliku lub zbiorze plików w czasie, pozwalająca na przywrócenie określonych wersji w przyszłości. Narzędzie do kontroli wersji umożliwia łatwe śledzenie postępów w rozwoju oprogramowania oraz zapisywanie różnych wersji kodu źródłowego, co ułatwia powrót do poprzedniej wersji w razie potrzeby. Jednym z najczęściej używanych narzędzi w tym zakresie jest Git.
Czym jest CI/CD i jakie są jego korzyści?
Ciągła integracja (CI)
CI to zbiór narzędzi i praktyk, które upraszczają dostarczanie wysokiej jakości oprogramowania. W ten sposób minimalizowane są wąskie gardła i zapobiega się problemom technicznym w fazach wdrożenia.
Ciągłe dostarczanie (CD)
Ta praktyka automatyzuje dostarczanie zmian w kodzie, co gwarantuje szybkie wprowadzenie zmian w środowisku produkcyjnym oraz prawidłowe działanie aplikacji.
Ciągłe wdrażanie (CD)
W przeciwieństwie do ciągłego dostarczania, ciągłe wdrażanie dąży do wyeliminowania ludzkiej interwencji podczas wprowadzania oprogramowania do środowiska produkcyjnego. W tym przypadku publikowanie nowego lub zmienionego kodu do produkcji jest w pełni zautomatyzowane.
CI/CD to implementacja DevOps w cyklu życia aplikacji. Praktyki te wspomagają poprawę produktywności na różnych etapach procesu tworzenia oprogramowania poprzez jego usprawnienie i automatyzację.
Czym jest ciągłe monitorowanie?
Ciągłe monitorowanie to praktyka DevOps polegająca na monitorowaniu, alertowaniu i podejmowaniu działań zarówno w odniesieniu do kodu jak i infrastruktury. Dzięki temu, wszelkie problemy mogące wystąpić we wdrożeniu są szybko wykrywane i identyfikowane, co skraca czas rozwiązywania problemów.
Dlaczego ciągłe testowanie jest istotne?
Ciągłe testowanie to automatyzacja testów na wczesnym etapie, stopniowo i odpowiednio w potoku rozwoju. Jest to kluczowe dla zapewnienia jakości kodu. Błędy są wykrywane na wczesnym etapie, a informacje zwrotne dotyczące kodu są przekazywane szybciej.
Omów kilka rodzajów testów wykorzystywanych w DevOps?
Testy jednostkowe
Testują konkretny fragment kodu w izolacji. Testy jednostkowe nie mogą być powiązane z bazą danych, systemem plików, komunikacją z systemami zewnętrznymi, ani interakcją z komponentami systemu. Daje to możliwość szybkiego działania oraz otrzymania szybkiej informacji zwrotnej na temat tego, czy zmiany naruszają istniejącą funkcjonalność.
Testy komponentów
Testują one większe grupy funkcji w celu identyfikacji potencjalnych problemów. Zwykle są wolniejsze, wymagają bardziej złożonej konfiguracji oraz większej liczby połączeń wejścia/wyjścia z bazą danych, systemem plików i innymi systemami.
Testy wdrożeniowe
Testy te sprawdzają poprawność wdrożenia, czyli czy aplikacja jest poprawnie zainstalowana, skonfigurowana, ma dostęp do potrzebnych usług oraz czy działa poprawnie.
Poza tym przeprowadzane są również testy eksploatacyjne i użytkowe. Więcej o testowaniu dowiesz się z artykułu o rodzajach testów aplikacji.
Czym jest architektura mikroserwisów i czym różni się od tradycyjnej architektury?
Tradycyjne podejście do pisania oprogramowania jest monolityczne, co oznacza, że wszystkie funkcje aplikacji są umieszczone w jednym bloku. W przypadku wystąpienia błędów lub potrzeby aktualizacji, analizowany jest kod całej aplikacji.
Takie podejście skutkuje zatrzymaniami lub nawet awariami, co stanowi poważne zagrożenie dla integralności kodu, a dla klientów oznacza straty i problemy.
W architekturze mikroserwisów funkcje aplikacji są realizowane przez niezależnie rozwijane i zintegrowane usługi. Komponenty te działają oddzielnie, ale współpracują ze sobą w celu realizacji powiązanych zadań.
Dzięki temu każda usługa działa niezależnie od pozostałych, dotyczy to również sytuacji awaryjnych. Jeżeli jedna z funkcji ulegnie awarii, można ją naprawić bez wpływu na działanie całej aplikacji.
Pojawienie się mikroserwisów zwiększa sprawność i efektywność metodologii DevOps, przyspieszając tworzenie oprogramowania i czyniąc aplikacje bardziej skalowalnymi.
Czym jest infrastruktura jako kod?
Infrastruktura jako kod (IaC) to podejście do definiowania infrastruktury obliczeniowej i sieciowej z wykorzystaniem metod zarządzania kodem źródłowym, traktując infrastrukturę jako system oprogramowania.
Kod ten może być przechowywany w systemie kontroli wersji, co umożliwia przejrzystość i powtarzalność konfiguracji, z zachowaniem praktyk testowych i pełnej dyscypliny ciągłego dostarczania.
Praktyki wchodzące w skład IaC to:
- Wykorzystywanie plików definicji
- Systemy i procesy o charakterze samodokumentującym
- Wersjonowanie wszystkich elementów
- Ciągłe testowanie systemów i procesów
- Wprowadzanie małych zmian zamiast dużych partii
- Zapewnienie ciągłej dostępności usług
Narzędzia do automatyzacji budowania oprogramowania określają sposób jego tworzenia (kroki do wykonania i ich kolejność) oraz zależności (jakie inne oprogramowanie jest potrzebne do pomyślnego zakończenia kompilacji).
Niektóre narzędzia są lepiej przystosowane do projektów w określonych językach programowania. Przykładowo Maven i Apache’s Ant, mimo że mogą być wykorzystywane w innych językach, są najczęściej używane w projektach Java. Inne narzędzia, jak Hudson czy Jenkins, mają szersze zastosowanie w różnorodnych projektach.
Co to jest potok DevOps?
Potok DevOps to proces obejmujący szereg kroków przed wydaniem nowego oprogramowania. Może być on wykorzystywany na wszystkich etapach projektu, od integracji i testowania, po dostarczanie i wdrażanie. Ogólnie rzecz biorąc, obejmuje on następujące etapy i zespoły:
- Wizja produktu: definiuje cechy produktu;
- Zespół programistyczny: tworzy produkt w sposób iteracyjny;
- Zespół operacyjny: wdraża i utrzymuje stabilne środowisko;
- Monitorowanie i informacja zwrotna: dążenie do generowania wartości i użytkowania przez klienta.
Jakie są etapy potoku CI/CD?
Etapy potoku CI/CD to zgrupowane zadania zwane etapami potoku. W skrócie są to:
- Kompilacja: etap budowania aplikacji;
- Test: etap testowania kodu, automatyzacja oszczędza tu czas i wysiłek;
- Wydanie: aplikacja jest wysyłana do repozytorium;
- Wdrożenie: kod jest wdrażany w środowisku produkcyjnym;
- Walidacja i zgodność: można stosować narzędzia do weryfikacji bezpieczeństwa obrazu, takie jak Clair, aby zapewnić jakość obrazów, poprzez porównanie ich ze znanymi lukami (CVE).
Są to najczęściej spotykane etapy potoku DevOps, jednak każda firma ma swoje specyficzne potrzeby i potok.
Co oznacza wirtualizacja platformy i jakie są jej zalety?
Wirtualizacja platformy to symulacja całego systemu komputerowego w celu równoczesnego uruchomienia wielu instancji systemów operacyjnych na jednej maszynie fizycznej.
W tym modelu, monitor maszyny wirtualnej (VMM) lub hiperwizor ma pełną kontrolę nad zasobami sprzętowymi. Systemy operacyjne gościa działają na maszynach wirtualnych, którymi zarządza program VMM. Wirtualizacja środowiska polega na symulowaniu jednej lub więcej maszyn wirtualnych oraz połączeń sieciowych pomiędzy nimi.
Wirtualizacja może na kilka sposobów pomóc w skróceniu czasu potrzebnego na wdrożenie i redukcji ryzyka. Wykorzystanie maszyn wirtualnych jest bardzo pomocne w efektywnym zarządzaniu konfiguracją w pionie i poziomie systemów.
Głównymi zaletami wirtualizacji są:
- Szybkie reagowanie na zmieniające się wymagania
- Konsolidacja zasobów
- Normalizacja środowiska
- Łatwość utrzymania linii bazowych
Jaka jest różnica między kontenerami a maszynami wirtualnymi?
Zarówno kontener jak i maszyna wirtualna wykorzystują wirtualizację i izolację środowisk do niezależnego przetwarzania aplikacji. Kontenery tworzą izolowane środowiska, w których różne aplikacje mogą działać jednocześnie, ponieważ podział dokonywany jest na poziomie dostępnych zasobów, takich jak pamięć i moc obliczeniowa. Z kolei maszyna wirtualna pozwala na umieszczenie na jednej maszynie fizycznej innych maszyn z różnymi systemami operacyjnymi, dyskami twardymi i sprzętem, niezależnie od oryginalnej konfiguracji.
Jaka jest podstawowa różnica między platformą Docker a Kubernetes?
Docker jest jednym z najpopularniejszych narzędzi kontenerowych w DevOps. Koncentruje się na przenośności aplikacji, umieszczaniu ich w kontenerach, pakowaniu i przenoszeniu ich między różnymi platformami.
Z kolei Kubernetes jest narzędziem do orkiestracji kontenerów, które umożliwia grupowanie kontenerów według logicznej kategoryzacji. Może być wdrożony na wielu maszynach poprzez automatyczną dystrybucję.
Przeczytaj więcej o Kubernetes vs. Docker.
Jakie są metryki telemetrii stosowane w DevOps?
- Poziom biznesowy: np. liczba transakcji sprzedaży, przychody ze sprzedaży, rejestracje użytkowników, wskaźnik rezygnacji oraz wyniki testów A/B.
- Poziom aplikacji: np. czasy transakcji, czasy odpowiedzi użytkownika, awarie aplikacji.
- Poziom infrastruktury: np. ruch na serwerze WWW, obciążenie procesora, wykorzystanie dysku.
- Poziom oprogramowania klienckiego: np. błędy aplikacji, awarie i czasy transakcji mierzone przez użytkowników.
- Poziom potoku wdrażania: np. status potoku kompilacji (czerwony/zielony dla testów), terminy wdrożenia, częstotliwość wdrożeń, promocje środowiska testowego, status środowiska.
Jakich technologii używasz w DevOps?
Pytanie to ma na celu sprawdzenie znajomości technologii, które mogą być wykorzystane w celu wdrożenia kultury DevOps w organizacji. Do najpopularniejszych technologii w DevOps zalicza się:
- Ciągły rozwój: Git, SVN, Mercurial, CVS, Jira
- Ciągła integracja: Jenkins, Bamboo, Hudson
- Ciągłe dostarczanie: Nexus, Archiwum, Tomcat
- Ciągłe wdrażanie: Puppet, Chef, Docker
- Ciągłe monitorowanie: Splunk, ELK Stack, Continuous Nagios
- Testowanie: Selenium, Katalon Studio
Opowiedz o swoim doświadczeniu w zarządzaniu projektami DevOps
Umiejętności DevOps to nie tylko wiedza techniczna, ale również kompetencje miękkie i menedżerskie, często spotykane wśród menedżerów, kierowników programów i projektów.
Konieczna jest umiejętność zarządzania zmianami i ich wspierania, stworzenia mechanizmu umożliwiającego płynne przenoszenie nowych wersji kodu do warstwy operacyjnej, oceny i monitorowania różnych platform i narzędzi do mierzenia wydajności, analizy i publikacji wyników w celu optymalizacji przyszłych wydań.
Odpowiadając na to pytanie, należy zaprezentować metodologiczne podejście i opowiedzieć o swoim doświadczeniu w rozwiązywaniu złożonych problemów. Jak zamierzasz usprawnić infrastrukturę? Jak planujesz współpracować z programistami front-endu, middle-endu i back-endu? Jakie narzędzia do monitorowania opanowałeś? Warto również wspomnieć o swoim doświadczeniu w rozwiązywaniu konfliktów w zespole.
W celu pogłębienia wiedzy, warto rozważyć zapisanie się na jeden z kursów DevOps.
newsblog.pl
Maciej – redaktor, pasjonat technologii i samozwańczy pogromca błędów w systemie Windows. Zna Linuxa lepiej niż własną lodówkę, a kawa to jego główne źródło zasilania. Pisze, testuje, naprawia – i czasem nawet wyłącza i włącza ponownie. W wolnych chwilach udaje, że odpoczywa, ale i tak kończy z laptopem na kolanach.