<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Laby on Eriks training corner</title><link>https://training.caha.cloud/cs/kubernetesintro/labs/index.html</link><description>Recent content in Laby on Eriks training corner</description><generator>Hugo -- gohugo.io</generator><language>cs</language><atom:link href="https://training.caha.cloud/cs/kubernetesintro/labs/index.xml" rel="self" type="application/rss+xml"/><item><title>Lab 01 – Příprava pracovní stanice</title><link>https://training.caha.cloud/cs/kubernetesintro/labs/lab-01-workstation-setup/index.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://training.caha.cloud/cs/kubernetesintro/labs/lab-01-workstation-setup/index.html</guid><description>&lt;h1 id="lab-01--příprava-pracovní-stanice"&gt;Lab 01 – Příprava pracovní stanice&lt;/h1&gt;
&lt;p&gt;&lt;strong&gt;Cíl:&lt;/strong&gt; udělat ze support01 vaši kubectl stanici.
&lt;strong&gt;Tahák:&lt;/strong&gt; &lt;a href="https://training.caha.cloud/cs/kubernetesintro/cheatsheets/kubectl/"&gt;kubectl&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;support01 má Docker i NFS exporty, ale záměrně &lt;strong&gt;žádné kubectl a žádný
kubeconfig&lt;/strong&gt;. Postavit si vlastního klienta je první věc, kterou u zákazníka
uděláte, tak si to zkusíme rovnou tady.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 1 – přihlaste se na jump host (ze svého PC)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ssh student@192.168.56.101 &lt;span class="c1"&gt;# heslo: linux&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 2 – kdo jsem a dosáhnu na uzly clusteru?&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;hostname -f
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ip -brief address &lt;span class="c1"&gt;# poznamenejte si adresu z 192.168.128.0/24&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;for&lt;/span&gt; n in control01 worker01 worker02 worker03&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; getent hosts &lt;span class="nv"&gt;$n&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;done&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Pokud se nějaké jméno nepřeloží, poznamenejte si jeho IP – budete ji potřebovat
v kroku 6.&lt;/p&gt;</description></item><item><title>Lab 02 – Docker kontejnery</title><link>https://training.caha.cloud/cs/kubernetesintro/labs/lab-02-docker-containers/index.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://training.caha.cloud/cs/kubernetesintro/labs/lab-02-docker-containers/index.html</guid><description>&lt;h1 id="lab-02--docker-kontejnery"&gt;Lab 02 – Docker kontejnery&lt;/h1&gt;
&lt;p&gt;&lt;strong&gt;Cíl:&lt;/strong&gt; životní cyklus kontejneru a proč záleží na zapisovatelné vrstvě.
&lt;strong&gt;Tahák:&lt;/strong&gt; &lt;a href="https://training.caha.cloud/cs/kubernetesintro/cheatsheets/docker/"&gt;Docker&lt;/a&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 1 – nejkratší možný kontejner&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo docker run hello-world
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo docker ps &lt;span class="c1"&gt;# nic – už skončil&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo docker ps -a &lt;span class="c1"&gt;# a je tu, Exited (0)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Kontejner žije přesně tak dlouho jako jeho hlavní proces. &lt;code&gt;hello-world&lt;/code&gt; vypíše
text a skončí, takže je po všem dřív, než ho &lt;code&gt;docker ps&lt;/code&gt; uvidí. Ze stejného
důvodu skončí pod bez dlouho běžícího procesu v &lt;code&gt;CrashLoopBackOff&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Lab 03 – Docker image a Dockerfile</title><link>https://training.caha.cloud/cs/kubernetesintro/labs/lab-03-docker-images/index.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://training.caha.cloud/cs/kubernetesintro/labs/lab-03-docker-images/index.html</guid><description>&lt;h1 id="lab-03--docker-image-a-dockerfile"&gt;Lab 03 – Docker image a Dockerfile&lt;/h1&gt;
&lt;p&gt;&lt;strong&gt;Cíl:&lt;/strong&gt; pochopit vrstvy tím, že uvidíte pracovat build cache.
&lt;strong&gt;Tahák:&lt;/strong&gt; &lt;a href="https://training.caha.cloud/cs/kubernetesintro/cheatsheets/docker/"&gt;Docker&lt;/a&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 1 – stažení a prozkoumání&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo docker pull nginx:1.27
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo docker images
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo docker &lt;span class="nb"&gt;history&lt;/span&gt; nginx:1.27 &lt;span class="c1"&gt;# jeden řádek na vrstvu, s velikostmi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;history&lt;/code&gt; je build recept čtený pozpátku. Většina vrstev má 0 B – jen metadata.
Ta velká je základní souborový systém.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 2 – sdílení vrstev&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo docker pull nginx:1.27-alpine
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo docker images &lt;span class="p"&gt;|&lt;/span&gt; grep nginx
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Porovnejte velikosti. Alpine image jsou malé proto, že je malá základna, ne
proto, že by nginx byl jiný.&lt;/p&gt;</description></item><item><title>Lab 04 – Docker síť a volumes</title><link>https://training.caha.cloud/cs/kubernetesintro/labs/lab-04-docker-networking-volumes/index.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://training.caha.cloud/cs/kubernetesintro/labs/lab-04-docker-networking-volumes/index.html</guid><description>&lt;h1 id="lab-04--docker-síť-a-volumes"&gt;Lab 04 – Docker síť a volumes&lt;/h1&gt;
&lt;p&gt;&lt;strong&gt;Cíl:&lt;/strong&gt; překlad jmen mezi kontejnery a data, která přežijí.
&lt;strong&gt;Tahák:&lt;/strong&gt; &lt;a href="https://training.caha.cloud/cs/kubernetesintro/cheatsheets/docker/"&gt;Docker&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="sítě"&gt;Sítě&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 1 – výchozí sítě&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo docker network ls
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 2 – na výchozím bridge překlad jmen NEfunguje&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo docker run -d --name db busybox sleep &lt;span class="m"&gt;3600&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo docker run --rm busybox ping -c1 db &lt;span class="c1"&gt;# bad address &amp;#39;db&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 3 – vlastní síť dá DNS podle jména kontejneru&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo docker network create appnet
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo docker run -d --name db2 --network appnet busybox sleep &lt;span class="m"&gt;3600&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo docker run --rm --network appnet busybox ping -c1 db2 &lt;span class="c1"&gt;# funguje&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Tohle je nejužitečnější věc, kterou síťování Dockeru dělá, a je to koncept, který
Kubernetes Service zobecňuje: dosáhnout na pohyblivý cíl přes stabilní jméno.
Rozdíl je v tom, že jméno v Dockeru ukazuje na jeden kontejner, kdežto jméno
Service na ty pody, které jsou zrovna připravené.&lt;/p&gt;</description></item><item><title>Lab 05 – První pohled na cluster</title><link>https://training.caha.cloud/cs/kubernetesintro/labs/lab-05-first-look-at-the-cluster/index.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://training.caha.cloud/cs/kubernetesintro/labs/lab-05-first-look-at-the-cluster/index.html</guid><description>&lt;h1 id="lab-05--první-pohled-na-cluster"&gt;Lab 05 – První pohled na cluster&lt;/h1&gt;
&lt;p&gt;&lt;strong&gt;Cíl:&lt;/strong&gt; zjistit, z čeho je cluster složený, a vidět rozdíl mezi imperativním
a deklarativním přístupem.
&lt;strong&gt;Tahák:&lt;/strong&gt; &lt;a href="https://training.caha.cloud/cs/kubernetesintro/cheatsheets/kubectl/"&gt;kubectl&lt;/a&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 1 – kam a jako kdo jsem připojen?&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl cluster-info
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl config get-contexts
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl config view --minify &lt;span class="p"&gt;|&lt;/span&gt; grep server
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Zvykněte si na &lt;code&gt;config get-contexts&lt;/code&gt; před čímkoli destruktivním. Většina
produkčních nehod je příkaz napsaný na správný objekt ve špatném clusteru.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 2 – stroje&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl get nodes -o wide
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl describe node control01 &lt;span class="p"&gt;|&lt;/span&gt; head -40
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl describe node worker01 &lt;span class="p"&gt;|&lt;/span&gt; grep -A6 &lt;span class="s1"&gt;&amp;#39;Allocated resources&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;V &lt;code&gt;describe node&lt;/code&gt; jsou důležité tři bloky: &lt;strong&gt;Conditions&lt;/strong&gt; (je zdravý?),
&lt;strong&gt;Taints&lt;/strong&gt; (co tu odmítá běžet?) a &lt;strong&gt;Allocated resources&lt;/strong&gt; (jak je plný?).
Všimněte si, že se počítá z &lt;strong&gt;requestů&lt;/strong&gt; podů, ne ze skutečného vytížení.&lt;/p&gt;</description></item><item><title>Lab 06 – Jak se v kubectl vyznat</title><link>https://training.caha.cloud/cs/kubernetesintro/labs/lab-06-finding-your-way/index.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://training.caha.cloud/cs/kubernetesintro/labs/lab-06-finding-your-way/index.html</guid><description>&lt;h1 id="lab-06--jak-se-v-kubectl-vyznat"&gt;Lab 06 – Jak se v kubectl vyznat&lt;/h1&gt;
&lt;span class="badge cstyle info badge-with-title"&gt;&lt;span class="badge-title"&gt;&lt;i class="fa-fw fas fa-info-circle"&gt;&lt;/i&gt; Info&lt;/span&gt;&lt;span class="badge-content"&gt;discovery&lt;/span&gt;&lt;/span&gt;
&lt;p&gt;&lt;strong&gt;Cíl:&lt;/strong&gt; už nikdy nepotřebovat internet na otázku o Kubernetes.
&lt;strong&gt;Kapitola:&lt;/strong&gt; &lt;a href="https://training.caha.cloud/cs/kubernetesintro/day-01/04-finding-your-way/"&gt;Jak se v kubectl vyznat&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;U každého úkolu je napsané, co máte nakonec vidět. Nejdřív zkoušejte sami;
v boxu je jedna funkční odpověď.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Úkol 1.&lt;/strong&gt; Vypište všechny druhy objektů, které cluster zná, a zjistěte, jestli
jsou &lt;code&gt;ingresses&lt;/code&gt; v namespace a jakou mají zkratku.&lt;/p&gt;
&lt;div class="expand"&gt;
&lt;input type="checkbox" id="expand-2" aria-controls="expandcontent-2" &gt;
&lt;label class="expand-label" for="expand-2" &gt;
&lt;i class="fas fa-chevron-down"&gt;&lt;/i&gt;
&lt;i class="fas fa-chevron-right"&gt;&lt;/i&gt;
Ukázat příkaz
&lt;/label&gt;
&lt;div id="expandcontent-2" class="expand-content"&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl api-resources
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl api-resources &lt;span class="p"&gt;|&lt;/span&gt; grep -i ingress
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;ingresses ing networking.k8s.io/v1 true Ingress&lt;/code&gt; – zkratka &lt;code&gt;ing&lt;/code&gt;, &lt;code&gt;true&lt;/code&gt;
znamená v namespace.&lt;/p&gt;</description></item><item><title>Lab 07 – Pody</title><link>https://training.caha.cloud/cs/kubernetesintro/labs/lab-07-pods/index.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://training.caha.cloud/cs/kubernetesintro/labs/lab-07-pods/index.html</guid><description>&lt;h1 id="lab-07--pody"&gt;Lab 07 – Pody&lt;/h1&gt;
&lt;p&gt;&lt;strong&gt;Cíl:&lt;/strong&gt; vygenerovat manifest podu, přidat zdroje a vidět, co pod doopravdy je.
&lt;strong&gt;Kapitola:&lt;/strong&gt; &lt;a href="https://training.caha.cloud/cs/kubernetesintro/day-01/05-pods/"&gt;Pody&lt;/a&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 1 – imperativně: vytvořit a zahodit&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl run bbox --image busybox --restart&lt;span class="o"&gt;=&lt;/span&gt;Never -- sleep &lt;span class="m"&gt;3600&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl get pods
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl delete pod bbox
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;--restart=Never&lt;/code&gt; je to, co z &lt;code&gt;kubectl run&lt;/code&gt; udělá holý pod místo něčeho
spravovaného. &lt;code&gt;-- sleep 3600&lt;/code&gt; přepisuje příkaz image, protože busybox by jinak
hned skončil.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 2 – místo toho si manifest vygenerujte&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ~
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl run bbox --image busybox --restart&lt;span class="o"&gt;=&lt;/span&gt;Never --dry-run&lt;span class="o"&gt;=&lt;/span&gt;client -o yaml &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -- sleep &lt;span class="m"&gt;3600&lt;/span&gt; &amp;gt; bbox.yaml
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cat bbox.yaml
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Upravte &lt;code&gt;bbox.yaml&lt;/code&gt; a přidejte kontejneru zdroje:&lt;/p&gt;</description></item><item><title>Lab 08 – Ladění podů</title><link>https://training.caha.cloud/cs/kubernetesintro/labs/lab-08-pod-troubleshooting/index.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://training.caha.cloud/cs/kubernetesintro/labs/lab-08-pod-troubleshooting/index.html</guid><description>&lt;h1 id="lab-08--ladění-podů"&gt;Lab 08 – Ladění podů&lt;/h1&gt;
&lt;span class="badge cstyle info badge-with-title"&gt;&lt;span class="badge-title"&gt;&lt;i class="fa-fw fas fa-info-circle"&gt;&lt;/i&gt; Info&lt;/span&gt;&lt;span class="badge-content"&gt;discovery&lt;/span&gt;&lt;/span&gt;
&lt;p&gt;&lt;strong&gt;Cíl:&lt;/strong&gt; diagnostikovat čtyři rozbité pody jen z výstupu clusteru.
&lt;strong&gt;Kapitola:&lt;/strong&gt; &lt;a href="https://training.caha.cloud/cs/kubernetesintro/day-02/01-troubleshooting/"&gt;Postup při ladění&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;U každého případu si nejdřív vyrobte problém uvedeným příkazem a pak
&lt;strong&gt;odpovězte na otázku dřív, než otevřete box&lt;/strong&gt;. Postup je vždy
get → describe → logs.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="případ-1--image-se-nedá-stáhnout"&gt;Případ 1 – image se nedá stáhnout&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl run broken1 --image&lt;span class="o"&gt;=&lt;/span&gt;nginx:doesnotexist
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl get pod broken1
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Otázka.&lt;/strong&gt; V jakém je stavu a kde přesně vám cluster říká proč?&lt;/p&gt;</description></item><item><title>Lab 09 – Namespaces</title><link>https://training.caha.cloud/cs/kubernetesintro/labs/lab-09-namespaces/index.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://training.caha.cloud/cs/kubernetesintro/labs/lab-09-namespaces/index.html</guid><description>&lt;h1 id="lab-09--namespaces"&gt;Lab 09 – Namespaces&lt;/h1&gt;
&lt;p&gt;&lt;strong&gt;Cíl:&lt;/strong&gt; ohraničit si práci a přestat psát &lt;code&gt;-n&lt;/code&gt;.
&lt;strong&gt;Kapitola:&lt;/strong&gt; &lt;a href="https://training.caha.cloud/cs/kubernetesintro/day-02/02-namespaces/"&gt;Namespaces&lt;/a&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 1 – co existuje teď&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl get ns
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Čtyři namespacy má každý cluster. &lt;code&gt;kube-system&lt;/code&gt; obsahuje pody control plane –
dívat se ano, nasazovat tam ne.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 2 – deklarativně (doporučeno)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ~
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cat &amp;gt; ns-dev.yaml &lt;span class="s"&gt;&amp;lt;&amp;lt;&amp;#39;YAML&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;apiVersion: v1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;kind: Namespace
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;metadata:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; name: dev
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;YAML&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl apply -f ns-dev.yaml
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 3 – imperativně, pro jednorázový&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl create ns &lt;span class="nb"&gt;test&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 4 – stejné jméno v obou, bez konfliktu&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl run web --image nginx:1.27 -n dev
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl run web --image nginx:1.27 -n &lt;span class="nb"&gt;test&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl get pods -n dev
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl get pods -A &lt;span class="p"&gt;|&lt;/span&gt; grep &lt;span class="s1"&gt;&amp;#39; web &amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Jména jsou unikátní &lt;strong&gt;na namespace a druh objektu&lt;/strong&gt;. O to přesně jde: dev i prod
můžou mít &lt;code&gt;web&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Lab 10 – ReplicaSets</title><link>https://training.caha.cloud/cs/kubernetesintro/labs/lab-10-replicasets/index.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://training.caha.cloud/cs/kubernetesintro/labs/lab-10-replicasets/index.html</guid><description>&lt;h1 id="lab-10--replicasets"&gt;Lab 10 – ReplicaSets&lt;/h1&gt;
&lt;p&gt;&lt;strong&gt;Cíl:&lt;/strong&gt; vidět reconciliation smyčku při práci a selektor, který váže pody.
&lt;strong&gt;Kapitola:&lt;/strong&gt; &lt;a href="https://training.caha.cloud/cs/kubernetesintro/day-02/03-replicasets/"&gt;ReplicaSets&lt;/a&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 1 – ReplicaSet ručně (jediná situace, kdy ho budete psát)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ~
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cat &amp;gt; web-rs.yaml &lt;span class="s"&gt;&amp;lt;&amp;lt;&amp;#39;YAML&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;apiVersion: apps/v1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;kind: ReplicaSet
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;metadata:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; name: web-rs
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;spec:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; replicas: 3
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; selector:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; matchLabels:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; app: web
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; template:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; metadata:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; labels:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; app: web
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; spec:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; containers:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; - name: web
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; image: nginx:1.27
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; resources:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; requests: { cpu: &amp;#34;20m&amp;#34;, memory: &amp;#34;32Mi&amp;#34; }
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;YAML&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl apply -f web-rs.yaml
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl get rs,pods -l &lt;span class="nv"&gt;app&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;web -o wide
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Všimněte si jmen podů: &lt;code&gt;web-rs-&lt;/code&gt; plus hash šablony plus náhodná přípona. Vlastní
je kontroler, což potvrdí &lt;code&gt;kubectl get pod &amp;lt;jméno&amp;gt; -o yaml | grep -A5 ownerReferences&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Lab 11 – Deployments a probes</title><link>https://training.caha.cloud/cs/kubernetesintro/labs/lab-11-deployments/index.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://training.caha.cloud/cs/kubernetesintro/labs/lab-11-deployments/index.html</guid><description>&lt;h1 id="lab-11--deployments-a-probes"&gt;Lab 11 – Deployments a probes&lt;/h1&gt;
&lt;p&gt;&lt;strong&gt;Cíl:&lt;/strong&gt; nasadit novou verzi, rozbít ji, vrátit se – a pochopit, proč to nebolelo.
&lt;strong&gt;Kapitola:&lt;/strong&gt; &lt;a href="https://training.caha.cloud/cs/kubernetesintro/day-02/04-deployments/"&gt;Deployments&lt;/a&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 1 – generovat, nepsat ručně&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ~
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl create deploy web --image nginx:1.27 --replicas &lt;span class="m"&gt;3&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --dry-run&lt;span class="o"&gt;=&lt;/span&gt;client -o yaml &amp;gt; web-deploy.yaml
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl apply -f web-deploy.yaml
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl get deploy,rs,pods -l &lt;span class="nv"&gt;app&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;web
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Tři objekty z jednoho příkazu: Deployment, který jste chtěli, ReplicaSet, který
vytvořil, a pody, které vytvořil ten ReplicaSet.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 2 – nová verze&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl &lt;span class="nb"&gt;set&lt;/span&gt; image deploy/web &lt;span class="nv"&gt;nginx&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;nginx:1.28
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl rollout status deploy/web
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl get rs -l &lt;span class="nv"&gt;app&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;web
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Teď jsou ReplicaSety dva: starý na nule, nový na třech. Starý se schválně
nechává – je to váš rollback.&lt;/p&gt;</description></item><item><title>Lab 12 – DaemonSets</title><link>https://training.caha.cloud/cs/kubernetesintro/labs/lab-12-daemonsets/index.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://training.caha.cloud/cs/kubernetesintro/labs/lab-12-daemonsets/index.html</guid><description>&lt;h1 id="lab-12--daemonsets"&gt;Lab 12 – DaemonSets&lt;/h1&gt;
&lt;p&gt;&lt;strong&gt;Cíl:&lt;/strong&gt; jeden pod na uzel a dvě překvapení, která k tomu patří.
&lt;strong&gt;Kapitola:&lt;/strong&gt; &lt;a href="https://training.caha.cloud/cs/kubernetesintro/day-02/05-daemonsets/"&gt;DaemonSets&lt;/a&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 1 – cluster jich už několik provozuje&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl get ds -A
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl get pods -n kube-system -o wide &lt;span class="p"&gt;|&lt;/span&gt; grep -i -E &lt;span class="s1"&gt;&amp;#39;proxy|calico|cilium|flannel&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;kube-proxy a agent CNI jsou DaemonSety: musí být na každém uzlu, včetně uzlů,
které přibudou zítra. Nikde není pole &lt;code&gt;replicas&lt;/code&gt; – počtem je seznam uzlů.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 2 – váš vlastní&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ~
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cat &amp;gt; logger-ds.yaml &lt;span class="s"&gt;&amp;lt;&amp;lt;&amp;#39;YAML&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;apiVersion: apps/v1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;kind: DaemonSet
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;metadata:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; name: node-logger
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;spec:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; selector:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; matchLabels:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; app: node-logger
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; template:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; metadata:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; labels:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; app: node-logger
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; spec:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; containers:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; - name: logger
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; image: busybox
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; command: [&amp;#34;sh&amp;#34;, &amp;#34;-c&amp;#34;, &amp;#34;while true; do echo \&amp;#34;$(date) $(hostname)\&amp;#34;; sleep 30; done&amp;#34;]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; resources:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; requests: { cpu: &amp;#34;10m&amp;#34;, memory: &amp;#34;16Mi&amp;#34; }
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;YAML&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl apply -f logger-ds.yaml
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl get ds node-logger
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl get pods -l &lt;span class="nv"&gt;app&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;node-logger -o wide
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Tři pody, jeden na každém workeru – a &lt;strong&gt;žádný na control01&lt;/strong&gt;.&lt;/p&gt;</description></item><item><title>Lab 13 – Taints, tolerations a affinity</title><link>https://training.caha.cloud/cs/kubernetesintro/labs/lab-13-scheduling/index.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://training.caha.cloud/cs/kubernetesintro/labs/lab-13-scheduling/index.html</guid><description>&lt;h1 id="lab-13--taints-tolerations-a-affinity"&gt;Lab 13 – Taints, tolerations a affinity&lt;/h1&gt;
&lt;p&gt;&lt;strong&gt;Cíl:&lt;/strong&gt; řídit, kam pody přistanou – a vidět rozdíl mezi &lt;em&gt;povoleno&lt;/em&gt; a &lt;em&gt;přitahováno&lt;/em&gt;.
&lt;strong&gt;Kapitola:&lt;/strong&gt; &lt;a href="https://training.caha.cloud/cs/kubernetesintro/day-02/06-scheduling/"&gt;Plánování&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="tainty-odpuzují"&gt;Tainty odpuzují&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 1 – výchozí stav: 6 podů rozprostřených po třech workerech&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl create deploy filler --image nginx:1.27 --replicas &lt;span class="m"&gt;6&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl get pods -o wide &lt;span class="p"&gt;|&lt;/span&gt; sort -k7
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 2 – otaintujte worker03 a sledujte, jak se mu nové pody vyhnou&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl taint node worker03 &lt;span class="nv"&gt;disk&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;ssd:NoSchedule
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl describe node worker03 &lt;span class="p"&gt;|&lt;/span&gt; grep -i -A2 taint
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl scale deploy filler --replicas &lt;span class="m"&gt;12&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl get pods -o wide &lt;span class="p"&gt;|&lt;/span&gt; grep -c worker03 &lt;span class="c1"&gt;# beze změny&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Pody, které na worker03 už byly, tam pořád jsou. &lt;code&gt;NoSchedule&lt;/code&gt; ovlivňuje jen
&lt;em&gt;umístění&lt;/em&gt;; nic nevystěhuje.&lt;/p&gt;</description></item><item><title>Lab 14 – Services</title><link>https://training.caha.cloud/cs/kubernetesintro/labs/lab-14-services/index.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://training.caha.cloud/cs/kubernetesintro/labs/lab-14-services/index.html</guid><description>&lt;h1 id="lab-14--services"&gt;Lab 14 – Services&lt;/h1&gt;
&lt;p&gt;&lt;strong&gt;Cíl:&lt;/strong&gt; dosáhnout na pody přes stabilní jméno, zevnitř i zvenčí.
&lt;strong&gt;Kapitola:&lt;/strong&gt; &lt;a href="https://training.caha.cloud/cs/kubernetesintro/day-02/07-services/"&gt;Services&lt;/a&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 1 – co budeme vystavovat&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ~
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl create deploy web --image nginx:1.27 --replicas &lt;span class="m"&gt;3&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl get pods -l &lt;span class="nv"&gt;app&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;web -o wide &lt;span class="c1"&gt;# všimněte si IP podů&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 2 – ClusterIP, výchozí typ&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl expose deploy web --port &lt;span class="m"&gt;80&lt;/span&gt; --name web-svc
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl get svc web-svc
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl get endpointslices -l kubernetes.io/service-name&lt;span class="o"&gt;=&lt;/span&gt;web-svc
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Zajímavý objekt je EndpointSlice: drží ty tři IP podů. Service je jen stabilní
průčelí; EndpointSlice je živý seznam členů, který udržuje kontroler podle toho,
které pody jsou ready.&lt;/p&gt;</description></item><item><title>Lab 15 – Gateway API</title><link>https://training.caha.cloud/cs/kubernetesintro/labs/lab-15-gateway-api/index.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://training.caha.cloud/cs/kubernetesintro/labs/lab-15-gateway-api/index.html</guid><description>&lt;h1 id="lab-15--gateway-api"&gt;Lab 15 – Gateway API&lt;/h1&gt;
&lt;p&gt;&lt;strong&gt;Cíl:&lt;/strong&gt; nainstalovat Gateway controller a nasměrovat dvě aplikace podle jména
hosta přes jeden port – a pak rozdělit provoz mezi dvě verze.
&lt;strong&gt;Kapitola:&lt;/strong&gt; &lt;a href="https://training.caha.cloud/cs/kubernetesintro/day-02/08-gateway-api/"&gt;Gateway API&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Objekty Gateway API jsou jen data. Nejdřív musí existovat dvě věci: &lt;strong&gt;CRD&lt;/strong&gt;
(nejsou součástí Kubernetes) a &lt;strong&gt;controller&lt;/strong&gt;, který je čte.&lt;/p&gt;
&lt;h2 id="instalace-crd"&gt;Instalace CRD&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 1 – standardní kanál: GatewayClass, Gateway, HTTPRoute&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl apply -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.3.0/standard-install.yaml
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl get crd &lt;span class="p"&gt;|&lt;/span&gt; grep gateway.networking
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl api-resources --api-group&lt;span class="o"&gt;=&lt;/span&gt;gateway.networking.k8s.io
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Právě jste rozšířili API server o nové druhy objektů – přesně ten mechanismus
CRD, který probíráme třetí den, tady potkaný v praxi. Na
&lt;a href="https://github.com/kubernetes-sigs/gateway-api/releases" target="_blank"&gt;stránce vydání&lt;/a&gt;
zkontrolujte, jestli není novější verze.&lt;/p&gt;</description></item><item><title>Lab 16 – Operace s uzly</title><link>https://training.caha.cloud/cs/kubernetesintro/labs/lab-16-node-operations/index.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://training.caha.cloud/cs/kubernetesintro/labs/lab-16-node-operations/index.html</guid><description>&lt;h1 id="lab-16--operace-s-uzly"&gt;Lab 16 – Operace s uzly&lt;/h1&gt;
&lt;span class="badge cstyle info badge-with-title"&gt;&lt;span class="badge-title"&gt;&lt;i class="fa-fw fas fa-info-circle"&gt;&lt;/i&gt; Info&lt;/span&gt;&lt;span class="badge-content"&gt;discovery&lt;/span&gt;&lt;/span&gt;
&lt;p&gt;&lt;strong&gt;Cíl:&lt;/strong&gt; bezpečně odstavit uzel kvůli údržbě a vrátit ho zpět.
&lt;strong&gt;Kapitola:&lt;/strong&gt; &lt;a href="https://training.caha.cloud/cs/kubernetesintro/day-02/09-nodes/"&gt;Uzly (nodes)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Všechno tady jsou pod kapotou tainty – viz
&lt;a href="https://training.caha.cloud/cs/kubernetesintro/labs/lab-13-scheduling/"&gt;lab 13&lt;/a&gt;, pokud si je
chcete vyzkoušet ručně.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# příprava – ať máme čím hýbat&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl create deploy filler --image nginx:1.27 --replicas &lt;span class="m"&gt;6&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl get pods -o wide &lt;span class="p"&gt;|&lt;/span&gt; sort -k7
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Úkol 1.&lt;/strong&gt; Zabraňte plánování nových podů na worker03, aniž byste narušili to,
co tam běží. Očekávaný výsledek: &lt;code&gt;kubectl get nodes&lt;/code&gt; ukazuje u worker03
&lt;code&gt;Ready,SchedulingDisabled&lt;/code&gt; a jeho pody jsou netknuté.&lt;/p&gt;</description></item><item><title>Lab 17 – ConfigMapy a Secrety</title><link>https://training.caha.cloud/cs/kubernetesintro/labs/lab-17-configmaps-secrets/index.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://training.caha.cloud/cs/kubernetesintro/labs/lab-17-configmaps-secrets/index.html</guid><description>&lt;h1 id="lab-17--configmapy-a-secrety"&gt;Lab 17 – ConfigMapy a Secrety&lt;/h1&gt;
&lt;p&gt;&lt;strong&gt;Cíl:&lt;/strong&gt; stejný image, jiná konfigurace – a zjistit, které změny potřebují restart.
&lt;strong&gt;Kapitola:&lt;/strong&gt; &lt;a href="https://training.caha.cloud/cs/kubernetesintro/day-03/01-configmaps-secrets/"&gt;ConfigMapy a Secrety&lt;/a&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 1 – z literálů a ze souboru&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ~
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;printf&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;color=blue\nretries=3\n&amp;#39;&lt;/span&gt; &amp;gt; app.properties
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl create cm app-cfg &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --from-literal&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;DATACENTER&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;dc01 &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --from-file&lt;span class="o"&gt;=&lt;/span&gt;app.properties
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl get cm app-cfg -o yaml
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;--from-literal&lt;/code&gt; udělá jeden klíč; &lt;code&gt;--from-file&lt;/code&gt; udělá klíč pojmenovaný podle
souboru, jehož hodnotou je celý soubor. Obojí končí ve stejné mapě &lt;code&gt;data&lt;/code&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 2 – spotřebujte obojím způsobem najednou&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cat &amp;gt; cfgpod.yaml &lt;span class="s"&gt;&amp;lt;&amp;lt;&amp;#39;YAML&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;apiVersion: v1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;kind: Pod
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;metadata:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; name: cfgpod
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;spec:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; containers:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; - name: box
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; image: busybox
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; command: [&amp;#34;sh&amp;#34;, &amp;#34;-c&amp;#34;, &amp;#34;env | sort; sleep 3600&amp;#34;]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; env:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; - name: DATACENTER
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; valueFrom:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; configMapKeyRef:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; name: app-cfg
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; key: DATACENTER
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; volumeMounts:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; - name: cfg
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; mountPath: /etc/appcfg
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; volumes:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; - name: cfg
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; configMap:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; name: app-cfg
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;YAML&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl apply -f cfgpod.yaml
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl logs cfgpod &lt;span class="p"&gt;|&lt;/span&gt; grep DATACENTER
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl &lt;span class="nb"&gt;exec&lt;/span&gt; cfgpod -- ls /etc/appcfg
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl &lt;span class="nb"&gt;exec&lt;/span&gt; cfgpod -- cat /etc/appcfg/app.properties
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Z každého klíče vznikl soubor v &lt;code&gt;/etc/appcfg&lt;/code&gt; a z jednoho navíc proměnná
prostředí.&lt;/p&gt;</description></item><item><title>Lab 18 – Perzistentní úložiště na NFS</title><link>https://training.caha.cloud/cs/kubernetesintro/labs/lab-18-persistent-storage/index.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://training.caha.cloud/cs/kubernetesintro/labs/lab-18-persistent-storage/index.html</guid><description>&lt;h1 id="lab-18--perzistentní-úložiště-na-nfs"&gt;Lab 18 – Perzistentní úložiště na NFS&lt;/h1&gt;
&lt;p&gt;&lt;strong&gt;Cíl:&lt;/strong&gt; dát podu úložiště, které ho přežije – bez StorageClass a bez CSI
driveru, přesně jak vypadá on-premise cluster.
&lt;strong&gt;Kapitola:&lt;/strong&gt; &lt;a href="https://training.caha.cloud/cs/kubernetesintro/day-03/02-storage/"&gt;Perzistentní úložiště&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;support01 exportuje přes NFS &lt;code&gt;/storage1&lt;/code&gt;, &lt;code&gt;/storage2&lt;/code&gt; a &lt;code&gt;/storage3&lt;/code&gt;. Dynamické
provisioning tu není, takže PersistentVolume napíšete &lt;strong&gt;vy&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id="příprava-uzlů"&gt;Příprava uzlů&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 1 – každý uzel, který připojuje NFS, potřebuje klientské nástroje&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;for&lt;/span&gt; n in worker01 worker02 worker03&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ssh student@&lt;span class="nv"&gt;$n&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;dpkg -l nfs-common &amp;gt;/dev/null 2&amp;gt;&amp;amp;1 &amp;amp;&amp;amp; echo &amp;#34;$(hostname): ok&amp;#34; || sudo apt-get install -y nfs-common&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;done&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 2 – ověřte export z uzlu, nejdřív mimo Kubernetes&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ssh student@worker01 &lt;span class="s1"&gt;&amp;#39;sudo mkdir -p /mnt/t &amp;amp;&amp;amp; sudo mount -t nfs support01:/storage1 /mnt/t &amp;amp;&amp;amp; df -h /mnt/t &amp;amp;&amp;amp; sudo umount /mnt/t&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Vždy si mount vyzkoušejte ručně, než začnete vinit Kubernetes. Pod zaseknutý
v &lt;code&gt;ContainerCreating&lt;/code&gt; s chybou NFS obvykle znamená chybějící &lt;code&gt;nfs-common&lt;/code&gt;,
špatnou cestu exportu nebo práva exportu.&lt;/p&gt;</description></item><item><title>Lab 19 – StatefulSets</title><link>https://training.caha.cloud/cs/kubernetesintro/labs/lab-19-statefulsets/index.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://training.caha.cloud/cs/kubernetesintro/labs/lab-19-statefulsets/index.html</guid><description>&lt;h1 id="lab-19--statefulsets"&gt;Lab 19 – StatefulSets&lt;/h1&gt;
&lt;p&gt;&lt;strong&gt;Cíl:&lt;/strong&gt; stabilní jména, úložiště na každý pod, řízené pořadí – a překvapení
při úklidu.
&lt;strong&gt;Kapitola:&lt;/strong&gt; &lt;a href="https://training.caha.cloud/cs/kubernetesintro/day-03/03-statefulsets/"&gt;StatefulSets&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Lab potřebuje tři PV z
&lt;a href="https://training.caha.cloud/cs/kubernetesintro/labs/lab-18-persistent-storage/"&gt;labu 18&lt;/a&gt;.
Ověřte, že jsou &lt;code&gt;Available&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl get pv
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl patch pv pv-storage1 -p &lt;span class="s1"&gt;&amp;#39;{&amp;#34;spec&amp;#34;:{&amp;#34;claimRef&amp;#34;:null}}&amp;#39;&lt;/span&gt; 2&amp;gt;/dev/null
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl get pv
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="nejdřív-headless-service"&gt;Nejdřív headless Service&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 1 –&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ~
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cat &amp;gt; web-headless.yaml &lt;span class="s"&gt;&amp;lt;&amp;lt;&amp;#39;YAML&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;apiVersion: v1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;kind: Service
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;metadata:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; name: web-headless
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;spec:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; clusterIP: None # headless – žádná virtuální IP
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; selector:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; app: web-sts
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; ports:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; - port: 80
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;YAML&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl apply -f web-headless.yaml
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl get svc web-headless &lt;span class="c1"&gt;# CLUSTER-IP je &amp;#34;None&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Normální Service pody schová za jednu IP. Headless Service dělá opak: DNS vrátí
adresy jednotlivých podů, takže je každá replika adresovatelná jménem.
StatefulSet ji vyžaduje.&lt;/p&gt;</description></item><item><title>Lab 20 – Helm release</title><link>https://training.caha.cloud/cs/kubernetesintro/labs/lab-20-helm-releases/index.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://training.caha.cloud/cs/kubernetesintro/labs/lab-20-helm-releases/index.html</guid><description>&lt;h1 id="lab-20--helm-release"&gt;Lab 20 – Helm release&lt;/h1&gt;
&lt;p&gt;&lt;strong&gt;Cíl:&lt;/strong&gt; nainstalovat, nakonfigurovat, povýšit a vrátit zpět cizí chart.
&lt;strong&gt;Kapitola:&lt;/strong&gt; &lt;a href="https://training.caha.cloud/cs/kubernetesintro/day-03/04-helm-basics/"&gt;Základy Helmu&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Helm už by měl být nainstalovaný z labu 14. Pokud ne:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;chmod +x get_helm.sh &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; sudo ./get_helm.sh &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; helm version
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 1 – repozitář&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;helm repo add podinfo https://stefanprodan.github.io/podinfo
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;helm repo update
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;helm repo list
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;helm search repo podinfo
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;helm search repo podinfo --versions &lt;span class="p"&gt;|&lt;/span&gt; head -5
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Repozitář je jen web server s &lt;code&gt;index.yaml&lt;/code&gt;. &lt;code&gt;helm repo update&lt;/code&gt; ten index znovu
stáhne – jinam Helm nesahá, dokud něco neinstalujete.&lt;/p&gt;</description></item><item><title>Lab 21 – Vlastní chart</title><link>https://training.caha.cloud/cs/kubernetesintro/labs/lab-21-helm-chart-authoring/index.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://training.caha.cloud/cs/kubernetesintro/labs/lab-21-helm-chart-authoring/index.html</guid><description>&lt;h1 id="lab-21--vlastní-chart"&gt;Lab 21 – Vlastní chart&lt;/h1&gt;
&lt;p&gt;&lt;strong&gt;Cíl:&lt;/strong&gt; zabalit aplikaci tak, aby šla nainstalovat vícekrát s jinými hodnotami.
&lt;strong&gt;Kapitola:&lt;/strong&gt; &lt;a href="https://training.caha.cloud/cs/kubernetesintro/day-03/05-helm-charts/"&gt;Helm charty&lt;/a&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 1 – kostra a co v ní je&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ~
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;helm create shop
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;find shop -type f &lt;span class="p"&gt;|&lt;/span&gt; sort
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cat shop/Chart.yaml
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;head -30 shop/values.yaml
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;helm create&lt;/code&gt; dá funkční nginx chart s mnohem víc mašinerií, než potřebujete.
Přečíst si ji stojí za to: ukazuje konvence, které dodržuje každý veřejný chart.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 2 – vyrenderujte výchozí chart, než něco změníte&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;helm template shop &lt;span class="p"&gt;|&lt;/span&gt; head -40
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;helm lint shop
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;helm template&lt;/code&gt; nepotřebuje cluster ani síť. Spouštějte ho po každé úpravě – je
rychlejší než jakákoli instalace a ukáže skutečné YAML.&lt;/p&gt;</description></item><item><title>Lab 22 – Operátor: PostgreSQL</title><link>https://training.caha.cloud/cs/kubernetesintro/labs/lab-22-postgres-operator/index.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://training.caha.cloud/cs/kubernetesintro/labs/lab-22-postgres-operator/index.html</guid><description>&lt;h1 id="lab-22--operátor-postgresql"&gt;Lab 22 – Operátor: PostgreSQL&lt;/h1&gt;
&lt;p&gt;&lt;strong&gt;Cíl:&lt;/strong&gt; nainstalovat skutečný operátor, vytvořit databázový cluster jedním
malým manifestem a sledovat, jak ho operátor sám opraví.
&lt;strong&gt;Kapitola:&lt;/strong&gt; &lt;a href="https://training.caha.cloud/cs/kubernetesintro/day-03/06-crds-operators/"&gt;CRD a operátory&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Použijete &lt;a href="https://cloudnative-pg.io/" target="_blank"&gt;CloudNativePG&lt;/a&gt;, operátor pro PostgreSQL.
Všechno dosud probrané platí: operátor vytváří pody podobné StatefulSetu,
Services, Secrety a PVC – objekty, které už umíte číst.&lt;/p&gt;
&lt;h2 id="nejdřív-úložiště"&gt;Nejdřív úložiště&lt;/h2&gt;
&lt;p&gt;Cluster nemá dynamické provisioning, takže PV musí existovat dřív, než si o ně
databáze řekne. Použijte NFS PV z labu 18:&lt;/p&gt;</description></item><item><title>Lab 23 – Aplikace od začátku do konce</title><link>https://training.caha.cloud/cs/kubernetesintro/labs/lab-23-application-end-to-end/index.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://training.caha.cloud/cs/kubernetesintro/labs/lab-23-application-end-to-end/index.html</guid><description>&lt;h1 id="lab-23--aplikace-od-začátku-do-konce"&gt;Lab 23 – Aplikace od začátku do konce&lt;/h1&gt;
&lt;p&gt;&lt;span class="badge cstyle info badge-with-title"&gt;&lt;span class="badge-title"&gt;&lt;i class="fa-fw fas fa-info-circle"&gt;&lt;/i&gt; Info&lt;/span&gt;&lt;span class="badge-content"&gt;discovery&lt;/span&gt;&lt;/span&gt; &lt;em&gt;volitelný / zbude-li čas&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Cíl:&lt;/strong&gt; postavit, provozovat, rozbít a opravit kompletní aplikaci se vším ze
tří dnů.&lt;/p&gt;
&lt;p&gt;Tenhle lab říká &lt;strong&gt;co&lt;/strong&gt;, ne &lt;strong&gt;jak&lt;/strong&gt;. Každý příkaz je v
&lt;a href="https://training.caha.cloud/cs/kubernetesintro/cheatsheets/"&gt;tahácích&lt;/a&gt;, v &lt;code&gt;kubectl explain&lt;/code&gt;
nebo pod &lt;code&gt;--help&lt;/code&gt;.&lt;/p&gt;
&lt;div class="box notices cstyle tip"&gt;
&lt;div class="box-label"&gt;&lt;i class="fa-fw fas fa-lightbulb"&gt;&lt;/i&gt; Tip&lt;/div&gt;
&lt;div class="box-content"&gt;
&lt;p&gt;Každá etapa končí boxem s &lt;strong&gt;řešením&lt;/strong&gt;. Nejdřív ji zkuste sami; box otevřete,
když se zaseknete nebo si chcete své řešení porovnat s funkčním. Každý box je
samostatný, takže se můžete připojit na začátku libovolné etapy, i když jste
předchozí neudělali po svém. Pokud jste ztracení úplně, skočte dolů na
&lt;a href="#dohnat-to-jedn%c3%adm-vlo%c5%been%c3%adm"&gt;Dohnat to jedním vložením&lt;/a&gt;.&lt;/p&gt;</description></item></channel></rss>