
Как использовать Jbbelet: безопасное выполнение процесса Linux сделано простым
9 июля 2025 г.Для кого эта статья для
Основная аудитория:Инженеры Devops, системные администраторы, команды SRE, разработчики бэкэнд, управляющие инфраструктурой Linux
Предварительные условия:
- Базовый опыт командной строки Linux
- Понимание SSH и удаленного управления сервером
- Знакомство с
systemd
услуги - Основные знания сертификатов TLS/SSL (полезные, но не требуемые)
Что такое Иоплет?
Jablet-это легкая платформа изоляции процесса, которая позволяет запускать команды и сценарии в безопасных, контролируемых ресурсах средах. Думайте об этом как о более простой альтернативе Docker для выполнения процесса - никаких контейнеров не требуется, только один двоичный файл, который предоставляет:
- Безопасная изоляцияИспользование пространств имен Linux
- Пределы ресурсовДля процессора, памяти и ввода -вывода
- Мониторинг процессов в реальном времении потоковой трансляции журнала
- GRPC APIс аутентификацией
- Простой CLIдля легкого взаимодействия
Независимо от того, строите ли вы систему CI/CD, безопасно выполняете код пользователя или нуждаетесь в изолированном выполнении задач, Jblet предоставляет чистое, готовое к производству решение.
Зачем использовать хлеб? Перед VS после сценариев
Давайте посмотрим, как Иоплет преобразует общие проблемы с развитием и операциями с реальными примерами:
🔍 Изоляция системного вызова в действии
❌ Без хлеба: прямое исполнение хоста (опасно)
# Running ps aux directly on the host shows ALL system processes
$ ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.3 167744 13132 ? Ss Jun26 0:11 /sbin/init
root 2 0.0 0.0 0 0 ? S Jun26 0:00 [kthreadd]
systemd+ 564 0.0 0.2 90096 5392 ? Ss Jun26 0:00 /lib/systemd/systemd-resolved
messagebus 565 0.0 0.1 8808 3840 ? Ss Jun26 0:02 /usr/bin/dbus-daemon --system
joblet 1234 0.1 0.5 123456 10240 ? Sl Jun26 1:23 /opt/joblet/joblet
postgres 2345 0.0 1.2 456789 25600 ? S Jun26 0:45 postgres: main process
mysql 3456 0.2 2.1 789012 43520 ? Sl Jun26 2:10 mysqld --datadir=/var/lib/mysql
apache2 4567 0.0 0.8 234567 16384 ? S Jun26 0:30 /usr/sbin/apache2 -DFOREGROUND
...
user 9999 0.0 0.0 10072 1608 pts/2 R+ 17:37 0:00 ps aux
Проблемы безопасности:
- Процесс может видеть все системные процессы (включая конфиденциальные услуги)
- Имеет доступ к деталям процесса, PID и использованию ресурсов
- Может взаимодействовать с другими процессами или сигнализировать или сигнализировать
- Нет изоляции от ресурсов хост -системы
✅ с Jbbelet
# Running the same command through Joblet shows ONLY the job's process
$ rnx run ps aux
Job started:
ID: 120
Command: ps aux
Status: RUNNING
StartTime: 2025-01-15T17:34:33Z
$ rnx log 120
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
0 1 0.0 0.0 10044 1580 ? R 17:34 0:00 ps aux
Пособия по безопасности:
- Работа видит только свой собственный процесс (PID 1 в изолированном пространстве имен)
- Не может обнаружить или взаимодействовать с процессами хоста
- Полная изоляция процесса от системы хоста
- Защищен от вмешательства другими рабочими
Быстрый старт: ваша первая работа (процесс)
Установка
# Download the latest release
wget $(curl -s https://api.github.com/repos/ehsaniara/joblet/releases/latest | grep "browser_download_url.*_amd64\.deb" | cut -d '"' -f 4)
# Interactive installation (recommended - prompts for server IP)
sudo dpkg -i joblet_*_amd64.deb
# Start the service
sudo systemctl start joblet
sudo systemctl enable joblet
# test locally
rnx --config=/opt/joblet/config/rnx-config.yml list
Вот и все! Jblet теперь работает как системная служба с автоматическими сертификатами SSL.
Ваш первый процесс
# Run a simple command
rnx run echo "Hello from Joblet!"
# Output:
# Job started:
# ID: 1
# Command: echo Hello from Joblet!
# Status: RUNNING
# StartTime: 2024-01-15T10:30:45Z
# Network: host (shared with system)
Поздравляю! Вы только что запустили свою первую изолированную работу.
Основные команды
Работающие работы
Аrnx run
Команда - ваш основной интерфейс для выполнения задания:
# Basic command
rnx run ls -la
# Python script
rnx run python3 -c "print('Hello from Python!')"
# With resource limits
rnx run --max-cpu=50 --max-memory=256 stress-ng --cpu 1 --timeout 30s
# Complex shell commands
rnx run bash -c "for i in {1..5}; do echo 'Iteration $i'; sleep 1; done"
ОБЪЯСНЕНИЯ РЕСУРСА объяснили:
--max-cpu=N
- Процент процессора (50 = 50% от одного ядра)--max-memory=N
- Предел памяти в МБ--max-iobps=N
- Операции ввода/вывода в секунду.
Мониторинг рабочих мест
# List all jobs
rnx list
# Output:
# 1 COMPLETED StartTime: 2024-01-15T10:30:45Z Command: echo Hello from Joblet!
# 2 RUNNING StartTime: 2024-01-15T10:31:20Z Command: sleep 60
# 3 FAILED StartTime: 2024-01-15T10:32:10Z Command: invalid-command
# Get detailed job status
rnx status 2
# Output:
# Id: 2
# Command: sleep 60
# ExitCode: 0
# Started At: 2024-01-15T10:31:20Z
# Ended At:
# Status: RUNNING
# MaxCPU: 100
# MaxMemory: 512
# MaxIOBPS: 0
Поток журнала в реальном времени
Одна из функций убийцы Иоплета-потоковая передача журнала в реальном времени:
# Stream logs from a running job
rnx log 2
# Output streams in real-time:
# Logs for job 2 (Press Ctrl+C to exit if streaming):
# Starting process...
# Processing data...
# Step 1 complete
# Step 2 complete
# ...
Команда журнала автоматически следует за выводом до завершения задания, или вы нажимаете Ctrl+c.
Конфигурация и настройка
Конфигурация сервера
Поведение Jablet можно настроить через файл конфигурации по/opt/joblet/config/joblet-config.yml
:
server:
address: "0.0.0.0"
port: 50051
joblet:
defaultCpuLimit: 100 # Default CPU limit (100%)
defaultMemoryLimit: 512 # Default memory limit (512MB)
defaultIoLimit: 0 # No I/O limit by default
maxConcurrentJobs: 50 # Max simultaneous jobs
jobTimeout: "1h" # Job timeout
validateCommands: true # Enable command validation
security:
# Certificates embedded here automatically
serverCert: |
-----BEGIN CERTIFICATE-----
...
serverKey: |
-----BEGIN PRIVATE KEY-----
...
caCert: |
-----BEGIN CERTIFICATE-----
...
logging:
level: "INFO" # DEBUG, INFO, WARN, ERROR
format: "text" # text or json
output: "stdout" # stdout or file path
После изменения конфигурации:
sudo systemctl restart joblet
Конфигурация клиента
Укажите CLI на другой сервер:
# Connect to remote Joblet instance
rnx --server 192.168.1.100:50051 run echo "Hello from remote!"
# Or set it as default
export JOBLET_SERVER=192.168.1.100:50051
rnx run echo "Using environment variable"
Безопасность и аутентификация
Управление сертификатами
Иоплет использует MTL для безопасности. Сертификаты автоматически генерируются во время установки, но вы можете восстановить их:
# Regenerate all certificates
sudo /usr/local/bin/certs_gen.sh
# This creates:
# - CA certificate
# - Server certificate
# - Admin client certificate (full access)
# - Viewer client certificate (read-only access)
Доступ на основе ролей
Иоплет поддерживает две роли через сертификат организационных единиц:
Административная роль(полный доступ):
- Запустить задание
- Остановить работу
- Просмотреть статус работы и журналы
- Перечислите все работы
Роль зрителя(только для чтения):
- Просмотреть статус работы и журналы
- Перечислите все работы
- Не может работать или остановить задания
Роль определяетсяOU
Поле в сертификате клиента.
Мониторинг и устранение неполадок
Служба статуса
# Check Joblet service status
sudo systemctl status joblet
# View service logs
sudo journalctl -u joblet -f
# Check resource usage
sudo systemctl show joblet --property=CPUUsageNSec,MemoryCurrent
Отладка работы
# Check job output for failed jobs
rnx status <job-id>
rnx log <job-id>
# List recent jobs with status
rnx list | head -10
# Monitor active jobs
watch -n 2 'rnx list | grep RUNNING'
Советы по производительности
- Пределы ресурсов: Всегда устанавливайте соответствующие ограничения, чтобы предотвратить сбежавшие задания
- Одновременная работа: Мониторинг системных ресурсов при выполнении многих параллельных заданий
- Управление журналом: Длительные работы могут генерировать большие журналы - рассмотрите вращение журнала
- Уборка: Иоплет автоматически очищает выполненные задания, но контролируйте дисковое пространство
Сравнение с альтернативами
Особенность | Иоплет | Докер | Система |
---|---|---|---|
Сложность установки | Простой | Умеренный | Сложный |
Изоляция ресурсов | ✅ | ✅ | Ограничен |
Сетевая изоляция | Необязательный | ✅ | ❌ |
Изоляция файловой системы | ✅ | ✅ | ❌ |
Журналы в реальном времени | ✅ | Руководство | Руководство |
Job API | ✅ | Руководство | ❌ |
Одиночный бинарный | ✅ | ❌ | ❌ |
Получить помощь
- Документация: ПроверьтеРепозиторий GitHub
- Проблемы: Сообщите об ошибках и запросах функций на GitHub
- Журналы: Всегда проверяйте
sudo journalctl -u joblet
по вопросам обслуживания - Сообщество: Присоединяйтесь к обсуждениям в вопросах GitHub проекта
Заключение
Jbbelt обеспечивает чистый, простой способ выполнения изолированных заданий без сложности оркестровки контейнеров. Независимо от того, обрабатываете ли вы данные, запускаете тесты или выполняете код пользователя, комбинация безопасности, простоты и мониторинга Jablet делает его отличным выбором для выполнения задания.
Ключевые выводы:
- Установка проста: Один пакет, автоматическая конфигурация
- Использование интуитивно понятно: Знакомый интерфейс командной строки
- Безопасность встроена: Изоляция пространства имен и аутентификация MTLS
- Мониторинг в режиме реального времени: Журналы потоков и мониторинг использования ресурсов
- Интеграция проста: GRPC API для программного доступа
Начните с простых команд, экспериментируйте с ограничениями ресурсов и постепенно интегрируйте Jbbelt в ваши рабочие процессы. Платформа предназначена для роста с вашими потребностями при сохранении простоты и безопасности.
GitHub
https://github.com/ehsaniara/joblet?embedable=true
Оригинал