Hej, jag heter Dmitrij Krasnov. Jag har arbetat med administration av Kubernetes-kluster och byggande av komplexa mikrotjÀnstarkitekturer i mer Àn fem Är. I början av det hÀr Äret lanserade vi en tjÀnst för hantering av Kubernetes-kluster baserad pÄ Containerum. Passa pÄ att berÀtta vad Kubernetes faktiskt Àr och hur integrationen med en leverantör skiljer sig frÄn open source.
För det första, vad Àr . Det Àr ett system för administration av containrar pÄ ett stort antal vÀrdar. PÄ grekiska översÀtts det för övrigt som "pilot" eller "styrman". Det utvecklades ursprungligen av Google och överlÀmnades sedan som en teknologisk bidrag till Cloud Native Computing Foundation, en internationell ideell organisation som förenar ledande globala utvecklare, slutanvÀndare och leverantörer av containertj teknologi.

Att styra ett stort antal containrar
Nu ska vi reda ut vad dessa containrar Ă€r. Det Ă€r en applikation med hela dess miljö â i huvudsak bibliotek som applikationen Ă€r beroende av för att fungera. Allt detta packas i arkiv och presenteras som en bild som kan köras oavsett operativsystem, testas och mer. Men det finns ett problem â att hantera containrar pĂ„ ett stort antal vĂ€rdar Ă€r mycket svĂ„rt. DĂ€rför skapades Kubernetes.
En containerbild representerar en applikation plus dess beroenden. Applikationen, dess beroenden och bildens filsystem ligger i olika delar av bilden, sÄ kallade lager. Lager kan ÄteranvÀndas för olika containrar. Till exempel kan alla applikationer i företaget anvÀnda det grundlÀggande lagret Ubuntu. Vid körning av containrar behöver man inte lagra mÄnga kopior av ett och samma grundlÀggande lager pÄ vÀrden. Detta möjliggör optimering av lagring och distribution av bilder.
NÀr vi vill starta en applikation frÄn en container, lÀggs de nödvÀndiga lagren ovanpÄ varandra och en overlay-filsystem bildas. OvanpÄ detta lÀggs ett skrivlager, som tas bort nÀr containern stoppas. Detta sÀkerstÀller att applikationen alltid har en konsekvent miljö vid start av containern, vilket inte kan Àndras. Det garanterar reproducerbarhet av miljön pÄ olika vÀrddatorers operativsystem. Oavsett om det Àr Ubuntu eller CentOS kommer miljön alltid att vara densamma. Dessutom Àr containern isolerad frÄn vÀrden med hjÀlp av inbyggda mekanismer i Linux-kÀrnan. Applikationer i containern ser inte vÀrdens filer, processer eller andra containrar. Denna isolering av applikationer frÄn vÀrdoperativsystemet ger ett extra lager av sÀkerhet.
Det finns mÄnga verktyg för att hantera containrar pÄ vÀrden. Det mest populÀra av dessa Àr Docker. Det möjliggör en fullstÀndig livscykelhantering av containrar. Men det fungerar endast pÄ en enda vÀrd. NÀr det behövs hantering av containrar pÄ flera vÀrdar kan Docker göra livet svÄrt för ingenjörerna. DÀrför skapades Kubernetes.
EfterfrÄgan pÄ Kubernetes beror just pÄ möjligheten att styra grupper av containrar pÄ flera vÀrdar som en enda enhet. Systemets popularitet ger möjligheten att bygga DevOps, dÀr Kubernetes anvÀnds för att driva processerna i DevOps.

