Обзор kubectl
Kubectl — это инструмент командной строки для управления кластерами Kubernetes. kubectl ищет файл config в директории $HOME/.kube. Вы можете указать другие файлы kubeconfig, установив переменную окружения KUBECONFIG или флаг --kubeconfig.
На этой странице рассматривается синтаксис kubectl, описаны командные операции и приведены распространённые примеры. Подробную информацию о каждой команде, включая все поддерживаемые в ней флаги и подкоманды, смотрите в справочной документации kubectl. Инструкции по установке находятся на странице Установка и настройка kubectl.
Синтаксис
Используйте следующий синтаксис для выполнения команд kubectl в терминале:
kubectl [command] [TYPE] [NAME] [flags]
где command, TYPE, NAME и flags:
- command: определяет выполняемую операцию с одним или несколькими ресурсами, например,- create,- get,- describe,- delete.
- TYPE: определяет тип ресурса. Типы ресурсов не чувствительны к регистру, кроме этого вы можете использовать единственную, множественную или сокращенную форму. Например, следующие команды выведут одно и то же.- ```shell kubectl get pod pod1 kubectl get pods pod1 kubectl get po pod1 ```
- NAME: определяет имя ресурса. Имена чувствительны к регистру. Если имя не указано, то отображаются подробности по всем ресурсам, например,- kubectl get pods.- При выполнении операции с несколькими ресурсами можно выбрать каждый ресурс по типу и имени, либо сделать это в одном или нескольких файлов: - Выбор ресурсов по типу и имени: - Сгруппировать ресурсы, если все они одного типа: - TYPE1 name1 name2 name<#>.
 Пример:- kubectl get pod example-pod1 example-pod2
- Выбор нескольких типов ресурсов по отдельности: - TYPE1/name1 TYPE1/name2 TYPE2/name3 TYPE<#>/name<#>.
 Пример:- kubectl get pod/example-pod1 replicationcontroller/example-rc1
 
- Выбор ресурсов по одному или нескольким файлов: - -f file1 -f file2 -f file<#>- Используйте YAML вместо JSON, так как YAML удобнее для пользователей, особенно в конфигурационных файлах.
 Пример:kubectl get pod -f ./pod.yaml
 
- Используйте YAML вместо JSON, так как YAML удобнее для пользователей, особенно в конфигурационных файлах.
 
