前言(当前为旧版迁移)
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 的命令行工具,与云端进行交互,管理注册的设备和数据。
- 下载
- 生成配置文件
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 = ******
- 安装依赖
pip install balena-sdk
- 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 接口
七、功能对比
官方有对比说明,我这边顺带翻译过来,最后两条是我补充的。
| 功能 | OpenBalena | BalenaCloud |
|---|---|---|
| 镜像更新 | 全镜像更新 | 增量更新 |
| 多租户 | 不支持 | 支持 |
| 拓展扩容 | 自建部署与缩放 | balena托管,无需考虑部署扩容 |
| 服务支持 | 通过论坛社区 | 付费专人支持 |
| 应用发布方式 | 使用 balena deploy 命令 | 支持 git push 或 balena push 推送,远程构建 |
| 构建方式 | 不支持 git push | git push ,远程 CI 构建 |
| 公网地址 | 不支持 | 支持 |
| 管理方式 | balena-cli 管理 | balena-cli 和 web dashboard |
| 镜像下载 | balena.io 下载标准镜像 | dashboard 直接下载应用对应镜像 |
| 远程诊断 | 不支持 | 支持 |
| 设备数量限制 | 无限 | 免费版 10个 |
| SSH终端 | 无 | 有 |