• Stars
    star
    440
  • Rank 95,883 (Top 2 %)
  • Language
    Go
  • License
    Apache License 2.0
  • Created about 6 years ago
  • Updated 9 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Forecastle is a control panel which dynamically discovers and provides a launchpad to access applications deployed on Kubernetes – [✩Star] if you're using it!

Forecastle Forecastle

Get started with Stakater

Problem(s)

  • We would like to have a central place where we can easily look for and access our applications running on Kubernetes.
  • We would like to have a tool which can dynamically discover and list the apps running on Kubernetes.
  • A launchpad to access developer tools e.g. Jenkins, Nexus, Kibana, Grafana, etc.

Solution

Forecastle gives you access to a control panel where you can see your running applications and access them on Kubernetes.

Screenshot

Deploying to Kubernetes

You can deploy Forecastle both using vanilla k8s manifests or helm charts.

Vanilla Manifests

Step 1: You can apply vanilla manifests by running the following command

kubectl apply -f https://raw.githubusercontent.com/stakater/Forecastle/master/deployments/kubernetes/forecastle.yaml

Step 2: Update configmap

In the Forecastle configmap modify the namespaceSelector key with a list of namespaces which you want Forecastle to watch. Refer to this for instructions.

And enjoy!

Helm Charts

If you configured helm on your cluster, you can deploy Forecastle via helm chart located under deployments/kubernetes/chart/Forecastle folder.

Configuration

Ingresses

Forecastle looks for a specific annotations on ingresses.

  • Add the following annotations to your ingresses in order to be discovered by forecastle:
Annotation Description Required
forecastle.stakater.com/expose Add this with value true to the ingress of the app you want to show in Forecastle true
forecastle.stakater.com/icon Icon/Image URL of the application; An icons/logos/images collection repo Icons false
forecastle.stakater.com/appName A custom name for your application. Use if you don't want to use name of the ingress false
forecastle.stakater.com/group A custom group name. Use if you want the application to show in a different group than the namespace it is running in false
forecastle.stakater.com/instance A comma separated list of name/s of the forecastle instance/s where you want this application to appear. Use when you have multiple forecastle dashboards false
forecastle.stakater.com/url A URL for the forecastle app (This will override the ingress URL). It MUST begin with a scheme i.e., http:// or https:// false
forecastle.stakater.com/properties A comma separate list of key:value pairs for the properties. This will appear as an expandable list for the app false
forecastle.stakater.com/network-restricted Specify whether the app is network restricted or not (true or false) false

Forecastle

Forecastle supports the following configuration options that can be modified by either ConfigMap or values.yaml if you are using helm

Field Description Default Type
namespaceSelector A fine grained namespace selector which uses a combination of hardcoded namespaces well as label selectors any: true NamespaceSelector
headerBackground Background color of the header (Specified in the CSS way) null string
headerForeground Foreground color of the header (Specified in the CSS way) null string
title Title for the forecastle dashboard "Forecastle - Stakater" string
instanceName Name of the forecastle instance "" string
customApps A list of custom apps that you would like to add to the forecastle instance {} []CustomApp
crdEnabled Enables or disables ForecastleApp CRD true bool

NamespaceSelector

It is a selector for selecting namespaces either selecting all namespaces or a list of namespaces, or filtering namespaces through labels.

Field Description Default Type
any Boolean describing whether all namespaces are selected in contrast to a list restricting them false bool
labelSelector Filter namespaces based on kubernetes metav1.LabelSelector type null metav1.LabelSelector
matchNames List of namespace names null []string

Note: If you specify both labelSelector and matchNames, forecastle will take a union of all namespaces matched and use them.

Custom Apps

If you want to add any apps that are not exposed through ingresses or are external to the cluster, you can use the custom apps feature. You can pass an array of custom apps inside the config.

Field Description Type
name Name of the custom app String
icon URL of the icon for the custom app String
url URL of the custom app String
group Group for the custom app String
properties Additional Properties of the app as a map map[string]string
networkRestricted Whether app is network restricted or not bool

ForecastleApp CRD

You can now create custom resources to add apps to forecastle dynamically. This decouples the application configuration from Ingresses as well as forecastle config. You can create the custom resource ForecastleApp like the following:

apiVersion: forecastle.stakater.com/v1alpha1
kind: ForecastleApp
metadata:
  name: app-name
spec:
  name: My Awesome App
  group: dev
  icon: https://icon-url
  url: http://app-url
  networkRestricted: "false"
  properties:
    Version: 1.0
  instance: "" # Optional
Automatically discover URL's from Kubernetes Resources