- flags: определяет дополнительные флаги. Например, вы можете использовать флаги- -sили- --server, чтобы указать адрес и порт API-сервера Kubernetes.
Если вам нужна помощь, выполните команду kubectl help.
Операции
В следующей таблице приведены краткие описания и общий синтаксис всех операций kubectl:
| Операция | Синтаксис | Описание | 
|---|---|---|
| annotate | kubectl annotate (-f FILENAME | TYPE NAME | TYPE/NAME) KEY_1=VAL_1 ... KEY_N=VAL_N [--overwrite] [--all] [--resource-version=version] [flags] | Добавить или обновить аннотации одного или нескольких ресурсов. | 
| api-versions | kubectl api-versions [flags] | Вывести доступные версии API. | 
| apply | kubectl apply -f FILENAME [flags] | Внести изменения в конфигурацию ресурса из файла или потока stdin. | 
| attach | kubectl attach POD -c CONTAINER [-i] [-t] [flags] | Подключиться к запущенному контейнеру либо для просмотра потока вывода, либо для работы с контейнером (stdin). | 
| autoscale | kubectl autoscale (-f FILENAME | TYPE NAME | TYPE/NAME) [--min=MINPODS] --max=MAXPODS [--cpu-percent=CPU] [flags] | Автоматически промасштабировать набор подов, управляемых контроллером репликации. | 
| cluster-info | kubectl cluster-info [flags] | Показать информацию о главном узле и сервисах в кластере. | 
| config | kubectl config SUBCOMMAND [flags] | Изменить файлы kubeconfig. Подробные сведения смотрите в отдельных подкомандах. | 
| create | kubectl create -f FILENAME [flags] | Создать один или несколько ресурсов из файла или stdin. | 
| delete | kubectl delete (-f FILENAME | TYPE [NAME | /NAME | -l label | --all]) [flags] | Удалить ресурсы из файла, потока stdin, либо с помощью селекторов меток, имен, селекторов ресурсов или ресурсов. | 
| describe | kubectl describe (-f FILENAME | TYPE [NAME_PREFIX | /NAME | -l label]) [flags] | Показать подробное состояние одного или нескольких ресурсов. | 
| diff | kubectl diff -f FILENAME [flags] | Diff file or stdin against live configuration (BETA) | 
| edit | kubectl edit (-f FILENAME | TYPE NAME | TYPE/NAME) [flags] | Отредактировать и обновить определение одного или нескольких ресурсов на сервере, используя редактор по умолчанию. | 
| exec | kubectl exec POD [-c CONTAINER] [-i] [-t] [flags] [-- COMMAND [args...]] | Выполнить команду в контейнере пода. | 
| explain | kubectl explain [--recursive=false] [flags] | Посмотреть документацию по ресурсам. Например, поды, узлы, сервисы и т.д. | 
| expose | kubectl expose (-f FILENAME | TYPE NAME | TYPE/NAME) [--port=port] [--protocol=TCP|UDP] [--target-port=number-or-name] [--name=name] [--external-ip=external-ip-of-service] [--type=type] [flags] | Создать Kubernetes-сервис из контроллера репликации, сервиса или пода. | 
| get | kubectl get (-f FILENAME | TYPE [NAME | /NAME | -l label]) [--watch] [--sort-by=FIELD] [[-o | --output]=OUTPUT_FORMAT] [flags] | Вывести один или несколько ресурсов. | 
| label | kubectl label (-f FILENAME | TYPE NAME | TYPE/NAME) KEY_1=VAL_1 ... KEY_N=VAL_N [--overwrite] [--all] [--resource-version=version] [flags] | Добавить или обновить метки для одного или нескольких ресурсов. | 
| logs | kubectl logs POD [-c CONTAINER] [--follow] [flags] | Вывести логи контейнера в поде. | 
| patch | kubectl patch (-f FILENAME | TYPE NAME | TYPE/NAME) --patch PATCH [flags] | Обновить один или несколько полей ресурса, используя стратегию слияния патча. | 
| port-forward | kubectl port-forward POD [LOCAL_PORT:]REMOTE_PORT [...[LOCAL_PORT_N:]REMOTE_PORT_N] [flags] | Переадресовать один или несколько локальных портов в под. | 
| proxy | kubectl proxy [--port=PORT] [--www=static-dir] [--www-prefix=prefix] [--api-prefix=prefix] [flags] | Запустить прокси для API Kubernetes. | 
| replace | kubectl replace -f FILENAME | Заменить ресурс из файла или потока stdin. | 
| rolling-update | kubectl rolling-update OLD_CONTROLLER_NAME ([NEW_CONTROLLER_NAME] --image=NEW_CONTAINER_IMAGE | -f NEW_CONTROLLER_SPEC) [flags] | Выполните плавающее обновление, постепенно заменяя указанный контроллер репликации и его поды. | 
| run | kubectl run NAME --image=image [--env="key=value"] [--port=port] [--replicas=replicas] [--dry-run=bool] [--overrides=inline-json] [flags] | Запустить указанный образ в кластере. | 
| scale | kubectl scale (-f FILENAME | TYPE NAME | TYPE/NAME) --replicas=COUNT [--resource-version=version] [--current-replicas=count] [flags] | Обновить размер указанного контроллера репликации. | 
| version | kubectl version [--client] [flags] | Отобразить версию Kubernetes, запущенного на клиенте и сервере. | 
Примечание: подробную информацию о командных операциях смотрите в справочную документацию kubectl.
Типы ресурсов
В следующей таблице перечислены все доступные типы ресурсов вместе с сокращенными аббревиатурами.
(Это актуальный вывод команды kubectl api-resources с версии Kubernetes 1.13.3.)
| Resource Name | Short Names | API Group | Namespaced | Resource Kind | 
|---|---|---|---|---|
| bindings | true | Binding | ||
| componentstatuses | cs | false | ComponentStatus | |
| configmaps | cm | true | ConfigMap | |
| endpoints | ep | true | Endpoints | |
| limitranges | limits | true | LimitRange | |
| namespaces | ns | false | Namespace | |
| nodes | no | false | Node | |
| persistentvolumeclaims | pvc | true | PersistentVolumeClaim | |
| persistentvolumes | pv | false | PersistentVolume | |
| pods | po | true | Pod | |
| podtemplates | true | PodTemplate | ||
| replicationcontrollers | rc | true | ReplicationController | |
| resourcequotas | quota | true | ResourceQuota | |
| secrets | true | Secret | ||
| serviceaccounts | sa | true | ServiceAccount | |
| services | svc | true | Service | |
| mutatingwebhookconfigurations | admissionregistration.k8s.io | false | MutatingWebhookConfiguration | |
| validatingwebhookconfigurations | admissionregistration.k8s.io | false | ValidatingWebhookConfiguration | |
| customresourcedefinitions | crd,crds | apiextensions.k8s.io | false | CustomResourceDefinition | 
| apiservices | apiregistration.k8s.io | false | APIService | |
| controllerrevisions | apps | true | ControllerRevision | |
| daemonsets | ds | apps | true | DaemonSet | 
| deployments | deploy | apps | true | Deployment | 
| replicasets | rs | apps | true | ReplicaSet | 
| statefulsets | sts | apps | true | StatefulSet | 
| tokenreviews | authentication.k8s.io | false | TokenReview | |
| localsubjectaccessreviews | authorization.k8s.io | true | LocalSubjectAccessReview | |
| selfsubjectaccessreviews | authorization.k8s.io | false | SelfSubjectAccessReview | |
| selfsubjectrulesreviews | authorization.k8s.io | false | SelfSubjectRulesReview | |
| subjectaccessreviews | authorization.k8s.io | false | SubjectAccessReview | |
| horizontalpodautoscalers | hpa | autoscaling | true | HorizontalPodAutoscaler | 
| cronjobs | cj | batch | true | CronJob | 
| jobs | batch | true | Job | |
| certificatesigningrequests | csr | certificates.k8s.io | false | CertificateSigningRequest | 
| leases | coordination.k8s.io | true | Lease | |
| events | ev | events.k8s.io | true | Event | 
| ingresses | ing | extensions | true | Ingress | 
| networkpolicies | netpol | networking.k8s.io | true | NetworkPolicy | 
| poddisruptionbudgets | pdb | policy | true | PodDisruptionBudget | 
| podsecuritypolicies | psp | policy | false | PodSecurityPolicy | 
| clusterrolebindings | rbac.authorization.k8s.io | false | ClusterRoleBinding | |
| clusterroles | rbac.authorization.k8s.io | false | ClusterRole | |
| rolebindings | rbac.authorization.k8s.io | true | RoleBinding | |
| roles | rbac.authorization.k8s.io | true | Role | |
| priorityclasses | pc | scheduling.k8s.io | false | PriorityClass | 
| csidrivers | storage.k8s.io | false | CSIDriver | |
| csinodes | storage.k8s.io | false | CSINode | |
| storageclasses | sc | storage.k8s.io | false | StorageClass | 
| volumeattachments | storage.k8s.io | false | VolumeAttachment | 
Опции вывода
В следующих разделах рассматривается форматирование и сортировка вывода определенных команд. Дополнительные сведения о том, какие команды поддерживают разные варианты вывода, смотрите в справочной документации kubectl.
Форматирование вывода
Стандартный формат вывода всех команд kubectl представлен в понятном для человека текстовом формате. Чтобы вывести подробности в определенном формате можно добавить флаги -o или --output к команде kubectl.
Синтаксис
kubectl [command] [TYPE] [NAME] -o <output_format>
В зависимости от операции kubectl поддерживаются следующие форматы вывода:
| Выходной формат | Описание | 
|---|---|
| -o custom-columns=<spec> | Вывести таблицу с использованием списка пользовательских столбцов, разделённого запятыми. | 
| -o custom-columns-file=<filename> | Вывести таблицу с использованием шаблона с пользовательскими столбцами в файле <filename>. | 
| -o json | Вывести API-объект в формате JSON. | 
| -o jsonpath=<template> | Вывести поля, определенные в выражении jsonpath. | 
| -o jsonpath-file=<filename> | Вывести поля, определённые в выражении jsonpath из файла <filename>. | 
| -o name | Вывести только имя ресурса. | 
| -o wide | Вывести в текстовом формате с дополнительной информацией. Для подов отображается имя узла. | 
| -o yaml | Вывести API-объект в формате YAML | 
Пример
В данном примере следующая команда выводит подробную информацию по указанному поду в виде объекта в YAML-формате:
kubectl get pod web-pod-13je7 -o yaml
Примечание: подробную информацию о доступных форматах вывода в определенной команде смотрите в справочной документации kubectl.
Пользовательские столбцы
Для определения пользовательских столбцов и вывода в таблицу только нужных данных, можно использовать опцию custom-columns. Вы можете определить пользовательские столбцы в самой опции, либо сделать это в файле шаблона: -o custom-columns=<spec> или -o custom-columns-file=<filename>.
Примеры
Столбцы указаны в самой команде:
kubectl get pods <pod-name> -o custom-columns=NAME:.metadata.name,RSRC:.metadata.resourceVersion
Столбцы указаны в файле шаблона:
kubectl get pods <pod-name> -o custom-columns-file=template.txt
где файл template.txt содержит следующее:
NAME          RSRC
metadata.name metadata.resourceVersion
Результат выполнения любой из показанной выше команды:
NAME           RSRC
submit-queue   610995
Получение вывода с сервера
kubectl может получать информацию об объектах с сервера.
Это означает, что для любого указанного ресурса сервер вернет столбцы и строки по этому ресурсу, которые отобразит клиент.
Благодаря тому, что сервер инкапсулирует реализацию вывода, гарантируется единообразный и понятный для человека вывод на всех клиентах, использующих один и тот же кластер.
Эта функциональность включена по умолчанию, начиная с kubectl 1.11 и выше. Чтобы отключить ее, добавьте флаг --server-print=false в команду kubectl get.
Примеры
Для вывода информации о состоянии пода, используйте следующую команду:
kubectl get pods <pod-name> --server-print=false
Вывод будет выглядеть следующим образом:
NAME       READY     STATUS              RESTARTS   AGE
pod-name   1/1       Running             0          1m
Сортировка списка объектов
Для вывода объектов в виде отсортированного списка в терминал используется флаг --sort-by к команде kubectl. Для сортировки объектов нужно указать любое числовое или строковое поле в флаге --sort-by. Для определения поля используйте выражение jsonpath.
Синтаксис
kubectl [command] [TYPE] [NAME] --sort-by=<jsonpath_exp>
Пример
Чтобы вывести список подов, отсортированных по имени, выполните команду ниже:
kubectl get pods --sort-by=.metadata.name
Примеры: распространенные операции
Посмотрите следующие примеры, чтобы ознакомиться с часто используемыми операциями kubectl:
kubectl apply - Внести изменения или обновить ресурс из файла или потока stdin.
# Создать сервис из определения в example-service.yaml.
kubectl apply -f example-service.yaml
# Создать контроллер репликации из определения в example-controller.yaml.
kubectl apply -f example-controller.yaml
# Создать объекты, которые определены в файлах с расширением .yaml, .yml или .json в директории <directory>.
kubectl apply -f <directory>
kubectl get - Вывести один или несколько ресурсов.
# Вывести все поды в текстовом формате вывода.
kubectl get pods
# Вывести все поды в текстовом формате вывода и включить дополнительную информацию (например, имя узла).
kubectl get pods -o wide
# Вывести контроллер репликации с указанным именем в текстовом формате вывода. Совет: вы можете использовать сокращенный псевдоним 'rc' вместо 'replicationcontroller'.
kubectl get replicationcontroller <rc-name>
# Вывести все контроллеры репликации и сервисы вместе в текстовом формате вывода.
kubectl get rc,services
# Вывести все наборы демонов в текстовом формате вывода.
kubectl get ds
# Вывести все поды, запущенные на узле server01
kubectl get pods --field-selector=spec.nodeName=server01
kubectl describe - Показать подробное состояние одного или нескольких ресурсов, по умолчанию также включаются неинициализированные ресурсы.
# Показать информацию об узле с именем <node-name>.
kubectl describe nodes <node-name>
# Показать подробности пода <pod-name>.
kubectl describe pods/<pod-name>
# Показать подробности всех подов, управляемые контроллером репликации <rc-name>.
# Обратите внимание: любые поды, созданные контроллером репликации, имеют префикс с именем контроллера репликации.
kubectl describe pods <rc-name>
# Показать подробности по всем подам
kubectl describe pods
kubectl get используется для получения одного или нескольких ресурсов одного и того же типа. Она поддерживает большой набор флагов, с помощью которых можно настроить формат вывода, например, с помощью флага -o или --output.
Вы можете указать флаг -w или --watch, чтобы отслеживать изменения в конкретном объекте. Команда kubectl describe в основном сфокусирована на описание многих взаимосвязанных аспектов указанного ресурса. При генерации вывода для пользователя она может обращаться к API-серверу. К примеру, команда kubectl describe node выдает не только информацию об узле, но и краткий обзор запущенных на нем подов, генерируемых событий и т.д.kubectl delete - Удалить ресурсы из файла, потока stdin или с помощью селекторов меток, имена, селекторов ресурсов или имен ресурсов.
# Удалить под по типу и имени, указанных в файле pod.yaml.
kubectl delete -f pod.yaml
# Удалить все поды и сервисы с именем метки <label-name>.
kubectl delete pods,services -l name=<label-name>
# Удалить все поды, включая неинициализированные.
kubectl delete pods --all
kubectl exec - Выполнить команду в контейнере пода.
# Получить вывод от запущенной команды 'date' в поде <pod-name>. По умолчанию отображается вывод из первого контейнера.
kubectl exec <pod-name> date
# Получить вывод из запущенной команды 'date' в контейнере <container-name> пода <pod-name>.
kubectl exec <pod-name> -c <container-name> date
# Получить интерактивный терминал (TTY) и запустить /bin/bash в поде <pod-name>. По умолчанию отображается вывод из первого контейнера.
kubectl exec -ti <pod-name> /bin/bash
kubectl logs - Вывести логи контейнера в поде.
# Возвращает текущие логи в поде <pod-name>.
kubectl logs <pod-name>
# Вывод логов в поде <pod-name> в режиме реального времени. Это похоже на команду 'tail -f' Linux.
kubectl logs -f <pod-name>
Примеры: создание и использование плагинов
Посмотрите следующие примеры, чтобы ознакомиться с тем, как писать и использовать плагины kubectl:
# Плагин может быть на на любом языке, а сам исполняемый файл должен начинается с префикса "kubectl-".
cat ./kubectl-hello
#!/bin/bash
# Этот плагин выводит строку "hello world"
echo "hello world"
# Сделать плагин исполняемым
sudo chmod +x ./kubectl-hello
# Переместить его в директорию из PATH
sudo mv ./kubectl-hello /usr/local/bin
# Плагин дял kubectl создан и "установлен".
# Воспользоваться плагином можно через kubectl, вызвав его подобно обычной команды.
kubectl hello
hello world
# "Отмена установки" плагина происходит через удаление его файла из директории в PATH.
sudo rm /usr/local/bin/kubectl-hello
Посмотреть все доступные плагины kubectl можно с помощью подкоманды kubectl plugin list:
kubectl plugin list
The following kubectl-compatible plugins are available:
/usr/local/bin/kubectl-hello
/usr/local/bin/kubectl-foo
/usr/local/bin/kubectl-bar
# Эта команда также может сообщить, что плагин является неисполняемым,
# либо что плагин переопределен другими плагинами
sudo chmod -x /usr/local/bin/kubectl-foo
kubectl plugin list
The following kubectl-compatible plugins are available:
/usr/local/bin/kubectl-hello
/usr/local/bin/kubectl-foo
  - warning: /usr/local/bin/kubectl-foo identified as a plugin, but it is not executable
/usr/local/bin/kubectl-bar
error: one plugin warning was found
Плагины можно рассматривать как способ создания более сложной функциональности поверх существующих команд kubectl:
cat ./kubectl-whoami
#!/bin/bash
# Этот плагин использует команду `kubectl config` для вывода
# информации о текущем пользователе из текущего выбранного контекста
kubectl config view --template='{{ range .contexts }}{{ if eq .name "'$(kubectl config current-context)'" }}Current user: {{ .context.user }}{{ end }}{{ end }}'
Выполнение этого плагина генерирует вывод, содержащий пользователя для текущего выбранного контекста в файле KUBECONFIG:
# Сделать файл исполняемым
sudo chmod +x ./kubectl-whoami
# Перенести файл в директорию из PATH
sudo mv ./kubectl-whoami /usr/local/bin
kubectl whoami
Current user: plugins-user
Чтобы узнать больше о плагинах, изучите пример CLI-плагина.
Что дальше
Начните использовать команды kubectl.