Установка инструментов разработчика и обзор d8 CLI

Уровень: beginner ~50 мин

Что нужно знать перед уроком

  • M0.01 — Карта экосистемы — нужно понимать, зачем нужен каждый инструмент

Что нужно знать перед уроком

M0 урок 1 — общая карта: Kubernetes/Deckhouse/Werf/Nelm/Application/Registry. В этом уроке мы устанавливаем всё, что нужно для практики, и подробно разбираем d8 — единую CLI-утилиту платформы Deckhouse, которая будет использоваться в каждом последующем модуле.

Теория

Набор инструментов разработчика Application

ИнструментРольУстанавливается
gitконтроль версий, источник для giterminism werfсистемный пакетный менеджер
Container runtime (Docker/Podman)локальная сборка и запуск образовсайт производителя
kubectlуниверсальный CLI для Kubernetes APIcurl/пакетный менеджер
d8 (deckhouse-cli)CLI платформы Deckhouse (обёртка над kubectl + платформенные команды)trdl
werfсборка образов и деплойtrdl
nelmрендер/применение чартов (используется werf’ом «под капотом», а также напрямую)trdl/бинарь с GitHub releases

trdl — единый механизм установки и обновления

Инструменты экосистемы Werf/Deckhouse ставятся не через apt/brew, а через собственный механизм trdl (The Update Framework-совместимый транспорт с верификацией подписи и поддержкой каналов обновления alpha/beta/early-access/stable/rock-solid, аналогичных release channels самого Deckhouse). Общая схема:

1
2
3
4
5
# Добавляем репозиторий инструмента (пример для d8)
trdl add d8 https://deckhouse.ru/downloads/deckhouse-cli-trdl 1 <root-sha512>
# Подключаем канал stable, группа версий 0, в текущей сессии шелла
. $(trdl use d8 0 stable)
d8 --version

Тот же механизм используется для werf:

1
2
3
trdl add werf https://tuf.werf.io 1 <root-sha512> werf
trdl use werf 2 stable
werf version
Почему не просто скачать бинарник
trdl даёт три вещи, которых нет при ручном скачивании: (1) криптографическую верификацию каждого обновления по корневому ключу, (2) явное разделение на каналы стабильности (alpharock-solid), (3) единый механизм для всех инструментов экосистемы (d8, werf) с одинаковым UX обновления.

kubectl — универсальный клиент Kubernetes API

kubectl — официальный CLI-клиент для любого Kubernetes API, независимо от дистрибутива. Устанавливается стандартно (пакетный менеджер ОС или официальный бинарник с kubernetes.io). Все команды kubectl get/describe/apply/logs/exec будут работать одинаково в кластере kind из следующего урока и в любом продакшен-кластере Deckhouse.

d8 — CLI-утилита платформы Deckhouse: полный обзор групп команд

d8 — не замена kubectl, а надстройка: часть команд (d8 k) — прямой аналог kubectl, работающий через тот же kubeconfig, а остальные группы — платформенные операции, которых в чистом Kubernetes просто не существует. Официальная таблица групп команд (Deckhouse — CLI d8):

ГруппаНазначениеАктуальность для Application-разработчика
d8 kаналог kubectl — вся стандартная работа с Kubernetes APIосновной инструмент, использует каждый урок
d8 systemнастройки/модули/очереди платформы, системные логи deckhouse-controllerнужен для диагностики зависимостей-Module (M2)
d8 statusобщий статус кластера/модулейполезен при troubleshooting (M10 урок 10)
d8 backupbackup объектов etcd (не данных внутри PVC!)важное разграничение — M10 урок 8
d8 crоперации с container registryпригодится в M9
d8 mirrorофлайн-копирование артефактов (недоступно в CE/BE)не используется в этом курсе (CE-кластер)
d8 delivery-kitbuild/publish/plan/deploy приложений, SBOM (недоступно в CE/BE)не используется в этом курсе (CE-кластер)
d8 dataоперации с данными платформыне в фокусе курса
d8 vвиртуализация (модуль virtualization)не в фокусе курса
d8 iamidentity/access managementобзорно в M10 урок 9
d8 strongholdсекреты (Deckhouse Stronghold)обзорно, альтернатива Kubernetes Secret
d8 networkсетевые настройки платформыобзорно в M1
d8 completionавтодополнение шеллаутилитарная
d8 toolsвспомогательные утилитыутилитарная
d8 packagebootstrap/build/verify Application-пакетовосновной инструмент с M5 — встроенная команда
d8 pluginsуправление подгружаемыми расширениями CLI (не d8 package)обзорно — см. ниже
d8 package — встроенная команда
Группа package (нужна с M5) в актуальных версиях deckhouse-cli (DKP 1.76+) — встроенная top-level команда наряду с bootstrap/build/verify; отдельно через d8 plugins install package ставить не нужно — достаточно установленного d8. Проверьте сразу после установки: d8 package --help. Если команда не найдена — обновите d8 через trdl, а не legacy-плагин: в более старых версиях deckhouse-cli package поставлялась как lazy-loaded плагин через d8 plugins install package.

d8 plugins — механизм подгружаемых расширений CLI

Механизм d8 plugins по-прежнему существует для прочих версионируемых расширений CLI (не для d8 package в актуальных релизах). Плагины скачиваются компонентом кластера registry-packages-proxy по Bearer-токену из kubeconfig; авторизация — через ClusterRole d8:registry-packages-proxy:cli-download, который выдаёт администратор кластера.

