WARNING: This repository is published by the Nephio Authors but is
neither endorsed nor maintained by the Nephio Technical Steering Committee (TSC). It is intended
to be used for reference only. The Nephio distribution repositories are located in the
nephio-project
organization. For more information
see this page.
TKO
A PoC demonstrating scalability opportunities for Nephio with a focus on decoupling the various
subsystems, specifically the data backend and orchestration logic plugins, as well as integration
with external site inventories and blueprint catalogs.
TKO can also be automated using Ansible playbooks. Included is a demo
based on Ansible AWX (a.k.a. Ansible Tower).
This PoC is a complete rewrite of the Nephio core. It comprises three controllers (Data, Preparer,
and Meta-Scheduler) that can run independently or be embedded into a control plane. Included
is first-class support for using a Kubernetes management cluster as the control plane.
For the data backend, the default is RDBMS, optimized for the PostgreSQL
dialect of SQL. RDBMSes provides scalability, reliability, resiliency, and atomic updates via
transactions. They are widely available as managed cloud services, e.g. Google's planetary-scale
Spanner (which also speaks the PostgreSQL dialect).
A git data backend is also possible (a.k.a. "GitOps"), but not currently included. Note that such
a backend may be suitable for storing templates, but it's probably not a good backend for sites and
deployments, which are expected to number in the millions in real-world telco environments.
The TKO data controller exposes three flavors of API:
- gRPC, which is widely supported, including in loadbalancers (see
Envoy)
and thus service meshes. TKO makes good use of gRPC streaming directly from the backend to
the clients, allowing scalable access to extremely large result sets.
- KRM via a Kubernetes aggregated API. When running in a Kubernetes management cluster, it may
be preferrable for controllers to use KRM instead of gRPC, though the latter is still readily
available inside Kubernetes. Note that this KRM API is not implemented as CRs and is not
stored in Kubernetes's etcd database. Rather, it's a KRM facade over the TKO backend.
- A simple JSON-over-HTTP API for web browser applications, such as GUIs.
Ways in which TKO differs from Nephio:
- A different approach to "specialization" (here called "preparation"), replacing the
kpt file with per-resource plugins: no pipeline, no conditions.
Enforces atomic updates. Kpt functions still get first-class support.
- A different approach to "instantiation" based on meta-scheduling of complete sites
together with all their associated workload deployments, including infrastructure
resources for infrastructure managers. Can work with existing sites and also provision
new ones.
- A different approach to topologies, incorporating topology decomposition as part of the
preparation process. Topologies can be nested. Also supports
TOSCA topologies as an alternative frontend,
implemented with Puccini.
- A different approach to KRM validation, supporting custom validation plugins that can
go far beyond OpenAPIv3 schemas. Can also work on templates via "partial" validation. Invalid
KRM is never allowed into the backend. Relies on
Kubeconform for validating standard Kubernetes
resources via their published OpenAPIv3 schemas.
Additional features demonstrated:
- SDK for Python-based plugins for preparation, meta-scheduling, and validation. The SDK
does most of heavy lifting, allowing devs to focus on the network function or cloud
platform vendor logic.
- Rich metadata support, enabling powerful and scalable package querying and template/site
selection for topologies.
- Support for Helm charts with an expression language for pulling in
chart input values (as an alternative to full-blown preparation plugins).
- Web dashboard.
- Rich terminal dashboard, with mouse support.
- IPv6 first, with support for dual-stack IP.
- Unified structured logging via CommonLog,
including support for logging to journald.
Documentation
Architecture Diagram
%%{init: {'themeVariables': { 'edgeLabelBackground': 'transparent'}}}%%
flowchart TD
DB[(Data Backends)]
C(TKO CLI and TUI)
W(TKO Web GUI)
O(Orchestrators)
D[TKO Data]
P[TKO Preparer]
MS[TKO Meta-Scheduler]
PP[/preparer plugins/]
VP[/validator plugins/]
SP[/scheduler plugins/]
C-. gRPC ..-D
W-. HTTP ..-D
O-. gRPC ..-D
D-. gRPC ..- P
D-. gRPC ..-MS
DB-..-D
PP---P
VP---P
SP---MS
P-.-DPA
PR-.-MS
MS-.-WC
MS-.-SR
subgraph TC [Template Catalog]
ST[\Site Templates/]
WT[\Workload Templates/]
TT[\Topology Templates/]
end
subgraph SI [Site Inventory]
PS{{Provisioned Sites}}
ES{{Existing Sites}}
end
subgraph DPA [Deployment Preparation Area]
UT{{Unprepared Topologies}}
UR{{Unprepared Resources}}
PR{{Prepared Resources}}
end
subgraph WC [Workload Cluster]
SR{{Scheduled Resources}}
end
TT-->UT-->UR-->PR-->SR
WT-->UR
ST-->PS-->WC
style D fill:blue,color:white
style C fill:blue,color:white
style W fill:blue,color:white
style P fill:blue,color:white
style PP fill:darkblue,color:white
style VP fill:darkblue,color:white
style MS fill:blue,color:white
style SP fill:darkblue,color:white
style ST fill:red,color:white
style TT fill:red,color:white
style WT fill:red,color:white
style UT fill:yellow
style UR fill:yellow
style PR fill:green,color:white
style SR fill:green,color:white
style PS fill:green,color:white
style ES fill:green,color:white
linkStyle 0,1,2,3,4,9,10 stroke:blue,color:blue
linkStyle 6,7,8 stroke:darkblue,color:darkblue
Additional Resources