Kubernetes, also known as K8s, is a container orchestration tool that allows for the deployment of services and ensures their uptime through high availability, scalability, and disaster recovery. Kubernetes effectively abstracts away the difficulties with managing individual containers, making production deployments much more simple. Production deployments of the ODE are required to be consistently available. Therefore, using K8s to ensure as little downtime as possible is a viable solution. Additional benefits for use with the ODE include the scalability of K8s, allowing implementations to expand services as the demand for access to the ODE increases.
Rather than force management of the k8s cluster on the developer, several technologies exist which allow for the abstraction of the management of the environment that the K8s clusters will be living on. These technologies live in various cloud environments and allow for massively scalable systems to be built. In some cases, greater control of resource allocation can be taken advantage of. Some of the more common instances include Google Kubernetes Engine (GKE), AWS Elastic Container Service for Kubernetes (Amazon EKS), and OpenShift among others.
CDOT is expanding on existing ODE deployments to run within a Kubernetes environment. Current implementations of the ODE are running on a single system. An expanded implementation would be more capable of handling the massive amounts of data traffic CDOT is expecting. The new system is being designed to be massively scalable while allowing a single endpoint exposure for RSUs to direct traffic. This will allow for ease of RSU configurations, while maintaining the security and integrity of the system. Because several systems already exist within the Google Cloud Platform, the CDOT project will rely on GKE to manage this new ODE environment.
Helm is essentially a package manager for Kubernetes, the purpose of which is to package YAML files and make them easy to manage with simple commands. The documentation for Helm can be found here. When running standard kubectl commands with Kubernetes, each individual YAML file must be deployed manually. With Helm, all the YAML files can be deployed or updated with a single command.
- Helm uses a packaging format called charts.
- A chart is a collection of files that describe a related set of Kubernetes resources.
- An example helm chart can be found here.
- The purpose of this module is to encode and decode ASN.1 streams of messages.
- It contains a configuration for a single deployment.
- This file contains a helm tag defining the iteration over the "acm" variable in values.yaml.
- This file also makes use of the following values from values.yaml:
- replicas.jpoode_acm
- resources.services.kafka
- This module utilizes Kafka for message streaming.
- It contains configurations for a service, a pod disruption budget and a stateful set.
- This file makes use of the following values from values.yaml:
- resources.services.kafka
- resources.services.zookeeper
- The ODE is a virtual data router that takes and processes operational data from connected devices and distributes it to other devices.
- It contains configurations for three services and a deployment.
- This file makes use of the following values from values.yaml:
- config.ode.sourceRanges
- config.ode.udp_service.ipAddress
- config.ode.udp_service.exposeExternally
- replicas.jpoode_ode
- images.jpoode_ode.repository
- images.jpoode_ode.tag
- resources.services.kafka
- resources.services.zookeeper
- resources.services.security
- The privacy protection module operates on streams of raw messages generated by the ODE to remove sensitive information.
- It contains a configuration for a single deployment.
- This file contains a helm tag defining the iteration over the "ppm" variable in values.yaml.
- values.yaml file configuration creates two instances, one for BSM messages and one for TIMs.
- This file also makes use of the following values from values.yaml:
- replicas.jpoode_ppm
- images.jpoode_ppm.repository
- images.jpoode_ppm.tag
- resources.services.kafka
- The purpose of this module is to expose a RESTful API for performing cryptographic functions.
- It contains configurations for a service and a deployment.
- This file makes use of the following values from values.yaml:
- replicas.jpoode_sec
- images.jpoode_sec.repository
- images.jpoode_sec.tag
- This module utilizes Zookeeper for service synchronization.
- It contains configurations for a service, a pod disruption budget and a stateful set.
- This file makes use of the following values from values.yaml:
- resources.services.zookeeper
- replicas.jpoode_zookeeper
- This is an example values file for the implementation.
- It contains the following top-level variables:
- project_name
- images
- resources
- replicas
- acm
- ppm
- config