Чем все больше и больше я использую рабочую нагрузку на Kubernetes с помощью Azure Kubernetes Service. Больше я использую также контейнеры Windows.
Если вы управляете kubectl, вы можете быть иногда разочарованы, так как вам нужно печатать различные команды для выполнения некоторых задач или использовать сложные выражения с -JsonPath, чтобы извлечь необходимую информацию. Что если вы смогли немного автоматизировать это? С 1.12 Kubernetes, Kubectl поддерживает добавление подкомандов для автоматизации задач; Кобектл плагин.
Плагины Kubectl являются исполняемыми файлами, идентифицируемыми с помощью префикса «kubectl-». Файл должен быть расположен на вашем пути (/usr/bin/path, например, в Linux или в любом каталоге, присутствующем в переменной среды пути в Windows).
Создание плагина Kubectl просто, так как библиотека или компонент не требуется. Каждый язык программирования может быть использован. Единственное условие-это префикс «kubeclt-«. Когда вы звоните в плагин из Kubectl, вам просто нужно опустить префикс имени файла плагина. Например, если имя файла является kubectl-mycmd, имя плагина будет MyCmd, и вы можете позвонить ему, используя:
kubectl mycmd
Плагин может работать с аргументами. Вы можете передать аргументы в плагин после имени плагина.
kubectl mycmd Arg1 Arg2 ... ArgN
Как вы понимаете, черта в имени файла преобразуется в космос, поэтому kubectl-my-cmd переводится в Kubectl мой cmd (Но вы должны избегать этого, поскольку это путает пользователей, если ваши аргументы поддержки плагинов). Если вы хотите добавить Dash в имя плагина (не имя файла), вам нужно использовать подчеркивание, файл kubeclt-my_cmd переводится в Kubectl my-cmd.
На Linux, как вы можете использовать PowerShell для создания плагина Kubectl?
Если вы используете PowerShell в течение долгого времени, я имею в виду, что вы начали использовать PowerShell в Windows, вы можете подумать, что не можете сделать исполняемый файл сценария PowerShell. Это по дизайну. Но на Linux все по -другому. Выполнение унаследовано не расширением файла, а разрешениями файла, называемых режимами, где x представляет выполнение. Таким образом, изменения атрибута доступа достаточно, чтобы разрешить выполнение файла.
sudo chmod +x ./kubectl-mycmd
Но как сказать, что мы хотим, чтобы сценарий был выполнен PowerShell. В Windows вы можете использовать pwsh.exe -f или powershell.exe -f. Но на платформе Linux есть еще один вариант, который вы можете использовать! Инструкция, чтобы указать, какой процессор сценария использовать с файлом.
Давайте создадим простой плагин. Создайте файл с именем kubectl-psversion
#! /usr/bin/pwsh write-host "Version $($psversiontable.PSVersion)"
Измените атрибут выполнения
sudo chmod +x ./kubectl-psversion
и переместить файл в/usr/local/bin
sudo mv ./kubectl-psversion /usr/local/bin
А теперь вы можете использовать плагин
Kubectl psversion
Отображение версии PowerShell, установленной в настоящее время на вашей рабочей станции, не полезно для вашей ежедневной работы с Kubernetes.
Я спросил себя, с какими задачами у вас есть самые трудоемкие задачи? Например, получение информации о стручках в простой таблице. Мне часто нужно собирать состояние, имя, узлы и количество перезапуска для всех стручков в пространстве имен. Как это сделать? Во -первых, стандартный выход Kubectl может быть трудно анализировать. Надеемся, что есть еще два способа получить эту информацию Yaml и JSON. PowerShell очень хорошо обрабатывает JSON. Он преобразует документ JSON в объект PSCustomOmobject, с которым вы можете иметь дело. Чтобы собрать информацию, вам нужно о капсулах, которые вы можете использовать
$Podslist = (kubectl get pods -o json) | convertfrom-Json
Но как мы можем справиться с пространствами имен? Имя пространства имен должно быть необязательным аргументом для плагина. Kubectl не поддерживает именованные параметры, только позиционные параметры (arg1 arg2 arg3…). Сценарий PowerShell должен справиться с этим. Обычно для функций и модулей это не лучшая практика, но другого выбора нет.
param( [parameter(Position=0)] [string] $namespace )
Если пространство имен не передается в плагин, следует использовать пространство имен по умолчанию.
if (!($PSBoundParameters.ContainsKey('namespace'))){ $namespace ="default" }
Собрать все вещи вместе, создайте файл с именем kubectl-podsinfops (не kubectl-podsinfops.ps1)
#! /usr/bin/pwsh param( [parameter(Position=0)] [string] $namespace ) try { if (!($PSBoundParameters.ContainsKey('namespace'))){ $namespace ="default" } $Podslist = (kubectl get pods --namespace $namespace -o json) | convertfrom-Json $PodsArrayList = [System.Collections.ArrayList]::new() foreach ($pod in $Podslist.items) { [void]$PodsArrayList.Add([pscustomobject]@{ PodName = $pod.metadata.name Status = $pod.status.phase restartCount = $pod.status.containerStatuses[0].restartCount StartTime = $pod.status.startTime image = $pod.status.containerStatuses[0].image Node = $pod.spec.nodeName NodeType = $pod.spec.nodeSelector }) } $PodsArrayList | Format-Table -AutoSize } catch { "An error occurred that could not be resolved." }
Сделайте исполняемый файл
sudo chmod +x ./kubectl-podsinfops
Переместите его на свой путь
sudo mv ./kubectl-podsinfops /usr/local/bin
Теперь вы можете использовать плагин, Kubectl Podsinfop, для пространства имен по умолчанию и кубект -Podsinfop MyNamespace для конкретного пространства имен.
А как насчет Windows?
Существует две основные проблемы, файлы PowerShell не являются прямыми исполняемыми делами и расширения имени файла. Чтобы решить первую проблему, вам нужно использовать файл .bat, чтобы вызвать свой скрипт PowerShell. Первый шаг Создайте папку для плагина и добавьте ее в переменную среды пути.
Затем создайте свой скрипт здесь, но не назовите его kubectl-xxx, используйте еще одно соглашение о именованиях, например, k8splugin-scriptname.ps1. В плагине каталога создайте kubectl-podinfops.bat и добавьте эту команду.
@echo off pwsh.exe -file "x:\pathTo\K8splugin-podinfosps.ps1" %1
Теперь вы можете использовать плагин, kubectl podinfops.bat. Но подождите, есть немного больше, вы можете опустить .dat имени файла, Kubectl Podinfops.
Создать плагины для kubectl просто. Плагины работают на Linux и Windows. Теперь вы знаете, как вы можете использовать свои навыки PowerShell для автоматизации ваших задач Kubectl.
Оригинал: «https://dev.to/omiossec/writing-kubectl-plugin-with-powershell-4c25»