kubectl tahák

kubectl tahák

Spouštějte na support01 s připraveným ~/.kube/config (Lab 01). Bez sudo.

Nastavení, které ušetří hodiny

alias k=kubectl
source <(kubectl completion bash)
complete -o default -F __start_kubectl k
export do="--dry-run=client -o yaml"      # pak: kubectl run x --image=nginx $do
kubectl config set-context --current --namespace=dev

Ptejte se clusteru, ne internetu

OtázkaPříkaz
Jaké druhy objektů existují? zkratky? namespace?kubectl api-resources
Které druhy jsou mimo namespace?kubectl api-resources --namespaced=false
Jaká pole má tenhle druh?kubectl explain ingress.spec.rules
Všechna pole najednoukubectl explain deploy.spec --recursive
Co tenhle příkaz umí?kubectl create --help (příklady na konci)
Globální přepínačekubectl options
Verze klienta / serverukubectl version
Smím tohle udělat?kubectl auth can-i create deployments -n dev

Rozhlédnout se

ÚkolPříkaz
Je cluster dostupný?kubectl cluster-info
Uzly s IP a verzemikubectl get nodes -o wide
Všechno v namespacekubectl get all -n dev
Napříč namespacykubectl get pods -A
Sledovat změny živěkubectl get pods -w
Události podle časukubectl get events --sort-by=.lastTimestamp
Jen varování, všudekubectl get events -A --field-selector type=Warning
Spotřeba zdrojůkubectl top nodes / kubectl top pods
Podle labelukubectl get pods -l app=web
Vlastní sloupcekubectl get pods -o custom-columns=NAME:.metadata.name,NODE:.spec.nodeName

Vytvářet a měnit

ÚkolPříkaz
Nasadit manifest (i adresář)kubectl apply -f pod.yaml / -f ./manifests/
Vygenerovat YAML bez vytvořeníkubectl run web --image nginx --dry-run=client -o yaml > web.yaml
YAML pro Deploymentkubectl create deploy web --image nginx --dry-run=client -o yaml
Service pro deploymentkubectl expose deploy web --port 80 --type NodePort
Ingress (starší)kubectl create ingress web --rule="web.k8s.lab/*=web-svc:80"
Upravit živý objektkubectl edit deploy web
Změnit jedno polekubectl patch svc web -p '{"spec":{"type":"NodePort"}}'
Škálovatkubectl scale deploy web --replicas=3
Změnit imagekubectl set image deploy/web nginx=nginx:1.28
Proměnné z ConfigMapykubectl set env deploy/web --from=configmap/app-cfg
Label / anotacekubectl label pod web tier=frontend
Smazatkubectl delete -f web.yaml / kubectl delete pod web

Zkoumat a ladit

ÚkolPříkaz
Všechno o objektu + událostikubectl describe pod web
Živý objekt jako YAMLkubectl get pod web -o yaml
Jedno polekubectl get pod web -o jsonpath='{.status.podIP}'
Logy, průběžně, předchozí pádkubectl logs -f web / kubectl logs web --previous
Logy jednoho kontejnerukubectl logs web -c sidecar
Logy podle labelu / přes kontrolerkubectl logs -l app=web --tail=50 / kubectl logs deploy/web
Shell dovnitřkubectl exec -it web -- sh
Pod na jedno použitíkubectl run tmp --image busybox --restart=Never -it --rm -- sh
Tunel na stanicikubectl port-forward svc/web 8080:80
Kopírování souborůkubectl cp web:/etc/nginx/nginx.conf ./nginx.conf
Endpointy službykubectl get endpointslices -l kubernetes.io/service-name=web

Aplikace

kubectl rollout status  deploy/web
kubectl rollout history deploy/web
kubectl rollout undo    deploy/web
kubectl rollout restart deploy/web
kubectl get rs -l app=web              # který ReplicaSet je aktivní
kubectl get ds -A                      # DaemonSety
kubectl get sts                        # StatefulSety

Úložiště

kubectl get pv                                   # cluster-scoped
kubectl get pvc -A
kubectl describe pvc data                        # proč je Pending?
kubectl get sc                                   # StorageClasses
kubectl get csidrivers                           # nainstalované CSI drivery
kubectl get pv -o custom-columns=NAME:.metadata.name,STATUS:.status.phase,CLAIM:.spec.claimRef.name,POLICY:.spec.persistentVolumeReclaimPolicy
kubectl patch pv <pv> -p '{"spec":{"claimRef":null}}'   # reuse a Released PV

Gateway API

kubectl get gatewayclass
kubectl get gateway,httproute -A
kubectl describe gateway web-gw          # PROGRAMMED + podmínky
kubectl describe httproute shop          # Accepted + ResolvedRefs
kubectl explain httproute.spec.rules.backendRefs

CRD musí být nainstalované jako první – Gateway API není součástí Kubernetes.

Custom resources

kubectl get crd
kubectl api-resources --api-group=postgresql.cnpg.io
kubectl explain cluster.spec
kubectl get clusters -A

Uzly

kubectl cordon   worker01
kubectl drain    worker01 --ignore-daemonsets --delete-emptydir-data
kubectl uncordon worker01
kubectl describe node worker01 | grep -A6 'Allocated resources'

Zkratky

po pods, deploy deployments, rs replicasets, svc services, ing ingresses, ds daemonsets, sts statefulsets, ns namespaces, cm configmaps, no nodes, gtw gateways, httproute httproutes, pv/pvc volumes, sa serviceaccounts, crd customresourcedefinitions.

Reference

kubernetes.io/docs/reference/kubectl/quick-reference