Objekty Kubernetes

Dozvieme sa:

  • Ako vytvoriť aplikáciu
  • Ako zverejniť aplikáciu
  • Ako udržať stav aplikácie

Kubernetes objekt

Entita v klastri reprezentujúca nejaký zdroj:

  • CPU, sieť, storage ...

vytvárame ich pomocou API klienta (kubectl,web)

Objekt

  • opisuje želaný stav,
  • k8s zisťuje aktálny stav,
  • týka sa nejakého zdroja,
  • má meno a anotácie,
  • má definované podmienky.

Konfigurácia k8s objektov pomocou YAML

  • "Inštalačný skript" aplikácie definuje ako má aplikácia vyzerať
  • Kubernetes klaster povie ako ten stav dosiahnuť a udržať.

Yaml dátové typy: slovník, pole, reťazec, číslo

Yaml je podobný ako JSON

Konfigurácia k8s objektov pomocou YAML

Asociatívne pole:

  • apiVersion - kompatibilta,
  • kind - druh objektu,
  • metadata - meno, štítky a anotácie,
  • spec - špecifikácia objektu.

Kubernetes API Objekty

  • Pod
  • Deployment ,
  • ReplicaSet ,
  • Service,
  • Ingress,

POD

tento objekt nevytvárame priamo ale pomocou StatefulSet alebo Deployment

POD

Jedna jednotka aplikácie:

  • jeden alebo viac kontajnerov
  • jeden alebo viac zväzkov

Pod je nedeliteľný - všetky jeho časti bežia spolu na jednom uzle

Deployment

Deklarujeme PODy ktoré aplikácia potrebuje

Deployment sa dá jednoducho škálovať (vytvárať a rušiť inštancie).

Deployment

  • riadi POD pomocou objektu ReplicaSet
  • POD vytvára podľa zadanej šablóny
+------------+
| Deployment |
+------------+
     | controlplane
     v
+------------+
| ReplicaSet |
+------------+
     | controlplane
     v
+------------+
|    POD     |
+------------+
        node

Zverejnenie služby v rámci klastra

Service

Funguje pre ľubovoľný TCP protokol

Verejná IP adresa je cenný tovar

Deklarujeme symbolické meno mikroslužby

Service

  • ClusterIP: služba je viditeľná v rámci klastra (dostane virtuálnuu IP adresu a DNS meno)
  • NodePort: služba bude dostupná na každom uzle na konkrénom porte.
  • LoadBalancer: služba bude dostupná pomocu nástrojov Vášho poskytovateľa

Zverejnenie služby TCP

  • LoadBalancer Service

Zverejnenie pomocou LoadBalancer

  • Pridelí sa verejná IP adresa
  • LoadBalancer spostredkúva kontakt medzi klastrom a vonkajším svetom
+-----------+           +-------------+     +---------------+
| POD       | Cluster   | Service     |     | Load Balancer |  Public
| ClusterIP | Traffic   | Cluster DNS |     | Public IP     |  TCP
+-----------+           +-------------+     + --------------+

Zverejnenie služby HTTP

  • Ingress

Ingress

Zverejníme službu HTTP

"Obaľuje" reverzný proxy server (nginx, HAProxy)

Verejný webový server so symbolickým DNS menom

Ingress

  • Len pre služby s HTTP protokolom
  • Mapuje Service na konkrétne URL
  • Zabezpečuje HTTPS
  • O udržiavanie HTTPS certifikátov sa stará iný proces (certbot)
+-----------+           +-------------+     +---------------+
| POD1      | Cluster   | Service 1   |     | Ingress       |  Public
| ClusterIP | Traffic   | Cluster DNS |     | Public DNS    |  HTTPS
+-----------+           +-------------+     + --------------+
                                        \     Ingress Rules
+-----------+           +-------------+  \__  /service1
| POD2      | Cluster   | Service 2   |
| ClusterIP | Traffic   | Cluster DNS | <--- /service2
+-----------+           +-------------+

Kubernetes ekosystém

  • podporné komponenty
  • podpora životného cyklu aplikácie

Zverejnenie služieb

  • load balancer (metalb)
  • manažment certifikátov (cert-manager)
  • ingress (haproxy, nginx)

Prevádzka klastra

  • Monitoring (Prometeus)
  • Authentification (keycloak)
  • register obrazov (docker registry)
  • service mesh (istio)
  • CI-CD
Reload?