Být moderním DevOps inženýrem představuje z hlediska technologií náročnou úlohu.
Je vyžadována znalost běžných programovacích jazyků, jako jsou Node.JS, skriptovací jazyky, Python a dávkové skripty. Dále se očekává porozumění tomu, jak začlenit automatizaci testování do procesů nasazování.
Jako integrátor kódu do automatizovaných pipeline musíte mít alespoň základní přehled o funkcionalitách různých cloudových služeb.
Navzdory této technologické komplexnosti nejsou technické dovednosti vždy hlavním nedostatkem DevOps inženýrů. Ačkoli by se dalo očekávat, že klíčem je zvládnutí technických dovedností, různé poznatky od profesionálů v oblasti DevOps ukazují, že takzvané „měkké dovednosti“ jsou často ještě důležitější.
Klíčové kompetence v DevOps
Zdroj: devopsuniversity.org
Sledování interakcí DevOps inženýra v rámci Scrum týmu je často velmi zajímavé. Většinou mají málo detailů o konkrétním obsahu úkolů, které implementuje zbytek týmu, a to z důvodu zaměření na technické informace o specifických funkcích.
Přesto musí být schopni začlenit výstupy týmu do jednoho funkčního kanálu nasazení spolu s prováděním a ověřováním různých automatických testů.
V takovém případě už nestačí být jen technickým expertem. Komunikace se stává klíčovým aspektem úspěchu. Podívejme se tedy na nejdůležitější požadované dovednosti pro DevOps.
Měkké dovednosti
Právě spolupráce a diskuse v agilním týmu jsou hlavním důvodem, proč nedostatek měkkých dovedností dominuje v seznamu dovedností DevOps. Pokud vás stále zajímá proč, zde jsou některé z nejvýznamnějších argumentů:
- DevOps inženýři nemohou být efektivní bez schopnosti adaptovat se na zbytek vývojového týmu. Tento tým buduje základy softwaru nebo funkcí platformy. Je úkolem DevOps inženýra vytvořit pro to funkční prostředí, aby to všechno běželo.
- Kromě toho, že jsou v souladu s vlastním vývojovým týmem, jsou také klíčovým kontaktním bodem pro externí zainteresované strany, které potřebují přístup k softwarové platformě. Musí být schopni porozumět těmto požadavkům a přeložit veškerou technickou komplexitu automatizovaného cloudového prostředí do srozumitelné podoby pro netechnické uživatele. Slouží tak jako prostředník mezi vývojovým týmem a externími partnery.
- Zatímco specifické technické dovednosti se lze naučit pomocí vzdělávacích systémů, zdokonalování v oblasti měkkých dovedností vyžaduje mnohem hlubší práci s vlastní integritou a osobností. Zahrnuje i schopnost dívat se na sebe z jiné perspektivy a identifikovat oblasti, kde je prostor pro růst. Ne každý toho je snadno schopen.
Navazování kontaktů
Při pohledu na technologickou mapu moderních cloudových platforem není těžké se ztratit. Je potřeba pracovat se službami souborového systému, s více databázovými službami, backendovými API, serverovými a bezserverovými architekturami, front-endovými službami, modely strojového učení, hybridními prostředími, virtuálními privátními sítěmi, nástroji pro vyrovnávání zátěže s vysokou dostupností, různými streamovacími službami v reálném čase a mnoha dalšími.
Není možné vědět všechno o všem. Je ale naprosto nezbytné, aby DevOps inženýři věděli, jak to všechno propojit do jedné funkční softwarové platformy. Vytvoření silné sítě kontaktů je nutností.
Nalezení optimální rovnováhy mezi jednoduchostí a efektivitou komunikace distribuovaných systémů je výzvou, kterou si musí být vědomi a připraveni týmu řešení nabídnout.
O tom, že infrastruktura, kterou budujete, je na dostatečné úrovni, se obvykle přesvědčíte, až když se začnete vážněji zabývat bezpečnostními otázkami a výzvami platformy. A hádáte správně – je to opět doména DevOps inženýra.
Namísto toho, abyste se drželi starých, osvědčených kontaktů, musíte neustále hledat nové, abyste pokryli novou službu, kterou váš tým právě vyžaduje.
Testování softwaru
Flexibilita v oblasti verzování softwaru je kritická, zejména v agilním prostředí. Můžete pracovat v nastavení scrumu s dvoutýdenními sprinty. Z toho vyplývá, že se každé dva týdny očekává nové produkční vydání.
Pokud se zamyslíte nad celým životním cyklem projektu, který zahrnuje plánování, odhadování, vývoj, testování a uvolňování, nemůžete toho dosáhnout bez rozsáhlé automatizace co největšího počtu těchto kroků.
Zásadním předpokladem úspěchu v tomto prostředí (a následně i rychlejšího nasazení do produkce) je zaměření na automatizaci testování. Rychlejší nasazení spolu s automatizovanými testy vedou ke kratším časovým intervalům pro zpětnou vazbu od uživatelů směrem k vývojářům.
Pro DevOps inženýra to znamená integraci výstupů různých testovacích týmů do CI/CD pipeline:
- Umožnit spuštění skriptu unit testů po každém odeslání do repozitáře. Pokud neexistují, domluvte se s vývojáři na jejich vytvoření.
- Zahrnout integrační testovací případy do CI/CD kanálů s nasazením do plně integrovaného a konzistentního testovacího prostředí. Nemá smysl spouštět integrační testy v každém vývojovém prostředí, které vývojový tým používá. Integrační testovací případy musí bezchybně běžet v prostředí, kde jsou nasazeny všechny služby a kde jsou data konzistentní.
- Začlenit do CI/CD pipeline komplexní testovací případy z reálného provozu. Zajistit jejich povinné spouštění pro každé nasazení hlavního kódu do prostředí integračního testu nebo uživatelského akceptačního testu. Tím se zajistí, že všechny důležité a kritické obchodní procesy mohou běžet bez selhání.
Psaní efektivních testovacích případů tak, aby se to nepřehnalo, ale zároveň pokryly všechny kritické procesy, je další výzvou, kterou musíte zvládnout. DevOps inženýři v tom však nemusí být sami.
K pomoci mohou přispět i obchodní analytici nebo manažeři kvality (pokud nejsou přímo součástí týmu). Úkolem DevOps inženýra je pak převést definované kroky do automatizovaného spustitelného kódu.
CI/CD a Infrastruktura jako kód
Tohoto tématu jsme se již dotkli v několika předchozích částech. Nicméně nelze popřít, že IaC (a následně i jeho provádění prostřednictvím CI/CD kanálů) jsou hlavními výstupy DevOps inženýrů. Všechny vstupy od vývojářského týmu (v podobě různých funkčních služeb) jsou zde propojeny s konkrétními infrastrukturními prostředími. Následně se stávají použitelným softwarovým výstupem, který lze opakovaně nasazovat do různých prostředí.
Není divu, že je to jedna z hlavních výzev pro každého DevOps inženýra. O to víc, pokud je požadavkem zůstat cloud-agnostický, což obvykle znamená psát IaC v jazyce Terraform a zajistit, aby kód neobsahoval specifika pro konkrétního poskytovatele cloudu. Zkušenosti jasně ukazují, že přechod na cloudově agnostické skripty infrastruktury může být velmi obtížný i pro zkušené inženýry.
Je naprosto nemožné udržovat cloudovou infrastrukturu pouze pomocí ručních kroků. V dobách on-premise to sice byl standard. Stejně jako bylo běžné dodávat výstupy prostřednictvím vodopádových metodik. S manuálním nasazováním v agilním prostředí nemáte šanci na přežití. Přechod je nutný, a bývá téměř vždy bolestivý.
Jakmile se vám to ale podaří, máte vyhráno.
- Potřebujete produkční nasazení? Stačí spustit release kanál obsahující nasazení kódu do produkce.
- Požadujete další vývojové prostředí, aby nedošlo k překrývání s další vývojovou prací uvnitř týmu? Stačí vyhledat vývojový kanál a stisknout tlačítko Spustit. Veškerá vývojová infrastruktura se automaticky spustí a vytvoří, včetně testovacích dat.
- Jakmile potřeba existence daného prostředí pomine, tentýž vývojový kanál může provést příkazy k likvidaci všech služeb, které byly v prostředí nasazeny.
Pro úspěšný agilní tým je nevyhnutelné implementovat infrastrukturu jako kód a začlenit ji do CI/CD kanálů, které mohou tuto práci provádět kdykoli a kdekoli. DevOps inženýři jsou ti, kteří to zajistí.
Kontejnerizace
Zdroj: aws.amazon.com
U rozsáhlých projektů je klíčová možnost rychlé replikace. Vytvoření stovek kopií stejných prostředí současně by nebylo možné bez kontejnerizovaných prostředí. Kontejnerizace je dovednost, která vyžaduje poměrně strmou křivku učení, a proto ji jen málo projektů skutečně používá ve větší míře.
Kontejnerový server je šablona, kterou lze použít tak často, jak je potřeba, a výstup bude vždy stejný. Identická infrastruktura a identická data. Je to vlastnost, kterou pro tým mohou vybudovat pouze DevOps inženýři. Musí se naučit, jak ji vytvořit pomocí různých nástrojů.
Kontejnery jsou navrženy tak, aby se daly snadno vytvářet i likvidovat. DevOps inženýři implementují nástroje pro orchestraci kontejnerů, jako je Kubernetes nebo Docker Swarm, které mohou automaticky spravovat nasazování, škálování a obnovu kontejnerů.
Kontejnery sdílejí stejný hostitelský operační systém. Pokud je ohrožen jeden kontejner, může to potenciálně ohrozit i další kontejnery na stejném hostiteli. Pokud jsou kontejnery vytvořeny z obrazů třetích stran, mohou obsahovat bezpečnostní mezery v kódu. DevOps inženýři usilují o implementaci bezpečnostních funkcí, jako je izolace kontejnerů, řízení přístupu a skenování zranitelností, aby tato rizika snížili.
Škálovatelnost je další přirozenou vlastností kontejnerů. Můžete je snadno horizontálně škálovat a tak zvládnout zvýšené pracovní zatížení. To však může vést ke sporům o zdroje a problémům s výkonem. DevOps inženýři proto implementují nástroje pro správu zdrojů, jako jsou cgroups nebo kvóty zdrojů Kubernetes, které mohou omezit množství zdrojů, které může každý kontejner spotřebovat.
Kontejnerizaci je nutné řešit s ohledem na bezpečnost, škálovatelnost a odolnost. Kromě všech ostatních technických dovedností vyžaduje zvládnutí kontejnerizace obzvláště strmou křivku učení. Složitost je prostě příliš vysoká, což je také důvod, proč ji jen málo projektů skutečně používá ve větší míře.
Závěr
DevOps praktik je jedinečným členem vašeho agilního týmu. Můžete mít jen jednoho nebo dva na celý projekt, ale i tak budou pro úspěch klíčoví.
Očekávání od DevOps inženýrů jsou vysoká, protože musí zastávat více rolí najednou:
- Musí to být zdatní techničtí vývojáři,
- týmoví hráči s empatií a porozuměním, připraveni ke spolupráci,
- efektivní prostředníci mezi vývojovým týmem a netechnickými externími partnery,
- propojení celého týmu v oblasti automatizace a ověřování testů kódu,
- zajišťovat pravidelná vydávání projektu,
- a neustále budovat síť odborníků, která se ze dne na den mění.
Přes veškerou technickou složitost hraje klíčovou roli v úspěchu každé DevOps iniciativy právě lidský prvek. Pokud se chystáte stát jedním z nich, máte plné právo být na své rozhodnutí hrdí a zaujmout vzdělávací přístup z mnohem širší perspektivy, neomezovat se pouze na technické znalosti.
Prohlédněte si také nejčastější otázky a odpovědi na pohovorech s DevOps.