Skip to main content

Install the Control Tower

1. Prepare Environment Variables

Click the tabs below to see what fields are required based on your setup.

1.1. Prepare required fields

Field NameSecret NameDescription
fc_api_keyFC_API_KEYYour Flightcrew API key is a unique, private key that can be found after signing up in your Flightcrew account. The same key should be used for all Control Towers.

1.2. Prepare infrastructure fields

Field NameSecret NameDescription
cluster_namen/aThe name of your Kubernetes cluster, which can be found by using aws eks list-clusters. If you are using an external observability provider, ensure that this name matches what you've entered there.
cloud_providern/aUse provider:aws/platform:eks

1.3. Prepare observability fields

Field NameSecret NameDescription
metric_providersn/aUse datadog
datadog_api_keyDD_API_KEYAPI key created in the Datadog setup steps
datadog_app_keyDD_APP_KEYApplication key created in the Datadog setup steps

The Helm chart requires some values to be set to reach Flightcrew's backend and your metric provider. Some of these are potentially sensitive API keys, so we recommend storing them in your Secret Manager and creating a Kubernetes Secret object to reference the values. The Helm chart can then access this existing secret using the --set existingSecretName="flightcrew-secrets-name" option. Reference the Secret Name column in the required environment variables above to figure out which should be used in the data field, like this:

Otherwise, it is possible to enter the values into the Helm chart as plaintext and it will create a Secret object automatically, but this is the less secure option.

apiVersion: v1
kind: Secret
metadata:
name: fc-tokens
namespace: flightcrew
type: Opaque
data:
FC_API_KEY: <base64-encoded-API-key>
# other secrets as mentioned in part 1 above
...

3. Install the Control Tower

The Control Tower Helm chart provides an additional field --set userLabels.<label>=<value> to add custom labels to the Control Tower deployment. For example, to add the env=prod label, add --set userLabels.env=prod to the command.

Install the Helm chart via the commandline using plaintext values.

# Get the Helm chart
helm repo add flightcrew https://flightcrew-helm-charts.storage.googleapis.com/control-tower/stable
helm repo update

When providing values to the Helm chart, please refer to the "Field Name" column from the environment variable sections above. You'll pass values in by adding --set "<field_name>=<value>" to the command.

# Construct the command
helm install control-tower flightcrew/control-tower \
--namespace flightcrew --create-namespace \
--set "<field_name1>=<value1>" \
--set "<field_name2>=<value2>"

Here's an example for EKS and Datadog:

helm repo add flightcrew https://flightcrew-helm-charts.storage.googleapis.com/control-tower/stable
helm repo update
helm install control-tower flightcrew/control-tower \
--namespace flightcrew --create-namespace \
--set cluster_name=my-prod-cluster \
--set cloud_provider=provider:aws/platform:eks \
--set metric_providers="datadog" \
--set datadog_api_key="api_key" \
--set datadog_app_key="app_key"

4. Confirm Install

After a minute or two, your Kubernetes resources and metrics should begin to populate in the Flightcrew dashboard.

Flightcrew will take a few hours to build a full understanding of your cloud infrastructure and begin surfacing insights. Recommendations will continue to improve with time after gathering more and more data.

Click into the dashboard to follow your progress in real-time.

Flightcrew dashboard onboarding spinners

Troubleshooting

CrashLoopBackOff

The Control Tower will fail loudly if it's misconfigured or cannot reach the APIs it needs. Run the following command to check the error logs:

kubectl logs deployment/control-tower --namespace flightcrew --previous --tail=20

Feel free to send the error logs to the Flightcrew team on Slack or support@flightcrew.io for help debugging.

Out of Memory

Resource usage will vary slightly depending on the size of the cluster. Memory usage very rarely exceeds 500Mi, but if the pod is hitting its memory limit and getting OOMKilled, the resources can be increased by updating fields on the Helm chart, for example:

helm upgrade control-tower flightcrew/control-tower --namespace flightcrew --reuse-values \
--set resources.limits.memory="2000Mi" \
--set resources.requests.memory="1000Mi"

Please still reach out to support@flightcrew.io if this happens, so we can take a closer look as something else may be going wrong.