aranya

module
v0.0.0-...-735b8cc Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 15, 2022 License: Apache-2.0

README

aranya 阿兰若

CICD PkgGoDev GoReportCard Coverage

The refernce controller implementation of aranya-proto, manages all your devices in Kubernetes

overview

Features

  • Integrate all kinds of devices with any operating system into existing Kubernetes clusters

    • Reuse your existing cloud infrastructure for devices (Scheduling, Authorization, etc)
    • Group your devices with namespace (soft multi-tenancy), highly scalable (see docs/Multi-tenancy.md)
  • Deploy and manage large scale devices with kubectl (Kubernetes API) and ansible

    • kubectl attach/exec/cp/logs/port-forward to both host and containers
    • ansible with kubectl connection, see docs/Ansible.md
  • Easy deployment

    • Single custom resource (EdgeDevice) to rule all kinds of devices and workloads
    • Edge devices get integrated into Kubernetes with lightweight protocols like MQTT, CoAP
  • Flexible cluster network mesh in remote sites as a addon (experimental)

    • Deploy and manage cluster network in device host/runtime with abbot container
  • Standard CSI with remote access (experimental, see Remote CSI)

    • Only mount operation happens in remote devices, everything else is your cloud Kubernetes cluster's duty

NOTE: For details of the host management, please refer to Maintenance #Host Management

Goals

  • Make it possible to build absolutely distributed cluster with a single Kubernetes control plane
    • Deploy nodes to anywhere with any kind of network reachability, regardless of IP Address, NAT, Firewall ...
  • Extend Kubernetes to be a universal control plane for everything
    • Not only powerful servers, single-board computers, but also embedded devices, micro controllers
  • Serve thousands of devices in a Kubernetes cluster at reasonable cost
    • No direct requests to apiserver from nodes
  • More secure node deployment
    • No cluster credentials will be stored in nodes
  • Offer a more developer friendly way to create custom runtimes using message oriented protocols

Non-Goals

  • Simplify Kubernetes
  • Create a new Cloud/IoT ecosystem

FAQ

You may have a lot of questions regarding this project, such as Why not k3s?:

see docs/FAQ.md or file a issue for discussion!

Project State

EXPERIMENTAL, USE AT YOUR OWN RISK

TL;DR: Currently you can treate aranya as a management service for arhat with prometheus node metrics collecting support

Currently state of functionalities:

  • Stable:
    • Port-forward
    • Exec/Attach
    • Node metrics collecting
    • Extended node info reporting and node field hooks
    • MQTT connectivity
    • gRPC connectivity
  • Unstable (subject to design change):
    • Role & ClusterRole management
    • GCP Cloud IoT connectivity
    • Azure IoT Hub connectivity
  • Experimental (not fully supported):
    • Pod management
    • Network mesh with abbot
    • Remote CSI
    • Credential delivery
    • AMQP 0.9 connectivity
  • TODO:
    • NATS Stream connectivity
    • Kafka connectivity
    • AMQP 1.0 connectivity

NOTE: This project lacks tests, all kinds of contribution especially tests are welcome!

Kubernetes Pod Support
  • Pod environment variables source
    • configMap
    • secret
    • fieldRef
    • plain text
  • Pod volume
    • source
      • configMap
      • secret
      • hostPath
      • persistentVolumeClaim (backed by CSI only)
        • subPath
      • csi (inline CSI)
    • mount type
      • VolumeMount
      • VolumeDevice
  • Pod network (requires abbot)
    • device host/runtime <-> cluster
    • device host/runtime <-> device host/runtime

NOTE: You MUST NOT use unsupported features in your pod spec (assigned to EdgeDevice nodes), which could result unexpected behavior!

Deployment

see docs/Deployment for deployment worklflow of aranya and EdgeDevice

Development

see docs/development for topics like Build, Design, Releasing

LICENSE

Copyright 2020 The arhat.dev Authors.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

Directories

Path Synopsis
cmd
pkg
cmd
controller
Package controller
Package controller
virtualnode
Package virtualnode the node managed by aranya
Package virtualnode the node managed by aranya
virtualnode/pod
Package pod
Package pod

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL