Начало работы с Kubectl для управления кластерами Kubernetes
Kubernetes — это механизм оркестрации контейнеров, который позволяет развертывать контейнерные рабочие нагрузки масштабируемым образом. Официальная утилита командной строки, kubectl
, обеспечивает контроль над вашими кластерами и ресурсами внутри.
Установка Кубектла
kubectl
поддерживается в Linux, macOS и Windows. В зависимости от платформы предлагается несколько форматов распространения. Предварительно скомпилированные двоичные файлы создаются для всех поддерживаемых операционных систем и доступны по прямым ссылкам для скачивания.
Вы также найдете kubectl
в менеджерах пакетов Snap, Homebrew, Chocolatey и Scoop. Его можно установить с помощью apt
и yum
, добавив репозиторий Google Cloud в вашу систему. Наконец, kubectl
также поставляется с Google Cloud SDK. Если он у вас уже установлен, запустите gcloud components install kubectl
, чтобы загрузить инструмент.
Вам следует обратиться к официальному руководству по установке, чтобы увидеть доступные варианты для вашей системы. Этапы установки могут меняться со временем, поэтому перед повторной установкой kubectl
ознакомьтесь с документацией.
Конфигурация
Конфигурация хранится в каталоге .kube
в вашей домашней папке. Файл конфигурации по умолчанию — ~/.kube/config
.
Вы можете добавить дополнительные файлы в эту папку. Они будут объединены в окончательную конфигурацию, используемую во время выполнения. Если вы хотите использовать определенный файл конфигурации или другой набор файлов, вам необходимо установить флаг --kubeconfig
или переменную среды KUBECONFIG
.
kubectl --kubeconfig=/example/file get pods # OR KUBECONFIG=/example/file kubectl get pods
Все пути, записанные в файлах конфигурации, разрешаются относительно собственного местоположения файла. Пути, переданные флагам командной строки, разрешаются относительно вашего рабочего каталога. Вы можете просмотреть окончательную конфигурацию, которая будет использоваться kubectl
, запустив kubectl config view
.
Флаги командной строки поддерживаются для некоторых настроек. Они позволяют вам переопределить файлы конфигурации. Доступные флаги включают --server
(URL-адрес кластера), --username
(имя пользователя для подключения), --password
, - -token
(токен API) и --namespace
(выберите пространство имен кластера для взаимодействия).
Контексты
В файлах конфигурации вы можете определить несколько «контекстов». Они позволяют группировать часто используемые «параметры доступа», такие как URL-адрес кластера и учетные записи пользователей, по именованной ссылке.
Чтобы настроить параметры для каждого контекста, используйте kubectl config set-context my-context --cluster=my-app --namespace=production
. В этом примере будет создан новый контекст с именем my-context
, который определяет настройки по умолчанию для кластера Kubernetes и пространства имен для работы.
Контексты применяются с помощью команды kubectl config use-context my-context
. Любые дальнейшие вызовы kubectl
будут использовать параметры контекста my-context
, поэтому вы будете подключены к кластеру my-app
в пространство имен production
.
Эффективное использование контекстов значительно упрощает взаимодействие с kubectl
. Без них вам придется вручную создавать уникальные файлы конфигурации, которые переключаются с помощью флага KUBECONFIG
или переменной среды.
Взаимодействие с вашим кластером
Большинство команд kubectl
используют один и тот же базовый формат:
kubectl command type name
command
— это операция, которую вы хотите выполнить — обычно create
, get
, describe
или delete
. type
— это тип ресурса, с которым вы собираетесь взаимодействовать, например, pod
или deployment
. Вы можете использовать как форму единственного, так и множественного числа.
Компонент name
должен быть именем ресурса, на который вы ссылаетесь. Вы можете указать несколько имен, разделенных пробелами, чтобы получить массовый вывод. Также можно использовать флаг -f
, чтобы указать путь к файлу JSON или YAML, содержащему список имен ресурсов.
Вот несколько примеров команд, все из которых работают с вашим текущим выбранным контекстом:
kubectl get pods
– получите подробную информацию обо всех своих модуляхkubectl get pod my-pod
— получение сведений о модуле с именемmy-pod
kubectl get pod my-pod other-pod
— получение сведений о модулях с именамиmy-pod
иanother- пакет
kubectl get pod/my-pod deployment/my-deployment
– получить сведения о модуле с именемmy-pod
и о развертывании. называетсяmy-deployment
— этот вариант синтаксиса позволяет получить несколько типов ресурсов с помощью одной командыkubectl delete pod my-pod
— удалить модуль с именемmy-pod
kubectl logs my-pod
– получить вывод журнала из модуляmy-pod
kubectl apply -f ./manifest.yml
— применить исправление к вашему кластеру из манифеста Kubernetes, хранящегося вmanifest.yml
Команды доступны для всех типов ресурсов, предлагаемых вашим кластером Kubernetes. Это распространяется даже на пользовательские определения ресурсов; они интегрируются с API Kubernetes и получают свои собственные конечные точки RESTful, к которым kubectl
может получить доступ.
Полный справочник по командам kubectl
доступен в документации Kubernetes. Также есть шпаргалка по часто используемым командам при работе с типичными типами ресурсов.
Выходные форматы
Вывод обычно выдается в виде отформатированного списка или таблицы. Это представляет информацию в удобочитаемом стиле, который вы можете быстро просмотреть.
Доступны несколько альтернативных вариантов вывода. Вы можете переключиться на другой модуль форматирования, используя флаг -o
(или --output
).
Стиль вывода json
отображает JSON-представление ресурса API Kubernetes, к которому вы обращаетесь. Точно так же yaml
предоставляет данные ресурса в виде YAML-представления.
При использовании удобочитаемого стиля вы можете указать столбцы таблицы для включения с помощью стиля custom-columns
. Укажите список пар имен столбцов и значений, разделенных запятыми:
kubectl get pods -o custom-columns=NAME:.metadata.name,NAMESPACE:.metadata.namespace
Это отобразит имя и пространство имен каждого модуля в столбцах с пометками NAME
и NAMESPACE
соответственно. Вместо того, чтобы записывать столбцы в свою команду, вы можете определить их в файле и передать его в --custom-columns-file
.
Имеется встроенная поддержка сортировки вывода по значению определенного поля. Используйте --sort-by
, передав ссылку на поле:
kubectl get pods --sort-by=.metadata.name
Сортировка поддерживает выражения JSONPath. Их также можно использовать для создания отфильтрованных запросов с помощью средства форматирования jsonpath
. JSONPath – это язык запросов для объектов JSON, который позволяет напрямую управлять запросами API Kubernetes в kubectl
.
Использование внутри скриптов
kubectl
предназначен как для прямого взаимодействия с человеком, так и для программного вызова через скрипты. При написании сценария kubectl
вы должны следовать некоторым рекомендациям, чтобы обеспечить предсказуемый результат.
Полностью уточняйте ссылки на типы ресурсов, чтобы они были привязаны к определенной версии — например. pods.v1.core/my-job
вместо pods my-job
. Это сводит к минимуму риск того, что обновления Kubernetes нарушат ваш скрипт.
Конфигурация доступа должна быть передана напрямую из вашего скрипта в kubectl
, чтобы вы не зависели от внешней среды. Это еще больше снижает риск поломки из-за обновлений kubectl
— такие функции, как контексты, могут меняться со временем, в то время как менее вероятно, что основные аргументы командной строки будут меняться.
Наконец, убедитесь, что вы отключили удобочитаемый вывод и вместо этого используете средство форматирования JSON или YAML. Это дает вашему сценарию машинно-ориентированные данные для работы, поэтому вам не нужно будет самостоятельно анализировать таблицы.
Заключение
kubectl
— это решение для управления кластером Kubernetes. Это комплексный инструмент с полной поддержкой возможностей платформы.
Широта функциональности приводит к длинному списку команд, но четкое разделение между типом действия, типом ресурса и именем ресурса помогает сделать использование простым и запоминающимся. Если вы сомневаетесь, вы можете установить автодополнение оболочки, чтобы помочь вам найти подходящую команду.