前言
Hi,大家好,我是十一,今天我们分享下 balena ,该项目是笔者在工作时,公司使用的一个基础项目,还是比较有意思的,如果读者们也在研究相关的东西,欢迎与我联系交流。
一、什么是 Balena ?
Balena 是用于构建,部署和管理连接的 Linux 设备群的一整套工具。
二、Balena相关产品
- BalenaFin - 类树莓派的开发板 = mini pc
- BalenaEtcher【下载】 - 镜像烧写工具 = 光盘刻录机
- BalenaOS - balena 操作系统
- BalenaEngine - 裁剪过的 docker engine
- OpenBalena - 开源的云平台
- BalenaCloud - 官方云平台
三、OpenBalena
Github:https://github.com/balena-io/open-balena
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 'balenaUrl: "api.{domain}"' > ~/.balenarc.yml
- 登录(最好先生成 API Token)
balena login
- 查应用
balena apps
- 查设备
balena devices
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终端 | 无 | 有 |
网友评论