Figur 1. Schematisk bild av hur Kubernetes fungerar
Full automatisering
DevOps, i grunden, representerar automatisering av utvecklingsprocessen. Valt grovt, skriver utvecklarna kod som laddas upp till ett arkiv. Denna kod kan sedan automatiskt byggas direkt i en container med alla bibliotek, testas och "slÀppas" till nÀsta steg - Staging, och sedan omedelbart till Production.
Tillsammans med Kubernetes gör DevOps det möjligt att automatisera denna process sĂ„ att den nĂ€stan gĂ„r utan utvecklarnas deltagande. Detta pĂ„skyndar avsevĂ€rt byggprocessen, eftersom utvecklaren inte behöver hantera detta pĂ„ sin dator â han skriver helt enkelt en bit kod, pushar koden till ett repository, varefter en pipeline startas, som kan inkludera processen för byggande, testning och implementering. SĂ„ hĂ€r sker det med varje commit, sĂ„ testningen sker kontinuerligt.
Genom att anvĂ€nda en container kan man vara sĂ€ker pĂ„ att hela miljön för detta program gĂ„r till produktion i exakt det skick som testades. Det innebĂ€r att det inte kommer att uppstĂ„ problem av typen "i testet var det en version, i produktion â en annan, och nĂ€r det installerades â allt kraschade". Eftersom vi idag har en trend mot mikroservicearkitektur, dĂ€r istĂ€llet för en stor applikation finns det hundratals smĂ„, krĂ€vs det en stor personalstyrka för att administrera dem manuellt. DĂ€rför anvĂ€nder vi Kubernetes.
Fördelar, fördelar, fördelar
NÀr det gÀller fördelarna med Kubernetes som plattform har det betydande fördelar ur ett administrationsperspektiv för mikroservicearkitektur.
- Hantering av mÄnga repliker. Det viktigaste Àr att hantera containers pÄ mÄnga vÀrdar. Och vad som Àr Ànnu viktigare Àr att hantera mÄnga repliker av applikationer i containers som en enhet. Tack vare detta behöver ingenjörer inte oroa sig för varje enskild container. Om en av containrarna kraschar kommer Kubernetes att upptÀcka detta och starta om den.
- KlusternÀtverk. Kubernetes har ocksÄ ett sÄ kallat klusternÀtverk med sitt eget adressutrymme. Detta gör att varje pod har sin egen adress. En pod Àr den minimi strukturella enheten i klustret dÀr containrar startas direkt. Dessutom har Kubernetes funktionalitet som kombinerar en lastbalanserare och service discovery. Det hÀr gör att man kan undvika manuell hantering av IP-adresser och överlÄta denna uppgift till Kubernetes. Automatiska hÀlsokontroller hjÀlper till att upptÀcka problem och omdirigera trafik till fungerande pods.
- Konfigurationshantering. NÀr man hanterar ett stort antal applikationer blir det svÄrt att administrera applikationskonfigurationer. För detta ÀndamÄl har Kubernetes speciella resurser som ConfigMap. De tillÄter centralt lagring av konfigurationer och att dessa kan sÀttas in i pods vid applikationsstart. Denna mekanism garanterar att konfigurationen Àr konsekvent, oavsett om det handlar om tio eller hundra repliker av applikationer.
- BestĂ€ndiga volymer. Containrar Ă€r i grunden immutabla, och nĂ€r en container stoppas kommer alla data som skrivits till filsystemet att försvinna. Men vissa applikationer sparar data direkt pĂ„ disken. För att lösa detta problem har Kubernetes funktionalitet för att hantera disklagring â bestĂ€ndiga volymer. Denna mekanism anvĂ€nder extern lagring för data och kan koppla till containrar permanent lagring, antingen block- eller filbaserad. SĂ„dana lösningar gör att data kan lagras separat frĂ„n arbetarna, vilket rĂ€ddar dem vid ett eventuellt fel hos dessa arbetare.
- Lastbalanserare. Trots att vi hanterar abstrakta entiteter som Deployment, StatefulSet och sÄ vidare i Kubernetes, sÄ körs containrar i slutÀndan pÄ vanliga virtuella maskiner eller fysiska servrar. De Àr inte perfekta och kan krascha nÀr som helst. Kubernetes kommer att se detta och omdirigera intern trafik till andra repliker. Men vad gör vi med trafiken som kommer utifrÄn? Om vi helt enkelt dirigerar trafiken till en av arbetarna, vad hÀnder om den kraschar? TjÀnsten blir otillgÀnglig. För att lösa detta problem finns det tjÀnster i Kubernetes av typen lastbalanserare. De Àr avsedda för automatisk konfiguration av en extern molnbalanschef för alla arbetare i klustret. Denna externa balanschef dirigerar extern trafik till arbetarna och övervakar deras status. Om en eller flera arbetare blir otillgÀngliga omdirigeras trafiken till andra. Detta möjliggör skapandet av hög tillgÀngliga tjÀnster med hjÀlp av Kubernetes.
Kubernetes visar sig bĂ€st nĂ€r man startar mikrotjĂ€nstarkitekturer. Att implementera systemet i en klassisk arkitektur gĂ„r, men Ă€r meningslöst. Om en applikation inte kan fungera i flera repliker, vad spelar det dĂ„ för roll â om det Ă€r i Kubernetes eller inte?
Ăppen kĂ€llkod Kubernetes
Ăppen kĂ€llkod Kubernetes â en fantastisk sak: installerad och fungerar. Det kan köras pĂ„ dina egna servrar, pĂ„ din infrastruktur, du kan stĂ€lla in en master och arbetare dĂ€r alla applikationer kommer att köras. Och viktigast av allt â allt detta Ă€r gratis. Men det finns nyanser.
- Det första â kraven pĂ„ kunskaper och erfarenheter hos administratörer och ingenjörer som ska sĂ€tta upp och underhĂ„lla detta. Eftersom kunden fĂ„r full frihet i klustret, bĂ€r de sjĂ€lv ansvaret för klustrets funktionalitet. Och det Ă€r ganska enkelt att förstöra allt hĂ€r.
- Det andra â bristen pĂ„ integrationer. Om man kör Kubernetes utan nĂ„gon populĂ€r virtualiseringsplattform, fĂ„r man inte alla fördelar med programmet. SĂ„som anvĂ€ndning av Persistent Volumes och Load balancer-tjĂ€nster.

