kubernetýsTakéK8sPokročilý
Definice
Kubernetes je open-source platforma pro orchestraci kontejnerů, která automatizuje nasazování, škálování, síťování a obnovu aplikací běžících na více serverech. Vývojářům a DevOps týmům umožňuje popsat požadovaný stav systému deklarativně a nechává cluster průběžně dorovnávat realitu podle této definice bez ručního spouštění jednotlivých procesů.
Proč Kubernetes vznikl
Kubernetes řeší problém, který se objeví ve chvíli, kdy aplikace už neběží jako jeden proces na jednom serveru. Moderní služba může mít desítky kontejnerů, několik verzí, frontu úloh, databázové klienty a různé nároky na paměť nebo procesor. Ruční spouštění takového systému by bylo pomalé, chybové a těžko opakovatelné.
Kubernetes nad tímto prostředím vytvoří řídicí vrstvu. Operátor neříká každému serveru zvlášť, co má spustit. Operátor popíše požadovaný stav: kolik kopií aplikace má běžet, jaký obraz kontejneru se má použít, jaké porty mají být dostupné a jak se pozná zdravá instance.
Cluster místo jednotlivých serverů
Kubernetes cluster se skládá z řídicí části a pracovních uzlů. Řídicí část ukládá stav, přijímá změny přes API a rozhoduje, kam se nové úlohy umístí. Pracovní uzly skutečně spouštějí kontejnery a hlásí, zda běží správně.
Důležitá myšlenka je smíření požadovaného a skutečného stavu. Když uzel vypadne, Kubernetes se pokusí přesunout postižené úlohy jinam. Když běží méně replik, než bylo deklarováno, systém vytvoří další. Když se nasazuje nová verze, Kubernetes může postupně nahrazovat staré instance novými.
Pod a Service jako základní stavebnice
Nejmenší běžně nasazovanou jednotkou není samotný kontejner, ale Pod. Pod může obsahovat jeden nebo více těsně svázaných kontejnerů, které sdílejí síťový prostor a životní cyklus. V typické webové aplikaci bývá v Podu jeden aplikační kontejner, ale existují i doprovodné kontejnery pro proxy, logování nebo inicializaci.
Service řeší stabilní přístup k Podům. Pody mohou vznikat a zanikat, takže jejich IP adresy nejsou dobrý pevný bod pro ostatní části systému. Service poskytne stálé jméno a směrování na aktuálně dostupné Pody, které odpovídají daným štítkům.
Kde Kubernetes přidává složitost
Kubernetes není jen pohodlnější Docker. Kubernetes přináší vlastní model oprávnění, síťování, ukládání tajných údajů, limity zdrojů, health checky, plánování a aktualizace. Výhoda se projeví hlavně tam, kde je potřeba opakovatelné nasazení, odolnost proti výpadkům a provoz více služeb ve více prostředích.
Menší aplikace může být na Kubernetes zbytečně složitá. Správně provozovaný cluster potřebuje monitoring, zálohování stavových komponent, promyšlené limity zdrojů a disciplínu v konfiguraci. Kubernetes odstraňuje část ruční práce, ale nenahrazuje znalost aplikace ani zodpovědný provoz.
Příklady z praxe
Katalog produktů se třemi replikami
E-shop nasadí katalog produktů jako Deployment se třemi replikami. Když jeden uzel selže, Kubernetes vytvoří chybějící Pod na jiném uzlu a služba zůstane dostupná přes zbývající repliky. Tým nemusí ručně hledat server, na kterém proces spadl.
apiVersion: apps/v1 kind: Deployment metadata: name: katalog spec: replicas: 3 selector: matchLabels: app: katalog template: metadata: labels: app: katalog spec: containers: - name: katalog image: registry.example.com/katalog:1.8.2 ports: - containerPort: 8080Stabilní adresa pro měnící se Pody
Frontend potřebuje volat katalog produktů, ale jednotlivé Pody katalogu se při aktualizacích mění. Service vytvoří stabilní síťové jméno a posílá provoz na aktuálně zdravé Pody se štítkem app: katalog. Aktualizace backendu tak nevyžaduje změnu konfigurace frontendu.
apiVersion: v1 kind: Service metadata: name: katalog spec: selector: app: katalog ports: - port: 80 targetPort: 8080
Časté omyly
- MýtusKubernetes je jen náhrada za Docker Compose v produkci.
- Ve skutečnostiKubernetes řeší širší oblast než lokální skládání kontejnerů: plánování na uzly, samoopravu, síťové služby, řízení oprávnění, aktualizace a práci s clustery. Docker Compose je jednodušší nástroj pro menší sestavy, často hlavně ve vývoji.
- MýtusKdyž aplikace běží v Kubernetes, je automaticky vysoce dostupná.
- Ve skutečnostiKubernetes poskytuje mechanismy pro repliky, health checky a přesun úloh, ale vysoká dostupnost závisí na návrhu aplikace, databázi, úložišti, síti a konfiguraci clusteru. Špatně nastavená aplikace může mít výpadky i v Kubernetes.
Časté dotazy
- Kdy dává Kubernetes smysl pro menší tým?
- Kubernetes se vyplatí hlavně u aplikací složených z více služeb, které potřebují škálování, řízené aktualizace, automatické zotavení a podobné prostředí ve vývoji, testu i produkci. Jednoduchý web s malým provozem může být levnější a srozumitelnější na platformě typu PaaS, ve virtuálním serveru nebo v managed kontejnerové službě bez plného clusteru.
- Sestavuje Kubernetes Docker image?
- Kubernetes obvykle kontejnery sám nevytváří ve smyslu sestavení image. Kubernetes bere hotové container images z registru a rozhoduje, kde a kolikrát poběží. Build image, skenování zranitelností a publikování do registru patří typicky do CI/CD pipeline. Kubernetes pak z deklarace vyčte, jaký image má spustit a jak má hlídat jeho životní cyklus.
- Je Kubernetes vhodný pro databáze?
- Kubernetes umí provozovat stavové aplikace, ale databáze v clusteru vyžadují opatrnější návrh než běžné stateless služby. Databáze potřebuje trvalé úložiště, zálohy, obnovu, řízení verzí a jasný plán při výpadku uzlu. Pro mnoho týmů je praktičtější provozovat databázi jako managed službu a v Kubernetes nechat aplikační vrstvu.
- Co znamená managed Kubernetes?
- Managed Kubernetes znamená, že poskytovatel cloudu obvykle spravuje část řídicí roviny, integraci se sítí, aktualizace komponent a napojení na cloudové služby. Aplikační tým ale stále odpovídá za manifesty, bezpečnostní pravidla, limity zdrojů, monitoring aplikací a samotné nasazování. Managed služba snižuje provozní zátěž, ale neodstraňuje potřebu rozumět modelu Kubernetes.
Zdroje
- Kubernetes Documentation(otevře se v novém okně)
- Kubernetes Overview(otevře se v novém okně)
- Pods(otevře se v novém okně)
- Service(otevře se v novém okně)