Forecastle supports discovering URL's ForecastleApp CRD from the following resources:

  • Ingress

The above type of resource that you want to discover URL from MUST exist in the same namespace as ForecastleApp CR. Then you can add the following to the CR:

apiVersion: forecastle.stakater.com/v1alpha1
kind: ForecastleApp
metadata:
  name: app-name
spec:
  name: My Awesome App
  group: dev
  icon: https://icon-url
  urlFrom: # This is new
    ingressRef:
      name: my-app-ingress

The above CR will be picked up by forecastle and it will generate the App in the UI. This lets you bundle this custom resource with the app's helm chart which will make it a part of the deployment process.

Note: You have to enable CRD feature first if you have disabled it. You can do that by applying the CRD and specifying crdEnabled: true in forecastle config. If you're using the helm chart then CRDs are installed with the chart.

Example Config

An example of a config can be seen below

namespaceSelector:
  labelSelector:
    matchLabels:
      component: redis
    matchExpressions:
      - {key: tier, operator: In, values: [cache]}
  matchNames:
  - test
title:
headerBackground:
headerForeground: "#ffffff"
instanceName: "Hello"
crdEnabled: false
customApps:
- name: Hello
  icon: http://hello
  url: http://helloicon
  group: Test
  properties:
    Version: 1.0

Features

  • List apps found in all namespaces listed in the configmap
  • Search apps
  • Grouped apps per namespace
  • Configurable header (Title and colors)
  • Multiple instance support
  • Provide Custom apps
  • CRD ForecastleApp for adding custom apps
  • Custom groups and URLs for the apps
  • Details per app

Running multiple instances of forecastle

You can run multiple instances of forecastle by just deploying them in a different namespace and provided a list of namespaces to look for ingresses.

However, if you want flexibility over which applications to show in a specific instance regardless of the namespace, then you need to first configure forecastle instances to be a named instances. You can do that by setting instanceName in forecastle configuration.

Once you have the named instances, you can add forecastle.stakater.com/instance annotation to your ingresses to control which application will show in which instance of forecastle.

You can also specify multiple instances of forecastle for the same ingress so that it shows up in multiple dashboards. For example, you have 2 instances running named dev-dashboard and prod-dashboard. You can add this in the ingress's instance annotation dev-dashboard,prod-dashboard and the ingress will come up in both dashboards.

When using Helm make sure you set a unique nameOverride (default forecastle) in the values to prevent conflicts between global resources (ClusterRole & ClusterRoleBinding).

Help

Got a question? File a GitHub issue.

Talk to us on Slack

Join and talk to us on the #tools-imc channel for discussing Forecastle

Join Slack Chat

Contributing

Bug Reports & Feature Requests

Please use the issue tracker to report any bugs or file feature requests.

Developing

PRs are welcome. In general, we follow the "fork-and-pull" Git workflow.

  1. Fork the repo on GitHub
  2. Clone the project to your own machine
  3. Commit changes to your own branch
  4. Push your work back up to your fork
  5. Submit a Pull request so that we can review your changes

NOTE: Be sure to merge the latest from "upstream" before making a pull request!

Changelog

View our closed Pull Requests.

License

Apache2 © Stakater

About

Why name Forecastle

Forecastle is the section of the upper deck of a ship located at the bow forward of the foremast. This Forecastle will act as a control panel and show all your running applications on Kubernetes having a particular annotation.

Forecastle is maintained by Stakater. Like it? Please let us know at [email protected]

See our other projects or contact us in case of professional services and queries on [email protected]

More Repositories

1

Reloader

A Kubernetes controller to watch changes in ConfigMap and Secrets and do rolling upgrades on Pods with their associated Deployment, StatefulSet, DaemonSet and DeploymentConfig – [✩Star] if you're using it!
Go
6,539
star
2

IngressMonitorController

A Kubernetes controller to watch ingresses and create liveness alerts for your apps/microservices in UptimeRobot, StatusCake, Pingdom, etc. – [✩Star] if you're using it!
Go
479
star
3

GitWebhookProxy

A proxy to let webhooks reach running services behind a firewall – [✩Star] if you're using it!
Go
182
star
4

application

Generic helm chart for all kind of applications
Starlark
156
star
5

Konfigurator

A kubernetes operator that dynamically generates and manages app configuration based on kubernetes resources – [✩Star] if you're using it!
Go
90
star
6

ProxyInjector

A Kubernetes controller to inject an authentication proxy container to relevant pods - [✩Star] if you're using it!
Go
85
star
7

developer-handbook

A developer handbook!
JavaScript
81
star
8

til

📝 Today I Learned
80
star
9

Chowkidar

