V druhom diele sme ukázali, ako nainštalovať Kubernetes Cluster vo Virtuálnom dátovom centre (VDC), ako spustiť Kubernetes Master Server a ako naň nasadiť sieť podov. Následne sme pripojili uzly k spustenému serveru, na ktoré sme nasadili službu – konkrétne webový server Nginx.
Doteraz sme používali iba predpripravené textové konfiguračné súbory vo formáte YAML. V tomto diele si vytvoríme vlastné jednoduché YAML súbory a postupne vysvetlíme ich obsah.
Mažeme nepotrebné služby a nasadenia
Pred tým, ako budeme pokračovať, vymažeme nepotrebné služby (services) a nasadenia (deployments), aby sme Kubernetes Cluster zbytočne nezaťazovali. Najskôr vypíšeme zoznam spustených služieb (prvý riadok) a aktívnych nasadení (druhý riadok) na VPS master:
kubectl get serviceskubectl get deploymentsPotom nepotrebné služby (prvý riadok) a nasadenia (druhý riadok) na VPS master zmažeme:
kubectl delete service <nazov-nepotrebnej-sluzby>kubectl delete deployment <nazov-nepotrebneho-nasadenia>Spúšťame jednoduchú úlohu (job)
Job (úloha) slúži na spustenie jednoduchej úlohy, pričom spustí jeden alebo viacero podov. Vykoná sa konkrétna úloha (napr. príkaz sleep) a pod sa ukončí. Po vymazaní jobu sa vymažú aj pody, ktoré job spustil.
Overíme, že nie sú nasadené nepotrebné joby (prvý riadok) a/alebo nepotrebné pody (druhý riadok):
kubectl get podskubectl get jobsAk boli vypísané pody alebo joby, ktoré nie sú potrebné, môžeme ich vymazať, aby nezaberali čas procesora (CPU) alebo miesto v operačnej pamäti (RAM):
kubectl delete pods <nazov-nepotrebneho-podu>kubectl delete jobs <nazov-nepotrebneho-jobu>Teraz je všetko pripravené na vytvorenie textového konfiguračného súboru vo formáte YAML (prvý riadok), do ktorého zapíšeme jednoduché nastavenia pre job (ostatné riadky):
nano ~/simple-job.yamlapiVersion: batch/v1
kind: Job
metadata:
  name: simple-job
spec:
  template:
    spec:
      containers:
        - name: job
          image: busybox
          args:
            - /bin/sh
            - -c
            - date; echo 30-sekundový spánok; sleep 30s; echo Koniec spánku; date
      restartPolicy: Never
Vložíme skopírovaný obsah, uložíme pomocou klávesovej skratky Ctrl + X a následne stlačením klávesu y a potvrdením klávesom Enter.
Textový konfiguračný súbor vo formáte YAML (YAML Ain’t Markup Language – YAML nie je značkovací jazyk) obsahuje položky rôznych úrovní. Najvyššiu úroveň majú položky, ktoré sú úplne vľavo (tu napr. apiVersion alebo kind) a podradené sú položky, ktoré sú odsadené zľava vždy o 2 medzery (napr. podradená voči položke metadata je položka name).
Ak potrebujeme odkázať na podradenú položku (napr. args), jednotlivé položky od seba oddelíme bodkou:
spec.template.spec.containers.argsKaždý konfiguračný súbor objektu v rámci systému Kubernetes začína prvým riadkom, ktorý špecifikuje názov a verziu použitého API (tu apiVersion: batch/v1). Nasleduje druh objektu (tu kind: Job), metaúdaje (tu metadata >  name) a hlavná špecifikácia s uvedením šablóny kontajnera (template.containers) a jej názvu (name), obrazu (image) a argumentov (args).
Vyššie opísaný job teda spustí pod s názvom simple-job. Pod bude obsahovať jeden kontajner s názvom job, pričom kontajner sa vytvorí z obrazu s názvom busybox. V kontajneri sa spustí sada jednoduchých príkazov (date; echo 30-sekundový spánok; sleep 30s; echo Koniec spánku; date). No a automatický reštart podu je vypnutý (restartPolicy: Never).
Takto nasadíme job z vyššie vytvoreného konfiguračného súboru:
kubectl create -f ~/simple-job.yamlJob aj pod boli naozaj vytvorené, pričom po uplynutí 30 sekúnd sa stav podu (stĺpec STATUS) zmení na Completed a v stĺpci COMPLETIONS jobu bude uvedené 1/1:
kubectl get podskubectl get jobsJob sa síce ukončil (Completed), ale stále je spustený, takže ho teraz vymažeme podobne, ako sme ho spustili, ibaže namiesto možnosti create použijeme delete (prvý riadok). Následne overíme, či job a pod naozaj boli vymazané (druhý a tretí riadok):
kubectl delete -f ~/simple-job.yamlkubectl get podskubectl get jobsAk potrebujeme, aby sa job ukončil po konkrétnom čase, doplníme do YAML súboru (prvý riadok) špecifikáciu spec.activeDeadlineSeconds takto (ostatné riadky):
nano ~/simple-job-time-limit.yamlapiVersion: batch/v1
kind: Job
metadata:
  name: simple-job-time-limit
