认识 Balena

358 阅读3分钟

前言(当前为旧版迁移)

Hi,大家好,我是十一,今天我们分享下 balena ,该项目是笔者在工作时,公司使用的一个基础项目,还是比较有意思的,如果读者们也在研究相关的东西,欢迎与我联系交流。

一、什么是 Balena

Balena 是用于构建,部署和管理连接的 Linux 设备群的一整套工具。

二、Balena相关产品

  • BalenaFin - 类树莓派的开发板 = mini pc
  • BalenaEtcher【下载】 - 镜像烧写工具 = 光盘刻录机
  • BalenaOS - balena 操作系统
  • BalenaEngine - 裁剪过的 docker engine
  • OpenBalena - 开源的云平台
  • BalenaCloud - 官方云平台

三、基本概念

  • Application 应用 - 设定的一个提供特定功能服务的产品
  • Device 设备 - 属于确定的一个产品下,提供应用服务的物理设备
  • Service 服务 - 应用中设定提供的软件服务
  • Env 环境变量 - 应用、设备的依据使用场景而能够动态设定的配置信息

四、OpenBalena

Github:github.com/balena-io/o…

OpenBalena 是一个用于部署和管理连接设备的平台。

30mins 快速搭建 Quick Start

搭建完成后,我们可以看到其包含以下容器:

  • HAProxy - 代理服务器,等同于nginx
  • VPN - 专有网络
  • Cert-Provider
  • Registry - 本地镜像仓库
  • API
  • Redis
  • DB(Postgres)
  • S3(Minio)

以上,HAProxy、Registry、S3、DB、Cert-provider 都是使用现有的开源软件,并没有进行特别的二次开发,他们着重开发的主要是 VPN 和 API。

五、Balena-CLI

balena-cli,是 balena 的命令行工具,与云端进行交互,管理注册的设备和数据。

  1. 下载
  2. 生成配置文件
echo 'balenaUrlL "api.{domain}"' > ~/.balenarc.yml

常用指令

balena login -t <token>

balena api-key generate "xavier"

balena apps
balena app <app_id>
balena app create <name>
balena app rename <application> [newname]
balena app restart <application>
balena app rm <application>

balena devices
balena device <uuid>
balena device identify <uuid>
balena device move <uuid(s)>
balena device reboot <uuid>
balena device rename <uuid> [newname]
balena device restart <uuid>
balena device rm <uuid(s)>
balena device shutdown <uuid>

balena envs -a <app_name>
balena envs -d <uuid> --all --config
balena env rm <id>
balena env add <name> [value]
balena env rename <id> <value>

balena os configure <image>
balena config generate -a <app_name> --network ethernet --appUpdatePollInterval 10 --version 2.47.0 -o config.json
balena deploy <app_name> -b -e -s . --logs --nocache

balena-cli 的功能很多,包含 app、device、api-key、config、os、env 等等,详情可以查官方文档

Ps. 若使用 OpenBalena ,需要注意版本问题,目前 v2 与 v3 有个较大的问题是 API 不完全兼容,会出现部分 cli 或 api 访问异常,还会导致设备注册进来的时候由于设备 id 参数的问题无法成功。

六、Balena-SDK

balena 提供了部分语言的 SDK ,其中我们简单讲一下 Balena-SDK-Python

sdk 的调用,默认会读取用户目录下的 .balena 目录下的 balena.cfg 设置,若为空会自动生成 balenacloud 的配置信息,若需要使用自行部署的话,注意要改成是自己 OpenBalena 的网址。

[Settings]
pine_endpoint = https://api.{domain}/v5/
api_endpoint = https://api.{domain}/
builder_url = https://builder.{domain}/
api_version = v5
device_actions_endpoint_version = v1
data_directory = /Users/xavierchan/.balena
image_cache_time = 604800000
token_refresh_interval = 3600000
timeout = 30000
cache_directory = /Users/xavierchan/.balena/cache
token = ******
  1. 安装依赖
pip install balena-sdk
  1. SDK 调用
# !/usr/bin/env python3
from balena import Balena

balena = Balena()
print('Balena settings:', balena.settings.get_all())

credentials = {'username': 'xxx', 'password': 'xxx'}
# 登陆后会将得到的 token 写入 balena.cfg
balena.auth.login(**credentials)

balena.settings.get_all()
balena.models.service_install.get_all_by_device('3')
balena.models.service.get_all_by_application('1')
balena.models.device.get_all()
balena.models.release.get_all_by_application('1')
balena.models.application.get_all()

PS. 详细 Python SDK 接口

七、功能对比

官方有对比说明,我这边顺带翻译过来,最后两条是我补充的。

功能OpenBalenaBalenaCloud
镜像更新全镜像更新增量更新
多租户不支持支持
拓展扩容自建部署与缩放balena托管,无需考虑部署扩容
服务支持通过论坛社区付费专人支持
应用发布方式使用 balena deploy 命令支持 git push 或 balena push 推送,远程构建
构建方式不支持 git pushgit push ,远程 CI 构建
公网地址不支持支持
管理方式balena-cli 管理balena-cli 和 web dashboard
镜像下载balena.io 下载标准镜像dashboard 直接下载应用对应镜像
远程诊断不支持支持
设备数量限制无限免费版 10个
SSH终端

八、参考