A kubernetes controller that watches/observes events & then takes configured actions – [✩Star] if you're using it!
Go
55
star
10

Jamadar

A kubernetes controller which cleans up cluster left-overs – [✩Star] if you're using it!
Go
45
star
11

Xposer

A Kubernetes controller to manage (create/update/delete) Kubernetes Ingresses based on the Service - [✩Star] if you are using it!
Go
31
star
12

microservices-testing

how to test microservices based applications? Moved to: https://github.com/stakater/developer-handbook
26
star
13

tbd-cd-workflow

trunk based development continuous delivery workflow; Moved to: https://github.com/stakater/developer-handbook
18
star
14

aws-terraform-recipes

aws-terraform-recipes
HCL
17
star
15

slack-operator

Kubernetes operator for Slack
Go
17
star
16

Playbook

Stakater playbook and documentation!
Dockerfile
15
star
17

stakater-pipeline-library

A repo for managing pipelines for Jenkins
Groovy
15
star
18

Whitelister

A tool to white list node and developer IPs for kubernetes.
Go
14
star
19

StakaterPlatform

Stakater platform provides out of the box stacks to control, monitor, log, trace and security for applications deployed on kubernetes using CI/CD pipelines.
Shell
14
star
20

jira-service-desk-operator

Kubernetes operator for Jira Service Desk
Go
13
star
21

blueprint-network-aws

Stakater Blueprint for creating best-practices network on AWS. Stakater is an Infrastructure-as-Code DevOps solution to automate the creation of web infrastructure stack on AWS. Stakater is based on Docker, CoreOS, Terraform, Packer, Docker Compose, GoCD, Fleet, ETCD, and more.
HCL
13
star
22

ami-baker

Build custom AMI (Amazon Machine Image) on top of CoreOS
Shell
11
star
23

StakaterNordmart

A repo to deploy nordmart microservices
Shell
11
star
24

Scaler

A tool to modify auto scaling groups.
Go
10
star
25

stakater-charts

Public helm charts of opensource apps
9
star
26

infrastructure-reference

Reference infrastructure for Stakater blueprints. Stakater is an Infrastructure-as-Code DevOps solution to automate the creation of web infrastructure stack on AWS. Stakater is based on Docker, CoreOS, Terraform, Packer, Docker Compose, GoCD, Fleet, ETCD, and more.
Shell
8
star
27

docker-images

Docker Images
Dockerfile
7
star
28

nordmart-apps-gitops-config

Tenant's namespace scoped apps are deployed via this gitops config repository
7
star
29

kops-cluster-templates

A set of templates to create different kubernetes clusters using kops.
Shell
6
star
30

blueprint-storage-aws

Stakater Blueprint for creating best-practices based storage on AWS. Stakater is an Infrastructure-as-Code DevOps solution to automate the creation of web infrastructure stack on AWS. Stakater is based on Docker, CoreOS, Terraform, Packer, Docker Compose, GoCD, Fleet, ETCD, and more.
HCL
6
star
31

employee-handbook

Handbook for Stakater Employees
Dockerfile
5
star
32

terraform-azure-openshift

OpenShift on Azure with Terraform!
HCL
5
star
33

blueprint-utilities-aws

Stakater Blueprint for small utility modules on AWS. Stakater is an Infrastructure-as-Code DevOps solution to automate the creation of web infrastructure stack on AWS. Stakater is based on Docker, CoreOS, Terraform, Packer, Docker Compose, GoCD, Fleet, ETCD, and more.
HCL
5
star
34

ForecastleIcons

Collection of icons which can be referenced in Forecastle
4
star
35

tekton-catalog

Collection of Tekton Tasks
Starlark
3
star
36

StakaterCloudDocs

Stakater Cloud Documentation
JavaScript
3
star
37

charts

Stakater OpenSource Helm Charts
Smarty
3
star
38

house-keeper

start & stop AWS servers | night watcher | night savings
Shell
3
star
39

multiple-ingress-controllers

multiple nginx ingress controllers running on kubernetes on AWS
Shell
3
star
40

dockerfile-kafka-with-consul-template

Dockerfile of Kafka with consul template
Shell
3
star
41

dockerfile-logrotate

Dockerized Logrotate
2
star
42

operator-utils

Utility library to support operators
Go
2
star
43

openshift-infra-gitops-example

An example gitops repo for openshift internal infrastructure
Jinja
2
star
44

continuous-integration-deployment

what is continuous integration? what is continuous delivery? what is continuous deployment? what is release strategy?
2
star
45

blueprint-static-site-aws

