Jak se v kubectl vyznat
Jak se v kubectl vyznat
Kubernetes API si nikdo nepamatuje. Cluster umí popsat sám sebe a tahle kapitola je o tom, jak ho k tomu donutit. Všechno funguje offline a proti verzi, kterou skutečně provozujete – což vám internet neslíbí.
Jaké druhy objektů existují?
kubectl api-resources
kubectl api-resources | grep -i ingress
kubectl api-resources --namespaced=false # objekty mimo namespace
Výstup dá čtyři věci: množné jméno, které píšete, zkratku (deploy, svc,
po), API skupinu a verzi, a jestli objekt patří do namespace.
Jaká pole má daný druh?
kubectl explain je API referenka generovaná z běžícího serveru.
kubectl explain pod
kubectl explain pod.spec
kubectl explain pod.spec.containers.resources
kubectl explain deploy.spec.strategy --recursive | head -20
kubectl explain ingress.spec.rules
Všímejte si značek -required-: říkají, jaké je minimum pro daný druh objektu.
Nápověda k příkazům
kubectl help
kubectl create --help # každý podpříkaz má vlastní nápovědu
kubectl create deploy --help # s příklady na konci
kubectl options # globální přepínače
Blok Examples: na konci --help bývá nejrychlejší odpovědí.
Jak objekt vypadá právě teď?
kubectl get pod web -o yaml # včetně výchozích hodnot doplněných API
kubectl get pod web -o jsonpath='{.status.podIP}'
kubectl get pods -o wide # uzel, IP, stáří
get -o yaml ukáže objekt; describe ukáže objekt plus události, plus
související objekty.
describe
kubectl describe pod web
kubectl describe node worker01
kubectl describe svc web-svc
Rolujte dolů. Blok Events je nejužitečnější výstup v celém Kubernetes: je to
kontroler, který vám lidskou řečí říká, co zkusil a co se pokazilo.
Události po zhruba hodině expirují. Chybějící události u starého objektu tedy neznamenají nic.
logs
kubectl logs web
kubectl logs web -c sidecar # konkrétní kontejner
kubectl logs web --previous # instance, která spadla
kubectl logs -l app=web --tail=50 # podle labelu, napříč pody
kubectl logs -f deploy/web # průběžně, přes kontroler
describe dřív než logs: když se kontejner nikdy nespustil, žádné logy
nejsou a důvod je v událostech.
Manifesty si nechte vygenerovat
kubectl run web --image nginx --dry-run=client -o yaml > web.yaml
kubectl create deploy web --image nginx --dry-run=client -o yaml
kubectl create ingress web --rule="web.k8s.lab/*=web-svc:80" --dry-run=client -o yaml
Tohle je zamýšlený postup: kostru vygenerovat imperativně, upravit ji a nasadit deklarativně.