Skip to content

Commit

Permalink
Adding initial content
Browse files Browse the repository at this point in the history
  • Loading branch information
davidcollom committed May 31, 2024
1 parent 56ced97 commit aa295b3
Show file tree
Hide file tree
Showing 14 changed files with 199 additions and 6 deletions.
3 changes: 3 additions & 0 deletions content/architecture.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# The OpenStack Architecture

![Architecture Diagram of FinOpsStack](assets/architecture.png)
Binary file added content/assets/architecture.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 2 additions & 0 deletions content/credit.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,5 @@ this page serves as a homage back to the maintainers and contributors of these t

- [Prometheus](https://prometheus.io)
- [Grafana](https://grafana.com/grafana/)
- [MkDocs Material](https://squidfunk.github.io/mkdocs-material/)
- Inspiration from [Backstack](https://backstack.dev/)
23 changes: 20 additions & 3 deletions content/install.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,26 @@
# Installation
---
title: Quickstart
---

## Installation

This will include instructions on how to deploy the stack
along with customization and configuration for different environments

## Helm
### Helm

First we need to add our Chart Repository:

```shell
helm repo add jetstack https://charts.jetstack.io
```

Next we can begin installed the FinOps Stack:

```shell
helm install finops-stack -n finops-stack --create-namespace
```

### Kustomize

## Kustomize
_TBC_
43 changes: 42 additions & 1 deletion content/intro.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,45 @@
---
title: Documentation
name: Documentation
---

## Streamline Finops Engineering

In today's dynamic financial landscape, organisations face the constant challenge of managing and optimising their financial operations effectively. The rapid evolution of cloud computing, coupled with the increasing complexity of financial data, necessitates a robust solution that not only integrates various financial tools but also provides a holistic view of spending and optimisation in real-time. This is where FinOpsStack comes in.

## Overview

FinOpsStack is a comprehensive, turnkey solution designed to revolutionise financial operations (FinOps) by integrating a suite of applications into a unified platform. Our goal is to empower organisations with the tools they need to manage, visualise, and optimise their financial resources in a fast-paced and ever-changing environment. FinOpsStack leverages advanced technologies to deliver real-time insights, enabling teams to make informed decisions swiftly and efficiently.

## Key Features and Capabilities

### Unified Financial Dashboard

FinOpsStack offers a single, intuitive dashboard that aggregates financial data from various sources. This centralised view provides a comprehensive snapshot of the organisation's financial health, facilitating easy monitoring and management.

### Real-time Spend Visualisation

Understanding where and how resources are being utilised is crucial for effective financial management. FinOpsStack provides real-time visualisation tools that display spending patterns, highlighting key areas of expenditure and potential cost-saving opportunities.

### Advanced Analytics and Reporting

FinOpsStack incorporates powerful analytics engines that process financial data to generate detailed reports. These insights help teams identify trends, forecast future expenses, and make data-driven decisions to optimise financial performance.

### Automated Optimisation Suggestions

To streamline financial operations, FinOpsStack offers automated optimisation recommendations. By analysing spending data, the platform suggests actionable steps to reduce costs and improve efficiency, ensuring resources are allocated where they are needed most.

### Scalability and Flexibility

Designed to adapt to the evolving needs of organisations, FinOpsStack is highly scalable and flexible. Whether a small business or a large enterprise, the platform can be customised to fit specific requirements, growing alongside the organisation.

### Seamless Integration

FinOpsStack seamlessly integrates with existing financial tools and systems, eliminating the need for disruptive overhauls. This ensures a smooth transition and minimal downtime, allowing teams to quickly adopt and benefit from the platform.

## Achieving Operational Excellence

The core objective of FinOpsStack is to enhance operational efficiency and financial transparency. By providing a fast and effective means to visualise spending and optimise financial operations, the platform helps teams understand their financial landscape within minutes. This rapid insight enables proactive management, reducing the time and effort required to identify and address financial issues.

## Empowering Teams with Knowledge

FinOpsStack is designed with the end-user in mind. Its user-friendly interface and comprehensive documentation ensure that teams can quickly learn and leverage the platform's capabilities. Training modules and support services are available to assist users in navigating the system and maximising its potential.
72 changes: 72 additions & 0 deletions content/selection.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
# Selection

There are an increasing number of paid-for solutions which offer partial or complete FinOps tooling.
However, there is much less maturity and choice in the open source space (for example, review the FinOps Landscape filtered by open source tools).
In some cases, tooling may have a free tier, but not be open source.

This Project aims to bring together an opinionated, easy-to-install collection of open-source tools that automate FinOps best practices within Kubernetes.
This tooling is Kubernetes-specific, and cloud provider agnostic.

## Factors when selecting tooling

Where possible, we aim to adopt existing, well-maintained open source tools. We prefer choosing open-source tools, as opposed to free-tier, as these are more universally available to the community without restriction. Where these do not exist, or where we believe there is more benefit available, we will consider building custom tooling.

Because we aim to make this tooling available under an Apache license, we prefer tooling without more restrictive license that would affect future use of the stack.

### Scope

This tooling is Kubernetes-specific, and cloud provider agnostic. This means that Kubernetes-related resources (e.g. Persistent Disks, Virtual Machines) are in-scope, whereas wider Cloud resources, and tooling that is cloud provider specific, is out-of-scope.

As this project is Kubernetes-specific, all tooling must be able to be installed and run within a Kubernetes cluster. This means that tooling run at other stages of the SLDC/CICD processes is out of scope.

### Who this project is for

This project is aimed at engineering teams that are aiming to automate FinOps best practices within Kubernetes using open source tooling. In FinOps terms, we would call this the [Engineering persona](https://www.finops.org/framework/personas/).

### What are the FinOps challenges this persona is trying to solve?

We believe that the key areas that the Engineering persona is trying to solve are:

- Monitoring
- Gathering metrics/cost data
- Visualizing this data to teams and stakeholders
- Multi-Cloud cost data
- Alerting
- Anomaly management
- Automation of best practices such as:
- Right-sizing/workload optimization
- Providing sensible defaults
- Forecasting (how much will x cost(if…))?
- Rate reduction
- Cost avoidance

## What open-source tooling is available to solve these problems

### Summary of tooling choices

**Monitoring**: [[Allocation](https://www.finops.org/framework/capabilities/allocation/), [Reporting and Analytics](https://www.finops.org/framework/capabilities/reporting-analytics/) ]

- [OpenCost](https://www.opencost.io/) (with Prometheus and Grafana)
- Gap: What about reporting?

**Alerting**: [[Anomaly Management](https://www.finops.org/framework/capabilities/anomaly-management/)]

- Prometheus/Alertmanager (with custom prometheus rules?)

**Automation and tooling**:

- Admission control and policy enforcement: Kyverno (and custom tooling to add LimitRange per namespace) [[Cloud Policy & Governance](https://www.finops.org/framework/capabilities/cloud-policy-governance/), [Workload Optimization](https://www.finops.org/framework/capabilities/workload-optimization/)]
- Rate optimization: Gap: Recommendations. Custom required for spot. No recommendation tooling available (see [section](https://docs.google.com/document/d/1W1RRj6BsZ4LejqlXBW4-zGMz9-YfRRJ9jDW9Nc6QgzU/edit#heading=h.7z86k0chd71)).
- Workload optimization:
- Cost avoidance:

### Whats Missing

#### Problems that we are not (yet) solving in this stack

- Recommendation engine for rate-reduction and cost avoidance
- Reporting
- Normalization of cost data across clouds (could explore [https://focus.finops.org/](https://focus.finops.org/) in the future)
- Calculation of unit economics
- Recommendations for rate optimization/cost avoidance
- Forecasting
8 changes: 6 additions & 2 deletions mkdocs.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,12 @@ extra:

nav:
- Home: index.md
- Docs: intro.md
- Install: install.md
- Documentation:
- intro.md
- Install: install.md
- Architecture: architecture.md
- Selection: selection.md
- credit.md

extra_css:
- stylesheets/extra.css
Expand Down
1 change: 1 addition & 0 deletions requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -11,3 +11,4 @@ pymdown-extensions==10.5
readtime==3.0.0
paginate==0.5.6
mkdocs-git-revision-date-localized-plugin
diagrams==0.23.4
53 changes: 53 additions & 0 deletions scripts/architecture.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
#!/usr/bin/env python
from diagrams import Cluster, Diagram, Edge
import os
from diagrams.onprem.monitoring import Prometheus, Grafana
from diagrams.onprem.client import Users
from diagrams.custom import Custom

from diagrams.k8s.compute import Deploy
from diagrams.k8s.others import CRD
from diagrams.generic.place import Datacenter

with Diagram("Architecture",
filename="../content/assets/architecture",
outformat="png",
show=False,
direction="TB"):

users = Users("Users")

with Cluster("Cluster"):
with Cluster("[ns] finops-stack"):
prom = Prometheus("Prometheus")
graf = Grafana("Grafana")
kyverno = Custom("Kyverno", os.getcwd()+"/resources/kyverno.png")
finops_policies = CRD("Finops Policies")
opencost = Custom("Opencost", os.getcwd() +
"/resources/opencost.png")

vpatron = Deploy("vpatron")
officehours = Deploy("office hours")
limitranger = Deploy("limit ranger")
autospot = Deploy("autospot")

# Hack to get more in the same cluster
vpatron - Edge(color="transparent") - officehours
limitranger - Edge(color="transparent") - autospot

for i in range(0, 0):
with Cluster(f"[ns] Application {i}"):
Deploy(f"Application {i}")

aws = Custom("AWS", os.getcwd()+'/resources/aws.png')
azure = Custom("Azure", os.getcwd()+'/resources/azure.png')
gcp = Custom("GCP", os.getcwd()+'/resources/google-cloud.png')
onprem = Datacenter("On-Prem")

users >> graf
graf >> prom
kyverno << Edge(style="dashed") << finops_policies
prom >> opencost

for i in [aws, azure, gcp, onprem]:
opencost << Edge(label="Cost Data", style='dotted') << i
Binary file added scripts/resources/aws.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added scripts/resources/azure.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added scripts/resources/google-cloud.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added scripts/resources/kyverno.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added scripts/resources/opencost.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit aa295b3

Please sign in to comment.