Перейти к основному содержимому

Эксплуатация агентов

Агент подключает одну Linux-машину к одной инсталляции Graphene. Он не слушает сетевой порт и постоянно восстанавливает исходящее соединение с сервером.

Пути установки

  • pipeline.NewAgent(...).CloudInit() возвращает user-data для машины, которую создаёт пайплайн.
  • pipeline.NewAgentViaSSH(...) запускает тот же скрипт на существующей машине.
  • При ручной установке бинарь можно запустить с окружением ниже, но публичной команды graphenectl agent install сервер пока не предоставляет.

Сгенерированный скрипт ставит /usr/local/bin/graphene-agent, пишет конфигурацию mode 0600 в /etc/graphene-agent/env, пытается установить runc, создаёт непривилегированного PTY-пользователя graphene-run и при наличии systemd устанавливает service. С другим init system запускайте бинарь сами с этим env-файлом.

Окружение

ПеременнаяОбязательность/defaultЗначение
GRAPHENE_AGENT_SERVERобязательноhost:port сервера
GRAPHENE_AGENT_TOKENобязательноcredential этого агента
GRAPHENE_AGENT_IDобязательноid записи, которую представляет процесс
GRAPHENE_AGENT_INSECUREfalseотключить TLS; только development
GRAPHENE_AGENT_CA_FILEпустодополнительный CA bundle сервера
GRAPHENE_AGENT_DATA_DIR/var/lib/graphene-agentimages и runtime bundles
GRAPHENE_AGENT_RUNTIMEruncrunc или exec для разработки
GRAPHENE_AGENT_REGISTRYпустоадрес registry proxy сервера
GRAPHENE_AGENT_PTY_USERпустопользователь interactive PTY; пусто означает root

Одну машину нельзя молча перепривязать к другому id. Повтор с другим id завершается GRAPHENE_ALREADY_BOUND; удаляйте старую identity только как явное решение о переподготовке машины.

Identity и lifecycle

Инсталляция может использовать настроенный agentId:token@namespace или выпустить credential при наличии signing key. Сгенерированный token ограничен одним агентом и имеет issuance TTL 30 дней. Это ещё не одноразовый bootstrap exchange.

При начале session агент сообщает machine facts и SHA-256 бинаря. Если сервер показывает другой digest, агент скачивает /agent/binary, проверяет digest, заменяет себя и просит systemd перезапустить service. Затем соединение снова сходится.

Runtime и доверие

Для управления runc агент работает как root. Каждая пара machine/run получает worker container с host в /host; machine.Command действует на файловой системе хоста. Упаковка не является изоляцией. Interactive PTY должен работать как graphene-run; пустой PTY user даёт root shell и пишет warning.

Health и диагностика

$ graphenectl get agent
$ graphenectl get agent/edge-1 -o json
$ graphenectl events agent/edge-1
$ graphenectl logs agent/edge-1 -f
$ graphenectl agent shell edge-1

На systemd-хосте:

$ systemctl status graphene-agent
$ journalctl -u graphene-agent -f
$ runc list

Offline agent не уничтожает записи немедленно: reconnect и reboot машины ожидаемы. Для безвозвратно потерянной машины пока нет поддерживаемой burial команды; см. Текущее состояние.