Skip to content

OpenYurt - Extending your native Kubernetes to edge(project under CNCF)

License

Notifications You must be signed in to change notification settings

yanyhui/openyurt

 
 

Repository files navigation

openyurtio/openyurt


Version License Go Report Card

English | 简体中文

notification What is NEW!
Latest Release: September 26th, 2021. OpenYurt v0.5.0. Please check the CHANGELOG for details.
First Release: May 29th, 2020. OpenYurt v0.1.0-beta.1

OpenYurt is built based on upstream Kubernetes and now hosted by the Cloud Native Computing Foundation(CNCF) as a Sandbox Level Project.

OpenYurt has been designed to meet various DevOps requirements against typical edge infrastructures. It provides the same user experience for managing the edge applications as if they were running in the cloud infrastructure. It addresses specific challenges for cloud-edge orchestration in Kubernetes such as unreliable or disconnected cloud-edge networking, edge node autonomy, edge device management, region-aware deployment and so on. OpenYurt preserves intact Kubernetes API compatibility, is vendor agnostic, and more importantly, is SIMPLE to use.

Architecture

OpenYurt follows a classic cloud-edge architecture design. It uses a centralized Kubernetes control plane residing in the cloud site to manage multiple edge nodes residing in the edge sites. Each edge node has moderate compute resources available in order to run edge applications plus the required OpenYurt components. The edge nodes in a cluster can span multiple physical regions, which are referred to as Pools in OpenYurt.


The above figure demonstrates the core OpenYurt architecture. The major components consist of:

  • YurtHub: A node daemon that serves as a proxy for the outbound traffic from typical Kubernetes node daemons such as Kubelet, Kubeproxy, CNI plugins and so on. It caches the states of all the API resources that they might access in the edge node's local storage. In case the edge node is disconnected to the cloud, YurtHub can recover the states when the node restarts.
  • Yurt controller manager: It supplements the upstream node controller to support edge computing requirements. For example, Pods in the nodes that are in the autonomy mode will not be evicted from APIServer even if the node heartbeats are missing.
  • Yurt app manager: It manages two CRD resources introduced in OpenYurt: NodePool and YurtAppSet (previous UnitedDeployment). The former provides a convenient management for a pool of nodes within the same region or site. The latter defines a pool based application management workload.
  • Yurt tunnel (server/agent): TunnelServer connects with the TunnelAgent daemon running in each edge node via a reverse proxy to establish a secure network access between the cloud site control plane and the edge nodes that are connected to the intranet.

In addition, OpenYurt also includes auxiliary controllers for integration and customization purposes.

  • Node resource manager: It manages additional edge node resources such as LVM, QuotaPath and Persistent Memory. Please refer to node-resource-manager repo for more details.
  • Integrating EdgeX Foundry platform and uses Kubernetes CRD to manage edge devices!
OpenYurt introduces Yurt-edgex-manager to manage the lifecycle of the EdgeX Foundry software suite, and Yurt-device-controller to manage edge devices hosted by EdgeX Foundry via Kubernetes custom resources. Please refer to the short demo and the respective repos for more details.

Prerequisites

Please check the resource and system requirements before installing OpenYurt.

Getting started

OpenYurt supports Kubernetes versions up to 1.20. Using higher Kubernetes versions may cause compatibility issues.

You can setup the OpenYurt cluster manually, but we recommend to start OpenYurt by using the yurtctl CLI tool. To quickly build and install yurtctl, assuming the build system has golang 1.13+ and bash installed, you can simply do the following:

git clone https://github.com/openyurtio/openyurt.git
cd openyurt
make build WHAT=cmd/yurtctl

The yurtctl binary can be found at _output/bin. The commonly used CLI commands include:

yurtctl convert --provider [minikube|kubeadm|kind]  // To convert an existing Kubernetes cluster to an OpenYurt cluster
yurtctl revert                                      // To uninstall and revert back to the original cluster settings
yurtctl join                                        // To allow a new node to join OpenYurt
yurtctl reset                                       // To revert changes to the node made by the join command

Please check yurtctl tutorial for more details.

Tutorials

To experience the power of OpenYurt, please try the detailed tutorials.

Roadmap

Community

Contributing

If you are willing to be a contributor for the OpenYurt project, please refer to our CONTRIBUTING document for details. We have also prepared a developer guide to help the code contributors.

Meeting

Item Value
APAC Friendly Community meeting Bi-weekly APAC (Starting Sep 2, 2020), Wednesday 11:00AM GMT+8
Meeting link APAC Friendly meeting https://us02web.zoom.us/j/82828315928?pwd=SVVxek01T2Z0SVYraktCcDV4RmZlUT09
Meeting notes Notes and agenda
Meeting recordings OpenYurt bilibili Channel

Contact

If you have any questions or want to contribute, you are welcome to communicate most things via GitHub issues or pull requests. Other active communication channels:

License

OpenYurt is under the Apache 2.0 license. See the LICENSE file for details. Certain implementations in OpenYurt rely on the existing code from Kubernetes and the credits go to the original Kubernetes authors.

About

OpenYurt - Extending your native Kubernetes to edge(project under CNCF)

Resources

License

Code of conduct

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Go 97.8%
  • Shell 2.0%
  • Other 0.2%