Figur 2. Arkitektur k8s
Kubernetes frÄn leverantören
Integration med en molnleverantör ger tvÄ möjligheter:
- För det första kan man bara trycka pÄ knappen "skapa kluster" och fÄ ett redan konfigurerat och klart kluster.
- För det andra installerar leverantören sjÀlv klustret och konfigurerar integrationen med molnet.
SÄ hÀr gÄr det till hos oss. Ingenjören som sÀtter igÄng klustret anger hur mÄnga arbetare han behöver och med vilka specifikationer (till exempel 5 arbetare, var och en med 10 CPU, 16 GB RAM och, sÀg, 100 GB disk). DÀrefter fÄr han tillgÄng till det redan etablerade klustret. Arbetarna som kör belastningen tilldelas helt kunden, men hela managementplanet förblir under leverantörens ansvar (om tjÀnsten tillhandahÄlls enligt modellen managed service).
Men denna modell har sina nackdelar. Eftersom managementplanet förblir hos leverantören ger de inte fullstÀndig tillgÄng till kunden, vilket minskar flexibiliteten i arbetet med Kubernetes. Ibland vill kunden lÀgga till en specifik funktionalitet till Kubernetes, till exempel autentisering via LDAP, men konfigurationen av managementplanet tillÄter inte detta.

Figur 3. Exempel pÄ ett Kubernetes-kluster frÄn en molnleverantör
Vad ska man vÀlja: öppen kÀllkod eller leverantörsbaserat
SÄ, open source Kubernetes eller leverantörs-specifik? Om man vÀljer open source Kubernetes kan anvÀndaren göra vad som helst med den. Men risken att man skjuter sig sjÀlv i foten Àr stor. Med en leverantör Àr det svÄrare, eftersom allt Àr genomtÀnkt och konfigurerat av företaget. Den största nackdelen med open source Kubernetes Àr kravet pÄ specialister. Med en leverantör slipper företaget denna huvudvÀrk, men de mÄste ÀndÄ besluta: ska de betala sina specialister eller leverantören?


NÄvÀl, fördelarna Àr uppenbara, och nackdelarna Àr ocksÄ kÀnda. En sak Àr oförÀndrad: Kubernetes löser en mÀngd problem genom att automatisera hanteringen av flera containrar. Och vilken man ska vÀlja, open source eller leverantörsspecifik, Àr upp till var och en att avgöra.
Artikeln Àr förberedd av Dmitrij Krasnov, huvudarkitekt för tjÀnsten Containerum hos leverantören #CloudMTS.
KĂ€lla: habr.com
