Balena

前言

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 的命令行工具,与云端进行交互,管理注册的设备和数据。

  1. 下载
  2. 生成配置文件
    echo 'balenaUrl: "api.{domain}"' > ~/.balenarc.yml
    
  3. 登录(最好先生成 API Token)
    balena login
    
  4. 查应用
    balena apps
    
  5. 查设备
    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 = ******
  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 接口


六、功能对比

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

功能 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终端

参考

  • 官方论坛:https://forums.balena.io/
  • balena-cli 帮助文档
  • docker-compose 降级注意
  • balena key/ssh 不支持 OpenBalena(5月)
  • OpenBalena 支持 ssh 方式

你可能感兴趣的:(Balena)