Работаю разработчиком и довольно часто бывает нужны какие то сервисы локальные под рукой, что то дорогого покупать не хотелось, арендую обычно когда выкатываю к заказчику. Подумал поискать где можно хранить нужные для разработки, хранения и демонстрации сервисы (сайты, API и другое) . Наткнулся я на очень миниатюрное и экономичное решение, это SBC - single-board computer, одноплатные компьютера. Из того что хотелось бы это побольше памяти и ядер (потоков) процессора, а тут бонусом еще и миниатюрность, возможность легко перевозить, работать от power bank в случае необходимости.
В процессе анализа рынка я находил разные решения, начиная от популярных Raspberry Pi 4, до мало известных Khadas Vim4, который я брал летом и продал осенью потому что подумал что цена для него высоковата, в сравнении с другими устройствами.
Требования у меня были примерно такими:
8+Гб оперативной памяти (желательно DDR4, 1666 и выше)
4+ ядра (хотелось бы х86/х64, с arm64 и другими не работал, но готов исследовать)
Наличие подключения для SATA или NVMe дисков.
Возможность собрать несколько устройств в единый класстер.
Возможность легко перевозить и настраивать.
Посмотрев разные варианты мне на глаза в ноябре попался Orange Pi 5 RK3588S, который стал доступен по предзаказу в официальных магазинах производителя. В мои пожелания он укладывался и даже очень.
Детальную спецификацию можно посмотреть на сайте производителя, но тут я укажу основные параметры которые меня подкупили.
SOC — Rockchip RK3588S
CPU — 8-core 64-bit processor, 4xCortex-A76 (2.4GHz) and 4xCortex-A55 (1.8GHz)
RAM — 4GB/8GB/16GB /32GB(LPDDR4x)
GPU — Arm Mali-G610 MP4 + HDMI2.1, up to 8K @60Hz
Drive — M2 M-Key, USB 3.1 x2 и множество других подключений.
Цена: 8781 THB (около 16000 рублей за две штуки с доставкой) - 105$
Заказал 30 ноября и о чудо, 20 декабря пришли две платы Orange Pi 5 16Gb RAM.
Приехал доставщик Fedex c таможенной бумажкой к дому, на месте заплатил +7% Тайский таможенный налог за ввоз. (около 700 бат) . Упаковано было не очень, просто коробка, внутри плата и инструкция, но все доехало в целости.
Почитав инструкцию по использованию нашел как установить операционную систему и запустить. На официальном сайте доступны несколько ОС, я выбрал обычную Linux Ubuntu 22.04 с рабочим столом xfce.
Скачал образ Ubuntu 22 и через balenaEtcher залил образ на SD карту. Процесс там элементарно простой, выбрать образ, выбрать куда, нажать запуск, дождаться окончания и вот флеш карта с системой готова. Далее остается ее вставить в единственные подходящий порт, подключить монитор и питание. У меня есть переносной монитор 17", подключил его по HDMI, вставил кабель USB-C и нажав кнопочку пошли моргать светодиоды. Красный что устройство включено и зеленый когда идет работа.
Работает отлично, отклик на действия быстрый, картинка хорошая, видео 4к воспроизводит и еще есть запас. Попробовал разные офисные программки и побегать по разным сайтам в браузере. Все прекрасно работает. Дальше захотел попробовать сделать стресс тесты и посмотреть насколько идет нагрев.
При нагрузке 4х потоков тепмература повышается до 70 градусов, (при дневной +32) это с учетом небольшого радиатора 25х25мм. С охлаждением я еще что нибудь придумаю, на текущий момент охлаждается довольно быстро, если нагрузка не постоянная. При обычной работе до 10% процессора около +5-8 градусов к комнатной температере. Потребление 5V 0.4-3.7A зависит от нагрузки.
Теперь перейду к основному, для чего я взял, в ОС которую я поставил уже установлен Docker для использования контейнеров (маленьких приложений) , управлять им через CLI командную строку не особо удобно и я поставил Portainer. Ставится просто двумя командамиdocker volume create portainer_data
docker run -d -p 8000:8000 -p 9443:9443 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:latest
более подробно тут
далее открываем порт https://ip_address:9443/ и видим интерфейс для работы с контейнерами Portainer (при первом входе попросит создать пароль)
Для тех кто знает из чего состоит докер все будет относительно понятно, volume — места для хранения, network — настройки сети, images — образы, containers — непосредственно сами контейнеры, запущенные инстансы образов с настройками и stacks — система конфигураций, для запуска нескольких контейнеров с широким спектром возможностей (например маштабировать — реплицировать сервисы, сайты, API и т.д).
Немного позже я запущу оба одноплатных компьютера и поставлю Kubernetes для возможности запускать приложение на разных компьютерах, что позволит настроить и посмотреть что будет если один из компьютеров выйдет из строя. По идее система должна будет автоматически запустить сайт/сервис на другом доступном компьютере. Но это в следующей статье…
Пока что немного в догонку, я попробовал поставить gitlab-ce, minio S3, postgre, nginx, gitlab-runner c alpine. (docker-compose для gitlab-ce aarch64) Надо помнить что система на архитектуре aarch64 и не все приложения смогут запуститься. Но мир движется к тому что бы многое стало доступнее. В портейнере есть шаблоны для запуска Wordpress, Joomla, Drupal, Rabbit MQ, MySQL, ELK (elasticsearch) и другого.
Мне понравилась работа с minio S3 это можно сказать домашнее облачко для хранения и синхронизации файлов с разных устройств. Домашний S3, очень удобно, пришел домой, телефон и другие устройства подключились к домашней сети и автоматически загрузили свежие фото/видео/документы, поддерживает версионность файлов. Можно настроить что бы и из внешнего интеренета можно было загружать но это надо подумать о безопасности.
Моя следующая цель позапускать через pipeline сборку приложений, для начала .Net Core C# (asp mvc, web api), а потом попробовать собрать игру Unity3d и запустить серверную часть внутри кубера с балансировкой игроков.
Напишите в комментариях, интересна ли вам статья? , что еще вы бы хотели попробовать, проверить, посмотреть? на Orange Pi 5.
Буду рад вашим вопросам, пожеланиям и предложениям.
Комментарии (29)
1tuz
03.01.2023 03:50С компиляцией поосторожнее, а то ещё расплавится апелельсинка)
MagArt Автор
03.01.2023 12:30Пробовал нагрузить, температура действительно повышается хорошо, но это вопрос охлаждения, я пока использую радиаторы, для k3s, minio s3 и gitlab достаточно. Охлаждение пока жду и представлю полные тесты.
megasuperlexa
03.01.2023 06:27+5не могли бы подробнее раскрыть тему блока питания, а также каким образом подключили nvme?
MagArt Автор
03.01.2023 13:10+2Про блок питания, я использовал YC-CDA30, в документах указано 5V/4A, пробовал нагрузить насколько возможно на короткое время, у меня доходило до 5V/3.7A.
Про nvme я пока жду доставки, по идее подключиться должен напрямую есть вход сзади M.2 M-KEY 2242. Протестирую и отпишусь.megasuperlexa
03.01.2023 21:56просто с питанием одноплатников лично у меня было много проблем. Брал кубики которые вроде неплохо тянули, и по параметрам были с запасом, но в логах находил потом какашки про напряжение ну и в целом были проблемы. Как я понимаю дело в том что не каждый блочок может мгновенно выдать запрашиваемый ток. Но то было с распберри (фирменный кубик решил все проблемы)
Johan_Palych
03.01.2023 12:03+6Из практических соображений можно просто купить 2 неттопа-Мини ПК
Проц. Intel Celeron N5095 4M Cache, up to 2.90 GHz
Max Memory Size (dependent on memory type) 16 GB
Memory Types DDR4 LPDDR4x
Maximum Memory Speed 2933 MHz
Базовая конфигурация такого чуда стоит от 10 тыс.
Для примера:
Mini PC Beelink Mini S Windows 11 Intel 11 Gen Jasper Lake N5095 8G SSD128G
Корпус: Вес товара, г 700 c БП Размеры,мм: 210x135x65Забэкапить диск без активации Windows. И ставить любую ОС
werter_l
03.01.2023 15:09+1proxmox же )
Johan_Palych
03.01.2023 16:37Не совсем понял причем здесь Proxmox?
Intel Celeron Processor N5095 виртуализацию поддерживает:
Intel® Virtualization Technology (VT-x) Yes
Intel® Virtualization Technology for Directed I/O (VT-d) Yes
Intel® VT-x with Extended Page Tables (EPT) YesМожно Развернуть на 3-х коробочках 3 ноды ProxmoxVe и будет High Availability Cluster или другой гипервизор на Linux и Windows.
Материнка на Beelink Mini S с одним слотом под память.
Покупать 16гб DDR4 SODIMM(от 2.5 тыс) на 2 или 3 коробочки жаба душит.
Но есть возможность добавления 2,5-дюймового диска SATA в крышку,
которая подключается к материнской плате через короткий ZIF-кабель.
Был хороший обзор на cnx-software.werter_l
04.01.2023 12:33К тому. что если купили себе билинк под СЕРВЕР, то лучше варианта, чем развернуть на нем proxmox для дальнейшего "серверного" использования нет.
Вот к этому.
Зы. Другой гипервизор не надо. Другой не умеет из коробки в zfs, бэкапы по расписанию и инкрементно (с pbs), кластеризацию бесплатно и т.д.
DevAdv
03.01.2023 22:39+1Я просто купил БУ ноутбук c i5-1135G7 и разбитым экраном (не показывает правая четверть) за $150. Тут ниже привели сравнение в бенчмарках, добавил и этот процессор. Быстрее других приведённых тут на 60-100+%.
Правда, памяти 8 гигабайт и не расширяется, но мне для моих задач достаточно.
Одноплатные компьютеры - это круто, но по цене в $30 долларов. А когда за такие же деньги можно купить полноценное устройство - непонятно, в чём их смысл.
Johan_Palych
04.01.2023 01:51Удачная покупка за за $150
Хороший камешек Intel Core i5-1135G7 Processor 8M Cache, up to 4.20 GHz
Max Memory Size (dependent on memory type) 64 GB
Alexzionx
03.01.2023 13:11+1Пользуюсь Orange pi zero 1 и Orange pi zero 2, причем zero 1 еще с момента выпуска, лет 5 уже, может больше, отказов не было, совсем.
Коротко по конфигам:
Zero 1: microsd 128gb samsung, 1xUsb 256gb samsung, (docker, emby, gogs, samba, httpd, +тестовые образы переодичесски)
Zero2: microsd 64 samsung, 2xUsb 256gb не помню чьи, в рейде через mdadm, на ней докер забит кучей тестовых образов и vm, + через проьлос порта доступ к 1 vm из вне.
Vaitek
03.01.2023 14:52+2Passmark утверждает, что проц на уровне core i7 первого поколения
Вы не делали каких-то бенчмарков?
werter_l
03.01.2023 15:21А еще arm-ы можно для кворума использовать с ceph.
https://pve.proxmox.com/pve-docs/chapter-pvecm.html#_corosync_external_vote_support
https://forum.proxmox.com/threads/cluster-mit-3-quorum-node-raspberry-3b-aufbauen.66699/
DuD
Спасибо за статью, интересная машинка.
А вот с kubernetes не все так однозначно. Для отказоустойчивости вам понадобится третья машина, в ином случае невозможно будет однозначно определить, это машинка сломалась или просто сеть между ними порвалась. Типовая ситуация split-brain.
MagArt Автор
Да спасибо. Я уже заказал nanopi r5s в качестве мастер ноды
bezrukovPS
Дополню про кубера. Система хоть и отличная, но для хотя-бы средних размеров кластера, мини пк, всё таки для этих целей не подойдут, нет конечно он запустится, но съест львиную долю ресурсов. Имхо микро компьютеры дома скорее для иных задач, умный дом, файл шара, какой-то кастомные сервер. А тот же гитлабе и иже с ними лучше на арендный сервер переносить...
MagArt Автор
k3s отжирает не так много на самом деле, можно накидать ещё десяток микро компьютеров и будет вполне сносный кластер (не только для домашних целей).
ProFfeSsoRr
Если k8s использовать как продвинутый Portainer, то ничего он практически не жрет. etcd сам по себе легкий, данных в нем в таком маленьком кластере мало, контейнеры будут редко перезапускаться - значит и api вызовов будет не так уж и много. Это если кластер обвешать всякими istio да мониторингами... Но так это и будет нагрузка от этих приложений, а не от k8s как такового, опять же.
Borz
IMHO, что k8s что Portainer на такой железке избыточно - достаточно простого Docker ну, или на край, Docker Compose. Что в домашнем облаке привносит k8s/Portainer , без чего нельзя обойтись?
vvzvlad
Веб-панель для докера?
Borz
ммм. И зачем? так ли уж часто надо лазить в веб-панель докера?
Вот есть у меня веб-панель от Synology NAS для Docker, так я её вижу от силы раз в полгода, если не реже. В основном или через консоль что-то пнуть, или через Ansible скрипт, если подконфигурить docker контейнер надо.
А настраивать через веб-панель докеры - это потом не знать какие команды/аргументы через консоль для докера надо дёргать
ЗЫ: кстати, кажется только Portainer конфигурируется через мордочку - для k8s вроде тоже предпочитают консоль использовать и различные скриптования. Хотя могу ошибаться и Portainer можно и через консоль конфигурить... но в моём окружении пока не видел таких "рукастых" немышоидов
Areso
рестарт сдохших подов?
Но мне кажется, Docker Swarm эффективнее.
Borz
прописанный HEALTHCHECK внутри Dockerfile + https://github.com/willfarrell/docker-autoheal и не надо swarm.
Так же, как и для обновления образов до последних версий (кто тег latest пользует или "сокращённую" версию тега) - Watchtower
ProFfeSsoRr
С этой позиции контейнеры вообще дома не нужны. Дома на то и дома, что собираешь как хочешь. Я много работаю с k8s, и мне удобнее запустить k3s на таком сервачке, чтобы было привычно и удобно. Ты вот ниже пишешь, что тебе удобнее через Ansible - ну вот, оно же - излишнее для одной машины, но тебе удобнее вот так.
Tangeman
Не всё так плохо со split brain, двух нод может хватить если добавить простую логику - проверять связь через все доступные каналы включая внешние (активная проверка) и наличие внешних соединений, к тому же можно добавить ещё один альтернативный внутренний канал - например через USB или serial.
Я использовал этот принцип для построения HA-рутеров (ровно две машинки) - всё отлично работало - если один не видел соседа (через serial, прямое соединение ethernet и через внутреннюю и внешнюю сети), а также не видел клиентов или аплинков - он автоматом деактивировался и ждал восстановления связи. При отсутствии соседа тот кто видел и клиентов и аплинки оставался (или становился) мастером - при такой кофигурации split brain практически невозможен пока жив хоть один канал связи.
Можно также пассивно мониторить ARP запросы и если для VIP их становится слишком много в единицу времени - использовать это как индикатор того что текущий мастер действительно умер или потерял связь (можно убедиться своим ARP запросом), ибо если мы их видим то скорее всего клиенты нас тоже видят, а вот соседа - нет.
Да, вероятно это не закроет все возможные сценарии, но в случае даже пяти нод тоже может оборваться только внутренняя связь между всеми (например если у них свой собственный коммутатор для внутренней сети) - и мы снова приходим к тому что нужен мониторинг через другую сетку, причем крайне желательно через ту же откуда ходят клиенты.