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ů.

Kategorie: Cloud a DevOpsAktualizováno

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

  1. 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: 8080
  2. Stabilní 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

  1. Kubernetes Documentation(otevře se v novém okně)Kubernetes
  2. Kubernetes Overview(otevře se v novém okně)Kubernetes
  3. Pods(otevře se v novém okně)Kubernetes
  4. Service(otevře se v novém okně)Kubernetes

Související pojmy

Potřebujete to vyřešit v praxi?

Poradíme, jak na to ve vašem projektu

Vysvětlit pojem je jedna věc, navrhnout kolem něj funkční řešení druhá. Ozvěte se a probereme, co dává smysl u vás.