Ответы на квизы и отметки пройденных уроков будут удалены на этом устройстве.
Это действие нельзя отменить.
Шпаргалка: kubectl
Для практики курса используйте d8 k — drop-in-обёртку d8 над kubectl (см. шпаргалку d8): синтаксис, флаги и вывод идентичны ванильному kubectl. Ниже везде, где встречается kubectl, можно подставить d8 k, и наоборот. Полные разборы — по мере прохождения M1, M10.
Самые используемые команды
Эти команды встречаются почти в каждом уроке курса — выучите их в первую очередь.
kubectl create namespace <name> # изолированный namespace для практики урокаkubectl config set-context --current --namespace=<ns>
kubectl apply -f <file> # применить манифест из файлаkubectl apply -n <ns> -f - <<'EOF' ... EOF# применить манифест из stdin (heredoc)kubectl get <kind> [-n <ns> | -A]# список объектовkubectl get <kind> <name> -o yaml # полный YAML объектаkubectl get <kind> <name> -o wide # с доп. колонками (узел, IP)kubectl get <kind> -o jsonpath='{.status...}'# точечное значение поляkubectl describe <kind> <name> [-n <ns>]# события и детали объектаkubectl logs <pod> [-c <container>][-f][--previous]# логи контейнераkubectl exec -it <pod> [-c <container>] -- <cmd> # выполнить команду в контейнереkubectl delete <kind> <name> [-n <ns>]kubectl patch <kind> <name> --type=merge -p '<json>'# точечное изменение объектаkubectl rollout status deployment/<name>
kubectl rollout restart deployment/<name>
kubectl rollout undo deployment/<name> [--to-revision=N]kubectl get events -n <ns> --sort-by='.lastTimestamp'kubectl auth can-i <verb> <resource> --as=<user> [-n <ns>]
Контекст, конфигурация, namespace
1
2
3
4
5
6
7
8
9
kubectl version --client # версия клиентаkubectl cluster-info # адрес API-сервераkubectl config view --minify # активный контекст kubeconfigkubectl config get-contexts # список контекстовkubectl config use-context <name> # переключить контекст/кластерkubectl config set-context --current --namespace=<ns> # namespace по умолчанию для контекстаkubectl get ns # список namespacekubectl create namespace <name>
exportKUBECONFIG=~/.kube/config # явный путь к kubeconfig
Просмотр объектов (get/describe)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
kubectl get <kind> # список в текущем namespacekubectl get <kind> -A # во всех namespacekubectl get <kind> -n <ns>
kubectl get <kind> -o wide
kubectl get <kind> -o yaml
kubectl get <kind> -o json
kubectl get <kind> -o jsonpath='{.status.phase}'kubectl get <kind> -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.spec.foo}{"\n"}{end}'# табличный вывод по нескольким объектамkubectl get <kind> -o custom-columns=NAME:.metadata.name,REPLICAS:.spec.replicas
kubectl get <kind1>,<kind2>,<kind3> [-n <ns>]# несколько видов ресурсов одной командойkubectl describe <kind> <name> [-n <ns>]kubectl describe <kind> -n <ns> -l app=<label> # describe по label selector (несколько объектов)kubectl api-resources --namespaced=true# список namespace-scoped типовkubectl api-resources --namespaced=false# список cluster-scoped типовkubectl api-resources | grep -iE "<pattern>"# поиск типа ресурса по имениkubectl explain <kind>[.<field>...]# схема полей ресурса/CRD (см. также d8 k explain application.spec)kubectl get events -n <ns> --sort-by='.lastTimestamp'# события в хронологическом порядкеkubectl get crd | grep <pattern> # проверка наличия CRD в кластере
Логи и exec
1
2
3
4
5
6
7
8
9
10
11
12
kubectl logs <pod> [-n <ns>]kubectl logs <pod> [-n <ns>][-c <container>][-f]kubectl logs <pod> -n <ns> --previous # логи предыдущего (упавшего) контейнераkubectl logs -n <ns> job/<name> # логи через ссылку на объект Jobkubectl logs -n <ns> -l app=<name> --tail=100# логи по label без привязки к конкретному Podkubectl logs deploy/<name> -n <ns> # логи через ссылку на Deploymentkubectl exec -it <pod> [-n <ns>] -- <cmd>
kubectl exec -it <pod> -n <ns> -- sh -c "<cmd>"kubectl exec -n <ns> deploy/<name> -- <cmd> # выполнение в Pod'е Deployment без -itkubectl exec -n <ns> deploy/<name> -- env | grep <pattern>
kubectl port-forward -n <ns> pod/<name> <local>:<pod-port>
kubectl attach my-pod -i # подключиться к уже работающему процессу контейнера
kubectl get pods -l 'env=prod,tier!=frontend'# равенство и неравенствоkubectl get pods -A -l 'env=staging'kubectl get pods -A -l 'team in (a,b)'# set-based: Inkubectl get pods -A -l 'team notin (b)'# set-based: NotInkubectl get <kind> -A -l 'key'# Existskubectl get <kind> -A -l '!key'# DoesNotExistkubectl describe resourcequota <name> -n <ns>
kubectl describe limitrange <name> -n <ns>
Volumes / Storage
1
2
3
4
5
6
7
8
kubectl get pvc,pv [-n <ns>]kubectl get storageclass
kubectl get storageclass,replicatedstorageclass
kubectl describe pvc <name> [-n <ns>]kubectl get pv -o jsonpath='{.items[0].spec.persistentVolumeReclaimPolicy}'kubectl get pv | grep Released
kubectl get pvc -n <ns> -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.spec.storageClassName}{"\n"}{end}'kubectl get volumesnapshot,volumesnapshotclass -A
Ingress / Gateway API
1
2
3
4
5
6
7
8
9
10
11
12
kubectl get ingress [-n <ns>]kubectl describe ingress <name> [-n <ns>]kubectl get ingressclass
kubectl patch ingress <name> -n <ns> --type=json -p '[<json-patch>]'kubectl delete ingress <name> -n <ns> --ignore-not-found
kubectl get crd | grep gateway.networking.k8s.io # проверка наличия Gateway API CRDkubectl get gatewayclass # инфраструктурный уровеньkubectl get gateway -A # точки входаkubectl get httproute [-n <ns>]# маршруты L7 (уровень разработчика)kubectl get httproute <name> -n <ns> -o yaml # проверка status.parents.conditionskubectl get referencegrant -n <ns> # разрешения cross-namespace ссылок
Ресурсы Gateway API (без отдельной CLI-команды, но важны для понимания модели): GatewayClass (cluster-scoped), Gateway (точка входа), HTTPRoute (namespaced-маршрутизация), ReferenceGrant (разрешение cross-namespace ссылок), ListenerSet и ClusterALBInstance (ресурсы модуля Deckhouse alb).
Jobs / CronJobs
1
2
3
4
5
6
7
8
kubectl create job <name> --image=<image> [-- <cmd>]kubectl create job --from=cronjob/<name> <manual-run-name> # ручной запуск CronJob вне расписанияkubectl get job,pod -n <ns>
kubectl get job,cronjob [-n <ns>]kubectl get cronjob,job -n <ns> -w
kubectl get pods -n <ns> -l job-name=<name> -w
kubectl describe job <name> [-n <ns>]kubectl delete job <name>
kubectl get podmonitor,probe,scrapeconfig -n <ns>
kubectl get podmonitor -n <ns> -o yaml | grep -A1 "prometheus:"kubectl get clusterobservabilitymetricsrulesgroup,observabilitymetricsrulesgroup -A
kubectl get customalertmanager -n <ns>
kubectl get clusterlogdestination -A
kubectl get podloggingconfig -n <ns>
Backup
1
2
kubectl get volumesnapshotclass
kubectl get cronjob -n <ns> # периодические backup-джобы (дамп БД и т.п.)
kubectl explain application.spec
kubectl get application [-A | -n <ns>]kubectl get app -n <ns> # shortName для applicationkubectl get app -n <ns> -w
kubectl get app <name> -n <ns> -o jsonpath='{.status.conditions}'kubectl get app <name> -n <ns> -o jsonpath='{.status.conditions}'| jq
kubectl get app <name> -n <ns> -o jsonpath='{.status.summary}';echokubectl get app <name> -n <ns> -o jsonpath='{.status.conditions[?(@.type=="UpdateInstalled")]}'kubectl patch app -n <ns> <name> --type=merge -p '{"spec":{"packageVersion":"<version>"}}'kubectl get deployment -n <ns> -l app.kubernetes.io/name=<package-name>
kubectl get <resource> -n <ns> -l app.kubernetes.io/instance=<instance-name>
kubectl explain packagerepository | packagerepositoryoperation | applicationpackageversion | applicationpackage
kubectl get packagerepository [-o yaml]kubectl get packagerepositoryoperation
kubectl get applicationpackageversion [-A]| grep <name>
kubectl get applicationpackage <name> -o yaml
Troubleshooting
1
2
3
4
5
kubectl get events -n <ns> --sort-by='.lastTimestamp'# FailedScheduling, ImagePullBackOff и т.п.kubectl logs <pod> -n <ns> --previous
kubectl get statefulset -n d8-upmeter | grep smoke-mini # проверка SLA-инфраструктуры Upmeterkubectl exec -it <pod> -- sh # НЕ работает в distroless-контейнерахkubectl debug -it <pod> --image=busybox --target=<container> # эфемерный debug-контейнер (в т.ч. для distroless)
Deckhouse platform (Module / ModuleConfig)
1
2
3
4
5
6
7
8
9
kubectl get modules # cluster-wide Modulekubectl get module <name> -o yaml
kubectl get module <name> -o jsonpath='{.status.summary}';echokubectl get moduleconfig [<name>][-o yaml]kubectl get moduleconfig <name> -o jsonpath='{.spec.enabled}';echokubectl patch moduleconfig <name> --type=merge -p '{"spec":{"enabled":true|false}}'kubectl get moduleconfig -o custom-columns=NAME:.metadata.name,ENABLED:.spec.enabled
kubectl get modulesource
kubectl get pods -n d8-system [-l app=deckhouse]
Дополнительно: полезные команды из официальной документации Kubernetes
Эти команды не встречаются напрямую в уроках курса, но входят в официальный kubectl Quick Reference и пригодятся в реальной эксплуатации.
1
2
3
4
5
6
7
8
9
10
11
12
kubectl top pod [-n <ns>]# метрики CPU/памяти по подам (нужен metrics-server)kubectl top pod <name> --containers # метрики по каждому контейнеру подаkubectl top pod <name> --sort-by=cpu|memory
kubectl top node # метрики узловkubectl cp <ns>/<pod>:<path> <local-path> # скопировать файл из пода на локальную машинуkubectl run -i --tty busybox --image=busybox:1.28 -- sh # разовый интерактивный подkubectl run <name> --image=<image> --dry-run=client -o yaml > pod.yaml # сгенерировать манифест без примененияkubectl cordon <node> # запретить планирование новых подов на узелkubectl uncordon <node>
kubectl diff -f <file> # показать разницу перед applykubectl get pods --field-selector=status.phase=Running
kubectl get pods --sort-by='.status.startTime'