1
2
3
4
5
6
7
8
9
d8 plugins list                          # какие плагины установлены
d8 plugins versions <name>               # доступные версии плагина
d8 plugins install <name>                # установить последнюю совместимую версию
d8 plugins install <name> --version 1.4.0
d8 plugins install <name> --use-major 1
d8 plugins update <name>                 # обновить один плагин
d8 plugins update all                    # обновить все установленные плагины
d8 plugins contract <name>               # версия API-контракта плагина (для совместимости с версией d8)
d8 plugins remove <name>

Жизненный цикл Application-пакета через d8 package bootstrap/build/verify разбирается практически в M5 уроке 9.

werf и nelm

werf — самодостаточный бинарник, nelm используется werf’ом «под капотом» при werf converge, но также может вызываться отдельно как самостоятельный CLI (nelm release ..., nelm chart ...) — это разбирается подробно в M4.

Linux / Сети

PATH, права и ~/.kube/config

Все перечисленные инструменты — обычные исполняемые файлы. После установки через trdl команда доступна в текущей сессии шелла только после того, как вы явно выполнили . $(trdl use d8 0 stable) (это подключает нужную версию, а не запускает её напрямую) — чтобы не делать это перед каждым вызовом, добавьте в ~/.bashrc/~/.zshrc alias вручную, например alias d8='trdl exec d8 0 stable -- "$@"', и затем source ~/.bashrc/source ~/.zshrc.

1
2
echo $PATH                     # проверить, что каталоги с бинарниками в PATH
chmod +x ./kubectl              # если скачали бинарник вручную — не забудьте exec-бит

kubectl/d8 k подключаются к кластеру через файл kubeconfig — YAML с адресом API-сервера, сертификатами клиента и контекстами (какой кластер/namespace/пользователь используется «по умолчанию»). Путь к нему — переменная окружения KUBECONFIG, по умолчанию ~/.kube/config:

1
2
3
4
export KUBECONFIG=~/.kube/config
kubectl config view --minify         # что реально сейчас используется
kubectl config get-contexts
kubectl config use-context <name>

В следующем уроке kind автоматически запишет новый контекст в этот файл — важно понимать, откуда он берётся, чтобы не терять время на диагностику «кластер не отвечает» из-за неверного контекста.

Частые ошибки и подводные камни

  • Путать kubectl и d8 k. Это не два разных инструмента с разным поведением — d8 k буквально проксирует в kubectl с тем же kubeconfig. Разница появляется только в специфичных для Deckhouse удобствах (например, автодополнение CRD платформы). В этом курсе команды d8 k и kubectl взаимозаменяемы, если не сказано иное.
  • Использовать устаревшую версию deckhouse-cli, где d8 package ещё был плагином. В DKP 1.76+ команда встроена; если d8 package --help не работает — обновите d8 через trdl, а не ставьте legacy-плагин.
  • Забыть, что d8 mirror/d8 delivery-kit недоступны в Community Edition. Если проходите курс на CE-кластере (как в M0 уроке 3) — эти группы не будут работать, это ожидаемо, не тратьте время на диагностику.

Практика в кластере

Кластера пока нет — он появится в следующем уроке. Однако сами инструменты уже можно и нужно поставить и проверить их версии:

1
2
3
4
5
git --version
docker --version           # или podman --version
kubectl version --client
d8 --version
werf version

Если какая-то команда не найдена — вернитесь к разделу «Linux / Сети» этого урока и проверьте PATH/rc-файл шелла.

Практика разработки

В этом уроке практики сборки/деплоя ещё нет — она появится с M3, когда у нас будет и код приложения, и работающий кластер.

Шпаргалка команд урока

1
2
3
4
5
6
trdl add <tool> <repo-url> <root-version> <root-sha512>
trdl use <tool> <group> <channel>
d8 plugins list|versions|install|update|contract|remove <name>
kubectl config view --minify
kubectl config get-contexts
kubectl config use-context <name>

Полная шпаргалка по d8 (с обновлением после каждого нового модуля) — 📋 cheatsheets/d8 .

Вопросы для самопроверки

Через какой механизм устанавливаются и обновляются d8 и werf?

trdl даёт криптографическую верификацию обновлений и единые каналы стабильности (alpha...rock-solid) для всех инструментов экосистемы.

Источник: Deckhouse — Deckhouse-cli

Как поставляется команда d8 package в актуальных версиях deckhouse-cli (DKP 1.76+)?

В deckhouse-cli для DKP 1.76+ package зарегистрирована как встроенная команда наравне с bootstrap/build/verify; d8 plugins install package — legacy-путь для более старых версий CLI.

Источник: GitHub — deckhouse/deckhouse-cli

Какая группа команд d8 отвечает за backup, и что именно она бэкапит?

Ключевое разграничение курса (подробно в M10): d8 backup etcd бэкапит объекты кластера, backup данных приложения — ответственность разработчика Application.

Источник: Deckhouse — Backup and restore

Чем d8 k отличается от обычного kubectl?

d8 k — тонкая обёртка над стандартным доступом к Kubernetes API через тот же kubeconfig, что и kubectl.

Источник: Deckhouse — Deckhouse-cli

Где хранится информация о том, к какому кластеру подключается kubectl/d8 k по умолчанию?

kubeconfig описывает адрес API-сервера, сертификаты и контексты; путь к нему задаёт KUBECONFIG, по умолчанию ~/.kube/config.

Источник: Kubernetes — organize cluster access kubeconfig

Рекомендуемая литература

Официальная документация

Статьи и блоги

Книги

  • Marko Lukša. Kubernetes in Action. 2nd ed., 2022. ISBN 978-1617297618.

Связанные материалы