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.

graph LR A["api-resources<br/>co existuje?"] --> B["explain<br/>jaká má pole?"] B --> C["get -o yaml<br/>co je uloženo teď?"] C --> D["describe<br/>co se s tím dělo?"] D --> E["logs<br/>co řekla aplikace?"]

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ě.

Reference