Lab 05 – První pohled na cluster
Lab 05 – První pohled na cluster
Cíl: zjistit, z čeho je cluster složený, a vidět rozdíl mezi imperativním a deklarativním přístupem. Tahák: kubectl
# 1 – kam a jako kdo jsem připojen?
kubectl cluster-info
kubectl config get-contexts
kubectl config view --minify | grep server
Zvykněte si na config get-contexts před čímkoli destruktivním. Většina
produkčních nehod je příkaz napsaný na správný objekt ve špatném clusteru.
# 2 – stroje
kubectl get nodes -o wide
kubectl describe node control01 | head -40
kubectl describe node worker01 | grep -A6 'Allocated resources'
V describe node jsou důležité tři bloky: Conditions (je zdravý?),
Taints (co tu odmítá běžet?) a Allocated resources (jak je plný?).
Všimněte si, že se počítá z requestů podů, ne ze skutečného vytížení.
# 3 – co cluster provozuje sám pro sebe?
kubectl get pods -n kube-system -o wide
Většinu poznáte z diagramu architektury: API server, etcd, scheduler, controller manager, CoreDNS a jeden pod CNI na každém uzlu.
Imperativně
# 4 – akce, provedená jednou
kubectl run web01 --image nginx:1.27
kubectl get pods -o wide
kubectl run web01 --image nginx:1.27 # chyba: už existuje – není idempotentní
kubectl delete pod web01
Deklarativně
# 5 – manifest si nechte vygenerovat
cd ~
kubectl run web01 --image nginx:1.27 --dry-run=client -o yaml > web01.yaml
cat web01.yaml
--dry-run=client objekt sestaví lokálně a vypíše ho místo odeslání. Je to
nejrychlejší cesta ke správnému manifestu – vygenerovat, pak upravit.
# 6 – nasaďte dvakrát
kubectl apply -f web01.yaml
kubectl apply -f web01.yaml # „unchanged“ – idempotence
kubectl get pod web01
Druhý apply nic neudělá, protože požadovaný stav už odpovídá. Právě proto je
apply bezpečný v pipeline a run se do ní nehodí.
# 7 – změňte soubor a nasaďte znovu
sed -i 's/nginx:1.27/nginx:1.28/' web01.yaml
kubectl apply -f web01.yaml
kubectl get pod web01 -o jsonpath='{.spec.containers[0].image}{"\n"}'
Úklid
# 8 – mažte stejným souborem, kterým jste vytvářeli
kubectl delete -f web01.yaml