The Aarna Networks Multi-Cluster Orchestration Platform (AMCOP) is an open-source orchestration, lifecycle management, closed-loop automation platform for 5G network services and edge computing applications.
AMCOP consists of:
● Linux Foundation Edge Multi-Cluster Orchestrator (EMCO) for intent-based orchestration and Day-0 configuration
● Linux Foundation Open Network Automation Platform (ONAP) components such as CDS for Day 1 & 2 configuration and LCM
● Select ONAP components for analytics and closed-loop automation
● Numerous CNCF and related projects (Istio, Prometheus, FluentD, Jaeger…)
● Proprietary value adds such as 5G network slicing, O-RAN NONRTRIC, NWDAF
In this blog, we will talk specifically about the deployment of AMCOP. AMCOP is a full cloud-native application that can be deployed on a Kubernetes (K8s) environment. In general, the various deployment options for a cloud-native application are:
● Using Kubectl command line when there is a yaml file
● Using Ansible scripts that allows automation of these deployments
● Using Helm charts
● Using Operators and Custom Resource
With version 2.0 and earlier of AMCOP, it used to be deployed using Helm Charts and Ansible scripts.
The challenges with earlier methods of cloud deployment of AMCOP were:
● The scheme was static and not capable of dealing with complex setups.
● Life Cycle Management (LCM) with Helm charts and Ansible was not fully automated and required manual intervention.
● While deploying, it was not possible to store the state of deployment for retrieving it later or for restoration.
● The upgrade process was difficult and manual.
With AMCOP 2.1, we have switched to a Kubernetes Operator. What is a Kubernetes Operator?
A Kubernetes operator is a method of packaging, deploying, and managing a Kubernetes application. The Operator has a Controller and Custom Resources. It provides a single package that one can deploy to the K8s cluster and that package will take care of the entire LCM of the application being deployed. Thus an Operator creates, configures, and manages instances of complex applications. Its Controller has the current state and details of the desired state. It monitors the current state and ensures that the application is always in the desired state. It can manage Stateful Set, Config Map, Services, and the different Pods. Once it is deployed the Operator will continue to monitor the application. One can automate the Operator to take backup of the data and if there are failures then it can take care of the recovery process. The Operator can auto-upgrade the application when a newer version is available. The Operator also does not require full security privileges, as it uses a limited set of resources and shared resources.
Advantages of deployment of cloud-native applications using Operators are:
● Integration with various solutions
● Helm is supported
● Can be deployed on Openshift clusters
● Ansible Playbook can be integrated for doing various tasks
● Reduces engineering cost and makes maintenance much easier
Operators are purpose-built and are not generic to work with any application. While building the Operator for a specific application, one needs to have knowledge of how the application works, what services it is creating, etc. Thus the Operator is more tailored to the specific needs of the application. One can do complex automation using the Operator.
Specifically, the features of the AMCOP Operator are:
● Kubernetes Controller built using Operator SDK
● Built-in logic to address Life Cycle Management requirements of AMCOP
● Unified handling of Life Cycle Management for AMCOP
● Functionalities of Helm, Juju Charms, Ansible, and Operator LCM
The AMCOP Operator has a container image, which contains all the logic for deploying the Operator. To initiate this, a yaml file is provided for deploying the Operator on the cluster. Tags are used for downloading various images. There are yaml files for EMCO microservices. Once the Operator is deployed, it can be enabled to allocate all the resources, create the necessary service account, trigger a requirement, and finally, deploy the K8s Pods.
To see the deployment process please follow the steps in the video.