A repo for creating a static web site deployment stack using aws s3 bucket, route53, and cloudfront
HCL
2
star
46

terraform-module-postgres

postgres setup on Amazon AWS using Terraform and Ansible
HCL
2
star
47

dockerfile-pipeline-tools

Image containing all the tools required for pipelines
Dockerfile
2
star
48

dockerfile-maven-jenkins

Dockerfile for Maven with Jenkins user, for Jenkins Slave
Dockerfile
2
star
49

terraform-module-github

Terraform modules for github used for setting up a GitHub organization
HCL
2
star
50

go-cd

Go CD template
Shell
2
star
51

dockerfile-nexus

Docker image for Sonatype Nexus
Shell
2
star
52

dockerfile-nginx-with-consul-template

dockerfile of nginx with consul template
Shell
2
star
53

ztp-pipeline-toolbox

ztp-pipeline-toolbox
Dockerfile
2
star
54

grafana-cloud-ansible-operator

Grafana cloud operator
Makefile
2
star
55

dockerfile-logstash-with-consul-template

Dockerfile of Logstash with consul template
Shell
2
star
56

stakater-devops-labs

The Lab for the DevOps Workshop with Kubernetes and Containers
Java
2
star
57

dockerfile-maven-centos

CentOS 7 --> Java 1.8 --> Maven 3.5.4
Dockerfile
2
star
58

blueprint-instance-pool-aws

Stakater Blueprint for creating best-practices based instance pool on AWS. Stakater is an Infrastructure-as-Code DevOps solution to automate the creation of web infrastructure stack on AWS. Stakater is based on Docker, CoreOS, Terraform, Packer, Docker Compose, GoCD, Fleet, ETCD, and more.
HCL
2
star
59

terraform-aws-certificate

Certificate Generation for AWS(route 53) hosted domain using Terraform!
HCL
2
star
60

prod-deployment-reference

Stakater sub-module for infrastructure-reference and a practical reference implementation of Production deployment using custom AMI. Stakater is an Infrastructure-as-Code DevOps solution to automate the creation of web infrastructure stack on AWS, based on Docker, Terraform, and more.
HCL
2
star
61

StakaterDeliveryStack

A Stack to Setup Release(CI/CD) Apps on Kubernetes Cluster via Helm Charts i.e. Jenkins, Nexus, Chartmuseum etc.
Groovy
1
star
62

vocabulary

Stakater Vocabulary
1
star
63

pipeline-library

Libraries, utils and tools required by stakater pipelines
Shell
1
star
64

git-set-commit-status

Set commit status
Python
1
star
65

dockerfile-elasticsearch

Dockerfile for Elasticsearch
Shell
1
star
66

dockerfile-grails3

Docker File for grails 3
1
star
67

operator-template

Template project for operators
Go
1
star
68

infrastructure-app-units

systemd unit files for infrastructure applications
1
star
69

java-test-app-ci-and-versioning

Spring based Test app for CI and versioning
Java
1
star
70

dockerfile-awscli

Dockerfile for AWS CLI
1
star
71

openshift4-ansible

Setup Openshift4 via ansible
Jinja
1
star
72

stakater-reference-app-java

reference app for stakater
Java
1
star
73

dockerfile-logstash

Dockerfile of Logstash
Shell
1
star
74

dockerfile-jenkins

dockerfile for jenkins
Shell
1
star
75

terraform-module-gitlab

Terraform modules for gitlab used for setting up a GitLab Organization
HCL
1
star
76

workshop-operator

A Kubernetes Operator to install the infrastructure for running workshops/bootcamps on OpenShift.
Go
1
star
77

roadmap

roadmap of stakater
1
star
78

secrets-management

how to manage secrets?
1
star
79

coreos-and-consul-cluster-via-terraform

coreos-and-consul-cluster-via-terraform
HCL
1
star
80

dockerfile-filebeat-with-consul-template

dockerfile of filebeat with consul template
Shell
1
star
81

mto-docs

Multi Tenant Operator (MTO) Documentation
HTML
1
star
82

resume-renderer

Custom renderer for Stakater resumes
TypeScript
1
star
83

coreos-vagrant-with-consul-elk

CoreOS Cluster on Vagrant with ELK Stack and Service Registration & Discovery through Consul
Ruby
1
star
84

mysql-backup-glacier

Python
1
star
85

dockerfile-java

Java dockerfiles
1
star
86

cloud-exits

A collection of cloud exit stories
1
star
87

blueprint-solo-instance-aws

Blueprint for creating best-practices based solo instance on AWS
HCL
1
star
88

stakater-tekton-chart

Jumbo chart for creating pipeline manifests
Smarty
1
star