/lambdastack-1

Production proven Kubernetes automation with industrial hardening.

Primary LanguagePythonApache License 2.0Apache-2.0

LambdaStack

GitHub release Github license

Overview

IMPORTANT - The latest version of LambdaStack is based on Epiphany, which I created in 2018, and being used by high-profile industries that require cross platform scalability and resiliency. There are a few areas and diagrams using the text Epiphany instead of LambdaStack for backwards compatibility (note - any broken links or diagrams due to this fork will be corrected). Going forward, LambdaStack will be addressing many industries and not just industrial Energy. Actually, LFEnergy (Linux Foundation Energy) should look at Epiphany as their standard going forward. The team I created at Hitachi Energy for Epiphany is very good.

LambdaStack at its core is a full automation of Kubernetes and Docker plus additional builtin services/components like:

  • Kafka or RabbitMQ for high speed messaging/events
  • Prometheus and Alertmanager for monitoring with Graphana for visualization
  • Elasticsearch and Kibana for centralized logging (OpenDistro)
  • HAProxy for loadbalancing
  • Postgres and Elasticsearch for data storage
  • KeyCloak for authentication
  • Vault (MVP) for protecting secrets and other sensitive data
  • Helm as package manager for Kubernetes

The following target platforms are available: AWS, Azure and on-prem installation.

LambdaStack can run on as few as one node (laptop, desktop, server) but the real value comes from running 3 or more nodes for scale and HA. Everything is data driven so simply changing the manifest data and running the automation will modify the environment. Kubernetes hosts (masters, nodes) and component VMs can be added depending on data in the initial manifest. More information here.

Please note that currently LambdaStack supports only creating new masters and nodes and adding them to the Kubernetes cluster. It doesn't support downscale. To remove them from Kubernetes cluster you have to do it manually.

We currently use Terraform and Ansible for our automation orchestration. All automation is idempotent so you can run it as many times as you wish and it will maintain the same state unless you change the data. If someone makes a "snow flake" change to the environment (you should never do this) then simply running the automation again will put the environment back to the desired state.

Note about documentation

  • The documentation is a moving target. Always check the latest documentation on the develop branch. There is a big chance that whatever you are looking for is already added/updated or improved there.

Quickstart

LambdaStack

Use the following command to see a full run-down of all commands and flags: (need to launch the LambdaStack docker image - it will drop you into the 'shared' $PWD directory and you can then call lambdastack like below)

cd /<whatever directory you want the docker image to mount to>
docker run -it -v $PWD:/shared --rm lambdastack/lambdastack:latest

Note - $PWD means whatever directory you may be in. Once you're done simply type exit and it will exit the docker image. The data will be left in a build directory inside of the given $PWD.

lambdastack --help

Generate a new minimum cluster definition:

lambdastack init -p aws -n demo

This minimum file definition is fine to start with, if you need more control over the infrastructure created you can also create a full definition:

lambdastack init -p aws -n demo --full

You will need to modify a few values (like your AWS secrets, directory path for SSH keys). Once you are done with demo.yml you can start cluster deployment by executing:

lambdastack apply -f demo.yml

You will be asked for a password that will be used for encryption of some of build artifacts. More information here

Since version 0.7 lambdastack has an option to backup/recovery some of its components. More information here

lambdastack backup -f <file.yml> -b <build_folder>
lambdastack recovery -f <file.yml> -b <build_folder>

To delete all deployed components following command should be used

lambdastack delete -b <build_folder>

Find more information using table of contents below - especially the How-to guides.

Documentation