Поиск по сайту:

Начало работы с 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. Это комплексный инструмент с полной поддержкой возможностей платформы.

Широта функциональности приводит к длинному списку команд, но четкое разделение между типом действия, типом ресурса и именем ресурса помогает сделать использование простым и запоминающимся. Если вы сомневаетесь, вы можете установить автодополнение оболочки, чтобы помочь вам найти подходящую команду.