spec:
  activeDeadlineSeconds: 20
  template:
    spec:
      containers:
        - name: job-time-limit
          image: busybox
          args:
            - /bin/sh
            - -c
            - date; echo 30-sekundový spánok; sleep 30s; echo Koniec spánku; date
      restartPolicy: Never
Vložíme skopírovaný obsah, uložíme pomocou klávesovej skratky Ctrl + X a následne stlačením klávesu y a potvrdením klávesom Enter.
Nasadíme job z vyššie vytvoreného konfiguračného súboru (prvý riadok) a skontrolujeme, či sa job a pod naozaj vytvorili (druhý a tretí riadok):
kubectl create -f ~/simple-job-time-limit.yamlkubectl get podskubectl get jobsSíce sme zadali 30-sekundový spánok, ale ten sa nestihol zrealizovať, pretože sme určili časový limit na 20 sekúnd, a tak sa po 20 sekundách job ukončil predčasne. Zistíme to na konci rozšíreného výpisu jobu:
kubectl get job simple-job-time-limit -o yamlNásledne job vymažeme:
kubectl delete -f ~/simple-job-time-limit.yamlSpúšťame nasadenie (deployment)
Nasadenie (deployment) vytvorí viacero rovnakých podov. Nasadenie teda spúšťa viacero kópií rovnakej aplikácie a v prípade pádu jednej kópie ju automaticky nahradí. Takto zabezpečíme neustálu funkčnosť jednej alebo viacerých kópií aplikácie.
Vytvoríme textový konfiguračný súbor vo formáte YAML (prvý riadok), do ktorého zapíšeme jednoduché nastavenia pre nasadenie (ostatné riadky):
nano ~/deployment-httpd-frontend.yamlapiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: httpd-frontend
  name: httpd-frontend
spec:
  replicas: 3
  selector:
    matchLabels:
      app: httpd-frontend
  template:
    metadata:
      labels:
        app: httpd-frontend
    spec:
      containers:
      - image: httpd:2.4-alpine
        name: httpd
Vložíme skopírovaný obsah, uložíme pomocou klávesovej skratky Ctrl + X a následne stlačením klávesu y a potvrdením klávesom Enter.
Po spustení nasadenia z vyššie uvedeného YAML súboru sa vytvorí nasadenie s názvom (metadata.name) a označením (metadata.labels) httpd-frontend. Nasadenie spustí 3 pody (spec.replicas), pričom každý pod bude označený štítkom (label) httpd-frontend (spec.template.metadata.labels) a bude obsahovať kontajner s operačným systémom Alpine Linux vo verzii 2.4 so spusteným http serverom (spec.template.spec.containers.image).  No a spec.selector.matchLabels určuje, že nasadenie bude s podmi komunikovať cez štítok (label) httpd-frontend.
Spustíme nasadenie z vyššie vytvoreného konfiguračného súboru (prvý riadok) a skontrolujeme, či sa nasadenie naozaj vytvorilo (druhý riadok):
kubectl create -f ~/deployment-httpd-frontend.yamlkubectl get deployments | grep httpd-frontendNasadenie (deployment) vytvorilo ovládač (controller) replicaset (súbor kópií) pod označením httpd-frontend, ktorý neustále kontroluje, či je spustený požadovaný počet podov. Zabezpečuje tak neustálu funkčnosť všetkých kópií nasadenej aplikácie. Takto overíme, či je náš ovládač replicaset spustený:
kubectl get replicasets | grep httpd-frontendTiež overíme, či je spustený požadovaný počet podov:
kubectl get pods | grep httpd-frontendOvládač aj pody sú spustené. Teraz môžeme overiť, či sa v prípade vymazania jedného podu automaticky vytvorí náhradný. Vymažeme teda jeden zo spustených podov (prvý riadok) a následne skontrolujeme, či sa vytvoril náhradný pod (druhý riadok) namiesto vymazaného:
kubectl delete pod httpd-frontend-5ddf995bdf-q7cgkkubectl get pods | grep httpd-frontendZistili sme, že vymazaný pod neexistuje a vytvoril sa nový pod, ktorý nahradil ten vymazaný. Orchestrácia podov teda funguje správne.
Vymazať ale môžeme aj celý replicaset (čiže všetky pody) a nasadenie (deployment) vytvorí nový. Zistíme názov replicasetu (prvý riadok), vymažeme ho (druhý riadok) a skontrolujeme, či sa vytvoril nový (tretí riadok):
kubectl get replicasets | grep httpd-frontendkubectl delete replicaset httpd-frontend-5ddf995bdfkubectl get replicasets | grep httpd-frontendZistili sme, že replicaset bol vymazaný a vytvoril sa nový replicaset (s novým podmi), ktorý nahradil ten vymazaný. Manažment podov teda funguje správne.
Podrobné informácie o všetkých podoch, ktoré spustilo nasadenie (deployment), zistíme pomocou štítku httpd-frontend:
kubectl describe pod httpd-frontendPo vymazaní celého nasadenia (deployment) sa už pody nespustia a všetky kópie aplikácie sa teda ukončia:
kubectl delete deployment httpd-frontendZhrnutie
V treťom diele sme spustili jednoduchú úlohu (job) s jednym podom bez časového obmedzenia, a tiež s časovým obmedzením. Viacero podov sme spustili pomocou nasadenia (deployment) a overili sme jednu zo základných funkcií systému Kubernetes: rýchle spustenie podov, ktoré nahradia vypadnuté pody.