Lab 07 – Pody
Lab 07 – Pody
Cíl: vygenerovat manifest podu, přidat zdroje a vidět, co pod doopravdy je. Kapitola: Pody
# 1 – imperativně: vytvořit a zahodit
kubectl run bbox --image busybox --restart=Never -- sleep 3600
kubectl get pods
kubectl delete pod bbox
--restart=Never je to, co z kubectl run udělá holý pod místo něčeho
spravovaného. -- sleep 3600 přepisuje příkaz image, protože busybox by jinak
hned skončil.
# 2 – místo toho si manifest vygenerujte
cd ~
kubectl run bbox --image busybox --restart=Never --dry-run=client -o yaml \
-- sleep 3600 > bbox.yaml
cat bbox.yaml
Upravte bbox.yaml a přidejte kontejneru zdroje:
spec:
containers:
- name: bbox
image: busybox
command: ["sleep", "3600"]
resources: # <-- přidejte tento blok
requests:
cpu: "50m"
memory: "32Mi"
limits:
cpu: "100m"
memory: "64Mi"
50m je 50 milicoru – pět setin CPU. Scheduler odečítá requesty od volné
kapacity uzlu; limity vynucují cgroups za běhu.
# 3 – nasaďte a ověřte, co API skutečně uložilo
kubectl apply -f bbox.yaml
kubectl get pod bbox -o wide
kubectl describe pod bbox | grep -A6 Limits
kubectl get pod bbox -o jsonpath='{.spec.containers[0].resources}{"\n"}'
# 4 – podívejte se dovnitř
kubectl exec -it bbox -- sh -c 'hostname; ip -brief address; cat /etc/resolv.conf'
resolv.conf ukazuje na Service CoreDNS a obsahuje search domény, díky kterým se
web-svc přeloží na web-svc.default.svc.cluster.local. Takhle fungují všechna
jména služeb v tomhle kurzu.
# 5 – která pole jde měnit za běhu?
sed -i 's/image: busybox/image: busybox:1.36/' bbox.yaml
kubectl apply -f bbox.yaml # projde – image je měnitelný
sed -i 's/cpu: "100m"/cpu: "200m"/' bbox.yaml
kubectl apply -f bbox.yaml # pozorně si přečtěte chybu
Většina specifikace podu je neměnná. Kubernetes pody nahrazuje, nepřenastavuje je – a právě proto používáte kontroler.
Dva kontejnery, jeden pod
# 6 –
cat > twin.yaml <<'YAML'
apiVersion: v1
kind: Pod
metadata:
name: twin
spec:
containers:
- name: web
image: nginx:1.27
- name: shell
image: busybox
command: ["sleep", "3600"]
YAML
kubectl apply -f twin.yaml
kubectl get pod twin # READY 2/2
kubectl exec -it twin -c shell -- wget -qO- localhost:80 | head -3
kubectl logs twin -c web
Busybox dosáhne na nginx přes localhost – sdílejí jeden síťový namespace.
-c vybírá kontejner pro exec a logs; bez něj vezme kubectl první.
Objevovací část
InfodiscoveryÚkol A. Vytvořte pod initdemo, který počká, až nginx v podu twin
odpoví, a teprve pak spustí hlavní kontejner. Ten jen spí. Očekávaný výsledek:
kubectl get pod initdemo chvíli ukazuje Init:0/1, pak Running.
Úkol B. Bez mazání čehokoli zjistěte, kolik paměti smí pod twin použít.
Očekávaný výsledek: nemá žádný limit.
Úklid
kubectl delete -f bbox.yaml -f twin.yaml
kubectl delete pod initdemo --ignore-not-found