Často kladené dotazy v rozhovorech o DevOps a jejich odpovědi
DevOps si získává stále větší oblibu jako metoda tvorby a implementace aplikací, což se odráží ve zvýšené poptávce po specialistech v této oblasti.
Tento článek se zaměří na nejběžnější otázky, které se objevují během pohovorů na pozice DevOps, a nabídne na ně relevantní odpovědi. Pro uchazeče o práci mohou tyto otázky posloužit jako studijní materiál, který zvýší šanci na úspěch u pohovoru. Personalistům naopak mohou pomoci lépe strukturovat náborový proces.
Nejčastěji kladené otázky a odpovědi při pohovorech na pozici DevOps
Jak vnímáte pojem DevOps?
DevOps představuje přístup, jehož cílem je optimalizace pracovních postupů v průběhu celého životního cyklu vývoje softwaru. DevOps proces se často zobrazuje jako nekonečná smyčka zahrnující fáze plánování, vývoje kódu, sestavování, testování, vydávání, nasazování, provozu a monitorování.
DevOps ovlivňuje životní cyklus aplikace v etapách plánování, vývoje, doručení a provozu. Každá z těchto etap je propojena s ostatními a jednotlivé role v týmu nejsou striktně vymezeny. V pravé kultuře DevOps se každý člen týmu v určité míře podílí na každé z těchto fází.
Proč je DevOps důležitý?
Týmy, které implementují DevOps, dosahují zpravidla rychlejšího dokončení projektů. Předchází se tak komunikačním šumům, což usnadňuje implementaci potřebných vylepšení a změn. DevOps podporuje užší spolupráci mezi vývojovými a provozními týmy, kde jsou cíle více sladěny. Mezi hlavní benefity patří:
- Zlepšená komunikace
- Týmová práce a soudržnost
- Zefektivněná spolupráce
- Rychlejší dodání kvalitnějších produktů
- Snížení komplexity a rychlejší řešení problémů
- Vyšší škálovatelnost a flexibilita při přidávání nového kódu
- Stabilnější provozní prostředí
- Rozsáhlejší automatizace
- Snížení nákladů a efektivnější využití zdrojů
- Zvýšená bezpečnost díky integrovaným a automatizovaným nástrojům
Jaké jsou typické každodenní úkoly v DevOps?
Mezi každodenní úkoly, které byste mohli v této souvislosti uvést, patří:
- Zajištění kontinuální integrace a nasazování
- Přidělování a komunikace úkolů
- Návrh a koordinace testovacích scénářů
- Monitorování a sběr metrik infrastruktury a aplikací
- Analýza dat získaných v jednotlivých fázích vývoje
- Snižování chybovosti a doby potřebné k obnově po chybě
- Zkracování dodací lhůty
Jak DevOps pomáhá vývojářům?
Implementace DevOps metodologie vývojářům umožňuje, aby nemuseli čekat na zpětnou vazbu od provozního týmu ohledně chyb v jejich kódu. Mohou tak tyto problémy řešit podstatně rychleji, protože mají k dispozici průběžnou zpětnou vazbu na jejich kód.
Co je to správa verzí?
Správa verzí je postup, který umožňuje sledovat změny v souboru nebo sadě souborů v průběhu času a umožňuje tak pozdější obnovu specifických verzí. Nástroje pro správu verzí usnadňují sledování průběhu vývoje a uchovávání různých verzí zdrojového kódu, což umožňuje případný návrat k předchozím stavům. Mezi nejčastěji využívané nástroje v této fázi vývoje patří Git.
Co je CI/CD a jaké jsou jeho výhody?
Kontinuální integrace (CI)
CI zahrnuje nástroje a postupy, které usnadňují poskytování kvalitního softwaru v krátkém čase. Tím se eliminují případná úzká hrdla a předchází se technickým problémům ve fázích zavádění.
Kontinuální doručování (CD)
Tento postup automatizuje doručování změn v kódu, čímž zajišťuje, že kód může být rychle nasazen do produkčního prostředí a že aplikace fungují správně.
Kontinuální nasazování (CD)
Na rozdíl od kontinuálního doručování si kontinuální nasazování klade za cíl odstranit jakýkoliv lidský zásah při nasazování softwaru do produkčního prostředí. Publikování nového nebo změněného kódu do produkce probíhá automatizovaně.
CI/CD implementuje DevOps v celém životním cyklu aplikace. Tyto postupy napomáhají zvyšování produktivity v různých fázích procesu vývoje softwaru tím, že jej zjednodušují a automatizují.
Co je to kontinuální monitorování?
Kontinuální monitorování je DevOps postup, který zahrnuje monitorování, upozorňování a reakci na události v kódu i infrastruktuře. Díky tomu jsou problémy, které se mohou vyskytnout při implementaci, rychle detekovány a identifikovány, což vede ke zkrácení doby potřebné k jejich vyřešení.
Proč je důležité kontinuální testování?
Kontinuální testování je automatizace testů v brzkých, postupných a relevantních fázích vývoje. Je nepostradatelné, protože umožňuje garantovat kvalitu kódu. Chyby jsou detekovány včas a zpětná vazba na kód je poskytována v kratším čase.
Vysvětlete různé druhy testů používané v DevOps?
Jednotkové testy
Testují izolovaně konkrétní části kódu. Jednotkové testy se nesmí připojovat k databázi, využívat souborový systém, komunikovat s externími systémy nebo interagovat se systémovými komponentami. To jim umožňuje běžet rychle a poskytuje rychlou zpětnou vazbu, pokud by změny narušily stávající funkce.
Integrační testy
Testují větší skupiny funkcí, čímž umožňují identifikovat problémy na jejich rozhraní. Bývají pomalejší, vyžadují složitější konfiguraci a více I/O operací s databází, souborovým systémem nebo jinými systémy.
Testy nasazení
Ověřují, že nasazení proběhlo úspěšně, tedy že vaše aplikace je správně nainstalována, nakonfigurována, má přístup ke všem potřebným službám a odpovídá správně.
Kromě toho existují i testy uživatelské a testy použitelnosti. Pro podrobnější informace o testování si můžete přečíst další článek o typech testování aplikací.
Co je architektura mikroslužeb a jak se liší od tradiční architektury?
Tradiční přístup k vývoji softwaru je monolitický. To znamená, že všechny funkce aplikace jsou shromážděny do jednoho celku. V případě chyb nebo potřeby aktualizace se analyzuje kód, který řídí celý produkt.
To generuje výpadky a představuje velké riziko pro udržení kódu. Zákazníkům to způsobuje ztráty a komplikace.
V architektuře mikroslužeb jsou funkce aplikace reprezentovány nezávisle vyvinutými a integrovanými službami. Komponenty jsou samostatné, ale spolupracují při realizaci souvisejících úkolů.
Každá nezávislá služba tak běží bez ovlivnění ostatních, což platí i v případě selhání. Pokud dojde k chybě v některé funkci, je možné ji opravit bez ohrožení funkčnosti celé aplikace.
Mikroslužby umožňují, aby DevOps byl ještě agilnější a efektivnější, urychlují komplexní vývoj a zvyšují škálovatelnost aplikací.
Co je infrastruktura jako kód?
Infrastruktura jako kód je přístup k definování výpočetní a síťové infrastruktury, který využívá techniky správy zdrojového kódu a je s ní zacházeno jako s jakýmkoliv jiným softwarovým systémem.
Tento kód může být uložen pod kontrolou zdrojového kódu, což umožňuje sledování a opakovatelnou konstrukci, podléhá testovacím postupům a plné disciplíně kontinuálního dodávání.
Infrastruktura jako kód se opírá o několik principů:
- Použití definičních souborů
- Samodokumentované systémy a procesy
- Verzování všech prvků
- Kontinuální testování systémů a procesů
- Malé změny namísto velkých dávek
- Udržování služeb neustále dostupných
Nástroje pro automatizaci sestavení specifikují, jak má být software sestaven (jaké kroky je třeba provést a v jakém pořadí) a jaké jsou vyžadované závislosti (jaký další software musí být přítomen, aby bylo sestavení úspěšné).
Některé nástroje jsou vhodnější pro projekty ve specifických programovacích jazycích, jako je například Maven a Apache’s Ant, které se nejčastěji používají v Java projektech, i když je technicky možné je použít i v jiných jazycích. Ostatní, jako například Hudson nebo Jenkins, lze použít s širším spektrem projektů.
Co je to DevOps Pipeline?
DevOps Pipeline je proces, který zahrnuje několik kroků, které se provádějí před uvolněním nového softwaru. Lze ho použít ve všech fázích projektu, od integrace a testování až po doručení a nasazení. Obvykle prochází následujícími fázemi a týmy:
- Vize produktu: Definování vlastností produktu.
- Vývojový tým: Iterativní a postupné vyvíjení.
- Provozní tým: Implementace a udržování stabilního prostředí.
- Monitorování a zpětná vazba: Snaha o vytváření a využití hodnoty pro zákazníka.
Jaké jsou různé fáze CI/CD Pipeline?
Kroky, které tvoří CI/CD pipeline, zahrnují seskupení několika úkolů, které se nazývají fáze pipeline. Stručně řečeno, jedná se o tyto fáze:
- Kompilace: Fáze, ve které je aplikace kompilována.
- Testování: Fáze, ve které se testuje kód. Automatizace zde šetří čas a úsilí.
- Spuštění: Fáze, ve které je aplikace odeslána do úložiště.
- Nasazení: Fáze, ve které je kód nasazen do produkčního prostředí.
- Ověření a shoda: Lze použít nástroje pro ověřování zabezpečení obrázků, jako je například Clair, pro zajištění kvality vašich obrázků porovnáním se známými chybami zabezpečení (CVE).
Toto jsou nejběžnější fáze DevOps pipeline. Nicméně, každá společnost má své specifické potřeby a možnosti.
Co znamená virtualizace platforem a jaké jsou její výhody?
Virtualizace platforem zahrnuje simulaci celého počítačového systému pro spouštění více instancí operačních systémů současně na jediném fyzickém počítači.
V této konfiguraci má monitor virtuálního stroje (VMM) nebo hypervizor plnou kontrolu nad hardwarovými zdroji fyzického stroje. Hostované operační systémy běží na virtuálních strojích, které spravuje VMM. Virtualizace prostředí zahrnuje simulaci jednoho nebo více virtuálních strojů a síťových spojení mezi nimi.
Virtualizace může několika způsoby pomoci zkrátit dobu nasazování a minimalizovat s tím spojená rizika. Používání virtuálních strojů při nasazování je velkou pomocí při dosahování efektivní správy konfigurací jak vertikálně, tak horizontálně v rámci vašich systémů.
Konkrétně virtualizace přináší tyto výhody:
- Rychlá reakce na měnící se požadavky
- Konsolidace
- Standardizace
- Snadná údržba základních linií
Jaký je rozdíl mezi kontejnery a virtuálními stroji?
Kontejnery i virtuální stroje pracují s virtualizací a izolací prostředí za účelem nezávislého zpracování aplikací. Avšak kontejnery vytvářejí izolovaná prostředí, ve kterých mohou současně běžet různé aplikace, protože dělení probíhá na úrovni dostupných zdrojů, jako je paměť a procesor. Na druhou stranu virtuální stroj umožňuje na fyzickém stroji umístit ostatní stroje s různými operačními systémy, pevnými disky a hardwarem, nezávislými na původním stroji.
Jaký je hlavní rozdíl mezi Dockerem a Kubernetes?
Docker je jeden z nejrozšířenějších kontejnerových nástrojů DevOps. Zaměřuje se na přenositelnost aplikací, jejich umísťování do technologických kontejnerů a systémů balení a jejich přesouvání mezi různými platformami.
Kubernetes je naproti tomu nástroj pro orchestraci kontejnerů, který umožňuje sdružovat kontejnery do logických celků. Může být nasazen na více počítačích prostřednictvím automatizované distribuce.
Přečtěte si více o rozdílech mezi Kubernetes a Dockerem.
Jaké jsou některé metriky telemetrie v DevOps?
- Obchodní úroveň: Mezi příklady patří počet prodejních transakcí, příjmy z prodejních transakcí, registrace uživatelů, míra odchodů a výsledky A/B testů.
- Úroveň aplikace: Mezi příklady patří doby trvání transakcí, doby odezvy uživatelů a selhání aplikací.
- Úroveň infrastruktury: Mezi příklady patří provoz webového serveru, zatížení procesoru a využití disku.
- Úroveň klientského softwaru: Mezi příklady patří chyby aplikací, selhání a uživatelsky měřené doby trvání transakcí.
- Úroveň pipeline nasazení: Mezi příklady patří stav sestavení pipeline (červený nebo zelený u různých automatických testovacích sad), měnící se časy nasazení, frekvence nasazení, propagace testovacího prostředí a stav prostředí.
Jaké technologie používáte při práci s DevOps?
Cílem této otázky je zjistit, jaké technologie můžete využít k implementaci kultury DevOps v rámci organizace. Mezi nejběžnější technologie, které mohou DevOps týmy používat, patří:
- Kontinuální vývoj: Git, SVN, Mercurial, CVS, Jira
- Kontinuální integrace: Jenkins, Bamboo, Hudson
- Kontinuální vývoj: Nexus, Archive, Tomcat
- Kontinuální nasazení: Puppet, Chef, Docker
- Kontinuální monitorování: Splunk, ELK Stack, Continuous Nagios
- Testování: Selenium, Katalon Studio
Popište vaši zkušenost s řízením DevOps projektů.
Dovednosti DevOps se neomezují pouze na technické znalosti, ale vyžadují i dovednosti v oblasti řízení lidských zdrojů a projektového managementu, které jsou běžné u manažerů, programových ředitelů a projektových manažerů.
Důležité je vědět, jak řídit a podporovat změny, fungovat jako prostředník pro hladký přenos nových verzí kódu do provozní části, hodnotit a sledovat různé platformy a nástroje pro měření výkonu, analyzovat a sdílet výsledky s cílem zlepšit budoucí dodávky, atd.
Při zodpovídání této otázky se zaměřte na metodologii a vysvětlete svůj přístup k řešení složitých problémů. Jak máte v plánu zlepšit fungování infrastruktury? Jak plánujete spolupracovat s vývojáři na různých úrovních? Jaké monitorovací nástroje ovládáte? Zvažte také sdílení svých zkušeností s řešením konfliktů v rámci týmu.
Pro další prohloubení znalostí můžete zvážit účast na některém z kurzů DevOps.