From 1f7f50a606c722db53c7da155ceff51779477678 Mon Sep 17 00:00:00 2001 From: Michael Barroco Date: Wed, 25 Sep 2024 20:10:59 +0200 Subject: [PATCH] [tanka] Consolidate service deployments to new deploy structure (#1111) --- Makefile | 4 +- build/README.md | 9 +- build/db_schemas/README.md | 4 +- build/deploy/README.md | 105 ++---------------- deploy/MIGRATION.md | 2 +- deploy/README.md | 2 +- deploy/architecture.md | 86 +++++++++++++- .../templates/main.jsonnet.tmp | 5 +- deploy/services/tanka/README.md | 9 +- .../services/tanka}/alertmanager.libsonnet | 0 .../services/tanka}/base.libsonnet | 0 .../tanka}/cockroachdb-auxiliary.libsonnet | 0 .../services/tanka}/cockroachdb.libsonnet | 0 .../services/tanka}/core-service.libsonnet | 0 .../services/tanka}/dashboard.libsonnet | 0 .../services/tanka}/dss.libsonnet | 0 .../tanka}/examples/minimum/main.jsonnet | 6 +- .../tanka}/examples/minimum/spec.json | 0 .../examples/schema_manager/main.jsonnet | 6 +- .../tanka}/examples/schema_manager/spec.json | 0 .../services/tanka}/grafana.libsonnet | 0 .../crdb-replica-grafana.json | 0 .../crdb-runtime-grafana.json | 0 .../grafana_dashboards/crdb-sql-grafana.json | 0 .../crdb-storage-grafana.json | 0 .../kubernetes-overview.json | 0 .../prometheus-overview.json | 0 .../services/tanka}/jsonnetfile.json | 0 .../services/tanka}/metadata_base.libsonnet | 0 .../services/tanka}/prometheus.libsonnet | 0 .../crdb-aggregation.libsonnet | 0 .../k8s-endpoints.libsonnet | 0 .../services/tanka}/schema-manager.libsonnet | 0 .../services/tanka}/util.libsonnet | 0 .../services/tanka}/volumes.libsonnet | 0 35 files changed, 121 insertions(+), 117 deletions(-) rename {build/deploy => deploy/services/tanka}/alertmanager.libsonnet (100%) rename {build/deploy => deploy/services/tanka}/base.libsonnet (100%) rename {build/deploy => deploy/services/tanka}/cockroachdb-auxiliary.libsonnet (100%) rename {build/deploy => deploy/services/tanka}/cockroachdb.libsonnet (100%) rename {build/deploy => deploy/services/tanka}/core-service.libsonnet (100%) rename {build/deploy => deploy/services/tanka}/dashboard.libsonnet (100%) rename {build/deploy => deploy/services/tanka}/dss.libsonnet (100%) rename {build/deploy => deploy/services/tanka}/examples/minimum/main.jsonnet (87%) rename {build/deploy => deploy/services/tanka}/examples/minimum/spec.json (100%) rename {build/deploy => deploy/services/tanka}/examples/schema_manager/main.jsonnet (74%) rename {build/deploy => deploy/services/tanka}/examples/schema_manager/spec.json (100%) rename {build/deploy => deploy/services/tanka}/grafana.libsonnet (100%) rename {build/deploy => deploy/services/tanka}/grafana_dashboards/crdb-replica-grafana.json (100%) rename {build/deploy => deploy/services/tanka}/grafana_dashboards/crdb-runtime-grafana.json (100%) rename {build/deploy => deploy/services/tanka}/grafana_dashboards/crdb-sql-grafana.json (100%) rename {build/deploy => deploy/services/tanka}/grafana_dashboards/crdb-storage-grafana.json (100%) rename {build/deploy => deploy/services/tanka}/grafana_dashboards/kubernetes-overview.json (100%) rename {build/deploy => deploy/services/tanka}/grafana_dashboards/prometheus-overview.json (100%) rename {build => deploy/services/tanka}/jsonnetfile.json (100%) rename {build/deploy => deploy/services/tanka}/metadata_base.libsonnet (100%) rename {build/deploy => deploy/services/tanka}/prometheus.libsonnet (100%) rename {build/deploy => deploy/services/tanka}/prometheus_configs/crdb-aggregation.libsonnet (100%) rename {build/deploy => deploy/services/tanka}/prometheus_configs/k8s-endpoints.libsonnet (100%) rename {build/deploy => deploy/services/tanka}/schema-manager.libsonnet (100%) rename {build/deploy => deploy/services/tanka}/util.libsonnet (100%) rename {build/deploy => deploy/services/tanka}/volumes.libsonnet (100%) diff --git a/Makefile b/Makefile index 178c6eafc..4d548f2fe 100644 --- a/Makefile +++ b/Makefile @@ -168,8 +168,8 @@ dss-tests: evaluate-tanka test-go-units test-go-units-crdb build-dss down-locall .PHONY: evaluate-tanka evaluate-tanka: - docker container run -v $(CURDIR)/build/jsonnetfile.json:/build/jsonnetfile.json -v $(CURDIR)/build/deploy:/build/deploy grafana/tanka show --dangerous-allow-redirect /build/deploy/examples/minimum - docker container run -v $(CURDIR)/build/jsonnetfile.json:/build/jsonnetfile.json -v $(CURDIR)/build/deploy:/build/deploy grafana/tanka show --dangerous-allow-redirect /build/deploy/examples/schema_manager + docker container run -v $(CURDIR)/deploy/services/tanka:/deploy/services/tanka grafana/tanka show --dangerous-allow-redirect /deploy/services/tanka/examples/minimum + docker container run -v $(CURDIR)/deploy/services/tanka:/deploy/services/tanka grafana/tanka show --dangerous-allow-redirect /deploy/services/tanka/examples/schema_manager # This reproduces the entire continuous integration workflow (.github/workflows/ci.yml) .PHONY: presubmit diff --git a/build/README.md b/build/README.md index af3d1a187..e45640fbc 100644 --- a/build/README.md +++ b/build/README.md @@ -262,9 +262,14 @@ a PR to that effect would be greatly appreciated. [previous section](#docker-images). 1. From this working directory, - `cp -r deploy/examples/minimum/* workspace/$CLUSTER_CONTEXT`. Note that + `cp -r ../deploy/services/tanka/examples/minimum/* workspace/$CLUSTER_CONTEXT`. Note that the `workspace/$CLUSTER_CONTEXT` folder should have already been created by the `make-certs.py` script. + Replace the imports at the top of `main.jsonnet` to correctly locate the files: + ``` + local dss = import '../../../deploy/services/tanka/dss.libsonnet'; + local metadataBase = import '../../../deploy/services/tanka/metadata_base.libsonnet'; + ``` 1. If providing a .pem file directly as the public key to validate incoming access tokens, copy it to [dss/build/jwt-public-certs](./jwt-public-certs). @@ -561,7 +566,7 @@ existing clusters you will need to: 1. Create `workspace/$CLUSTER_CONTEXT_schema_manager` in this (build) directory. 1. From this (build) working directory, - `cp -r deploy/examples/schema_manager/* workspace/$CLUSTER_CONTEXT_schema_manager`. + `cp -r ../deploy/services/tanka/examples/schema_manager/* workspace/$CLUSTER_CONTEXT_schema_manager`. 1. Edit `workspace/$CLUSTER_CONTEXT_schema_manager/main.jsonnet` and replace all `VAR_*` instances with appropriate values where applicable as explained in the above section. diff --git a/build/db_schemas/README.md b/build/db_schemas/README.md index 5e793e365..b066c9bc3 100644 --- a/build/db_schemas/README.md +++ b/build/db_schemas/README.md @@ -16,8 +16,8 @@ When a new database version is created, it needs to be targeted in a number of places: * Both .sql files in the appropriate folder in db_schemas when setting schema_versions.schema_version -* [DSS main.jsonnet](../deploy/examples/minimum/main.jsonnet) -* [Schema manager main.jsonnet](../deploy/examples/schema_manager/main.jsonnet) +* [DSS main.jsonnet](../../deploy/services/tanka/examples/minimum/main.jsonnet) +* [Schema manager main.jsonnet](../../deploy/services/tanka/examples/schema_manager/main.jsonnet) * /pkg/{rid|scd}/store/cockroach/store.go * /deploy/infrastructure/dependencies/terraform-commons-dss/default_latest.tf * /deploy/services/helm-charts/dss/templates/schema-manager.yaml diff --git a/build/deploy/README.md b/build/deploy/README.md index 1863bf75c..99073b551 100644 --- a/build/deploy/README.md +++ b/build/deploy/README.md @@ -1,99 +1,16 @@ # Kubernetes deployment via Tanka -This folder contains a set of configuration files to be used by -[tanka](https://tanka.dev/install) to deploy a single DSS instance via -Kubernetes following the procedures found in the [build](..) folder. +The documentation and configuration have been moved to [deploy/services](../../deploy/services/tanka). +[Architecture](../../deploy/architecture.md#architecture), [Survivability](../../deploy/architecture.md#survivability) +and [Sizing](../../deploy/architecture.md#sizing) sections have been moved to [deploy/architecture](../../deploy/architecture.md) -## Architecture +## Migrating configurations to new location -The expected deployment configuration of a DSS pool supporting a DSS Region is -multiple organizations to each host one DSS instance that is interoperable with -each other organization's DSS instance. A DSS pool with three participating -organizations (USSs) will have an architecture similar to the diagram below. +The following steps describe how to update your workspace configurations to use the new configuration location. -_**Note** that the diagram shows 2 stateful sets per DSS instance. Currently, the -files in this folder produce 3 stateful sets per DSS instance. However, after -Issue #481 is resolved, this is expected to be reduced to 2 stateful sets._ - -![Pool architecture diagram](../../assets/generated/pool_architecture.png) - -## Survivability - -One of the primary design considerations of the DSS is to be very resilient to -failures. This resiliency is obtained primarily from the behavior of the -underlying CockroachDB database technology and how we configure it. The diagram -below shows the result of failures (bringing a node down for maintenance, or -having an entire USS go down) from different starting points, assuming 3 replicas. - -![Survivability diagram](../../assets/generated/survivability_3x2.svg) - - -The table -below summarizes survivable failures with 3 DSS instances configured according -to the architecture described above. Each system state is summarized by three -groups (one group per USS) of two nodes per USS. - -* 🟩 : Functional node has no recent changes in functionality -* 🟥 : Non-functional node in down USS has no recent changes in functionality -* 🟧 : Non-functional node due to USS upgrade or maintenance has no recent changes in functionality -* 🔴 : Node becomes non-functional due to a USS going down -* 🟠 : Node becomes non-functional due to USS upgrade or maintenance - -| Pre-existing conditions | New failures | Survivable? -| --- | --- | --- -| (🟩 , 🟩 ) (🟩 , 🟩 ) (🟩 , 🟩 ) | (🟩 , 🟩 ) (🟩 , 🟩 ) (🟩 , 🟠 ) | 🟢 Yes -| | (🟩 , 🟩 ) (🟩 , 🟠 ) (🟩 , 🟠 ) | 🔴 No; some ranges may be lost because of [this bug](https://github.com/cockroachdb/cockroach/issues/66159) -| | (🟩 , 🟠 ) (🟩 , 🟠 ) (🟩 , 🟠 ) | 🔴 No; some ranges may be lost -| | (🟩 , 🟩 ) (🟩 , 🟩 ) (🔴 , 🔴 ) | 🟢 Yes -| | (🟩 , 🟩 ) (🔴 , 🔴 ) (🔴 , 🔴 ) | 🔴 No; ranges guaranteed to be lost -| (🟩 , 🟩 ) (🟩 , 🟩 ) (🟩 , 🟧 ) | (🟩 , 🟩 ) (🟩 , 🟠 ) (🟩 , 🟧 ) | 🟢 Yes -| | (🟩 , 🟠 ) (🟩 , 🟠 ) (🟩 , 🟧 ) | 🔴 No; some ranges may be lost because of [this bug](https://github.com/cockroachdb/cockroach/issues/66159) -| | (🟩 , 🟩 ) (🟩 , 🟩 ) (🔴 , 🔴 ) | 🟢 Yes -| | (🟩 , 🟩 ) (🔴 , 🔴 ) (🟩 , 🟧 ) | 🟡 Yes, with 3 replicas -| (🟩 , 🟩 ) (🟩 , 🟧 ) (🟩 , 🟧 ) | (🟩 , 🟠 ) (🟩 , 🟧 ) (🟩 , 🟧 ) | 🟢 Yes -| | (🟩 , 🟩 ) (🟩 , 🟧 ) (🟠 , 🟧 ) | 🟢 Yes -| | (🟩 , 🟩 ) (🟩 , 🟧 ) (🔴 , 🔴 ) | 🟢 Yes -| | (🔴 , 🔴 ) (🟩 , 🟧 ) (🟩 , 🟧 ) | 🟡 Yes, with 3 replicas -| (🟩 , 🟧 ) (🟩 , 🟧 ) (🟩 , 🟧 ) | (🟩 , 🟧 ) (🟩 , 🟧 ) (🟠 , 🟧 ) | 🟡 Yes, with 3 replicas -| | (🟩 , 🟧 ) (🟠 , 🟧 ) (🟠 , 🟧 ) | 🔴 No; ranges guaranteed to be lost -| | (🟠 , 🟧 ) (🟠 , 🟧 ) (🟠 , 🟧 ) | 🔴 No; ranges guaranteed to be lost -| | (🟩 , 🟧 ) (🟩 , 🟧 ) (🔴 , 🔴 ) | 🟡 Yes, with 3 replicas -| (🟩 , 🟩 ) (🟩 , 🟩 ) (🟥 , 🟥 ) | (🟩 , 🟩 ) (🟩 , 🟠 ) (🟥 , 🟥 ) | 🟡 Yes, with 3 replicas -| | (🟩 , 🟠 ) (🟩 , 🟠 ) (🟥 , 🟥 ) | 🔴 No; some ranges may be lost -| | (🟩 , 🟩 ) (🔴 , 🔴 ) (🟥 , 🟥 ) | 🔴 No; some ranges may be lost - -## Sizing - -### Introduction -This section contains an estimate of the computational and other resources -likely necessary to support expected demand in a country similar to the United -States. - -### Time required to fulfill queries for a single flight -1. Assume 1 ISA per flight (worst case) - 1. 2 ISA management queries per flight (create & delete) -1. Assume 90% of flights are nominal and require 3 strategic deconfliction queries (Accepted, Activated, Ended) while 10% of flights have problems and require 7 strategic deconfliction queries - 1. 3.4 strategic deconfliction queries per flight -1. Assume 0.1 seconds to fulfill a query - 1. Therefore, 0.54 seconds required (on average) to fulfill management queries to support a flight - -### Time required to fulfill queries for a RID Display Provider -1. Assume 2 Display Providers viewing each flight on average, 4 subscriptions per flight per DP, and 40% chance of subscription reuse - 1. 9.6 subscription queries per flight - 1. 0.96 seconds required (on average) to fulfill viewing queries to support a flight - -### Required parallelism -1. Use [348,537 remote pilots in 2024](https://www.faa.gov/uas/resources/by_the_numbers/) -1. Assume 100 flights per month per remote pilot -1. Use [989,916 recreational pilots](https://www.faa.gov/data_research/aviation/aerospace_forecasts/media/FY2020-40_faa_aerospace_forecast.pdf) as a baseline (even though this is likely number of aircraft, not number of pilots) and double it for the future -1. Use [7.1 flights per month per recreational pilot](https://www.faa.gov/data_research/aviation/aerospace_forecasts/media/FY2020-40_faa_aerospace_forecast.pdf) -1. Therefore, expect about 18.6 flights per second -1. With 1.5 seconds of query time per flight, a nominal parallelism of 28 is required to satisfy the demand -1. Assuming a peak-average ratio of 3.5, a parallelism of 98 is required - -### Required resources -1. With Cockroach Labs guidance of 4 parallel operations per vCPU, the DSS pool requires 25 vCPUs. -1. Assuming 3 DSS instances and the need to continue to operate when one instance is down, each DSS instance requires 13 vCPUs. -1. Using 8-vCPU virtual machines (like n2-standard-8), this means each instance needs 2 of these virtual machines -1. Assuming that 5 days' worth of flights are occupying space on disk at any given time and that each flight record on disk is 100k, approximately 83 GB of storage is required - 1. Note that Cockroach Labs recommends 4,000 read IO/s and 4,000 write IO/s, and some cloud providers scale storage speed with storage size, so 83 GB of storage may be far less than is necessary to achieve these speed numbers +For tanka only deployments, update imports in your `main.jsonnet` for `dss` and `metadataBase` libraries. +Replace the current paths with: +``` +local dss = import '../../../deploy/services/tanka/dss.libsonnet'; +local metadataBase = import '../../../deploy/services/tanka/metadata_base.libsonnet'; +``` diff --git a/deploy/MIGRATION.md b/deploy/MIGRATION.md index 69cb6e993..17060a3b0 100644 --- a/deploy/MIGRATION.md +++ b/deploy/MIGRATION.md @@ -91,7 +91,7 @@ CockroachDB requires to upgrade one minor version at a time, therefore the follo **Important notes:** -- The migration plan below has been tested with the deployment of services using [Helm](services/helm-charts) and [Tanka](../build/deploy) without Istio enabled. Note that this configuration flag has been decommissioned since [#995](https://github.com/interuss/dss/pull/995). +- The migration plan below has been tested with the deployment of services using [Helm](services/helm-charts) and [Tanka](services/tanka) without Istio enabled. Note that this configuration flag has been decommissioned since [#995](https://github.com/interuss/dss/pull/995). - Further work is required to test and evaluate the availability of the DSS during migrations. - It is highly recommended to rehearse such operation on a test cluster before applying them to a production environment. diff --git a/deploy/README.md b/deploy/README.md index 98101f781..31ee27496 100644 --- a/deploy/README.md +++ b/deploy/README.md @@ -22,7 +22,7 @@ Terraform modules are provided for: 1. [Services](#services) provides the tooling to deploy a DSS instance to a Kubernetes cluster. - [Helm Charts](services/helm-charts/dss) - - [Tanka](../build/deploy) + - [Tanka](services/tanka) 1. [Operations](#operations) provides instructions to operate a deployed DSS instance. - [Pooling procedure](./operations/README.md#pooling-procedure) diff --git a/deploy/architecture.md b/deploy/architecture.md index 23aedc9e9..11380ad6e 100644 --- a/deploy/architecture.md +++ b/deploy/architecture.md @@ -6,7 +6,16 @@ See [introduction](../build/pooling.md#introduction) ## Architecture -See [architecture](../build/deploy/README.md#architecture) +The expected deployment configuration of a DSS pool supporting a DSS Region is +multiple organizations to each host one DSS instance that is interoperable with +each other organization's DSS instance. A DSS pool with three participating +organizations (USSs) will have an architecture similar to the diagram below. + +_**Note** that the diagram shows 2 stateful sets per DSS instance. Currently, the +helm and tanka deployments produce 3 stateful sets per DSS instance. However, after +Issue #481 is resolved, this is expected to be reduced to 2 stateful sets._ + +![Pool architecture diagram](../assets/generated/pool_architecture.png) ### Terminology notes @@ -24,8 +33,79 @@ See [Additional requirements](../build/pooling.md#additional-requirements). ### Survivability -See [survivability](../build/deploy/README.md#survivability). +One of the primary design considerations of the DSS is to be very resilient to +failures. This resiliency is obtained primarily from the behavior of the +underlying CockroachDB database technology and how we configure it. The diagram +below shows the result of failures (bringing a node down for maintenance, or +having an entire USS go down) from different starting points, assuming 3 replicas. + +![Survivability diagram](../assets/generated/survivability_3x2.svg) + +The table below summarizes survivable failures with 3 DSS instances configured according +to the architecture described above. Each system state is summarized by three +groups (one group per USS) of two nodes per USS. + +* 🟩 : Functional node has no recent changes in functionality +* 🟥 : Non-functional node in down USS has no recent changes in functionality +* 🟧 : Non-functional node due to USS upgrade or maintenance has no recent changes in functionality +* 🔴 : Node becomes non-functional due to a USS going down +* 🟠 : Node becomes non-functional due to USS upgrade or maintenance + +| Pre-existing conditions | New failures | Survivable? +| --- | --- | --- +| (🟩 , 🟩 ) (🟩 , 🟩 ) (🟩 , 🟩 ) | (🟩 , 🟩 ) (🟩 , 🟩 ) (🟩 , 🟠 ) | 🟢 Yes +| | (🟩 , 🟩 ) (🟩 , 🟠 ) (🟩 , 🟠 ) | 🔴 No; some ranges may be lost because of [this bug](https://github.com/cockroachdb/cockroach/issues/66159) +| | (🟩 , 🟠 ) (🟩 , 🟠 ) (🟩 , 🟠 ) | 🔴 No; some ranges may be lost +| | (🟩 , 🟩 ) (🟩 , 🟩 ) (🔴 , 🔴 ) | 🟢 Yes +| | (🟩 , 🟩 ) (🔴 , 🔴 ) (🔴 , 🔴 ) | 🔴 No; ranges guaranteed to be lost +| (🟩 , 🟩 ) (🟩 , 🟩 ) (🟩 , 🟧 ) | (🟩 , 🟩 ) (🟩 , 🟠 ) (🟩 , 🟧 ) | 🟢 Yes +| | (🟩 , 🟠 ) (🟩 , 🟠 ) (🟩 , 🟧 ) | 🔴 No; some ranges may be lost because of [this bug](https://github.com/cockroachdb/cockroach/issues/66159) +| | (🟩 , 🟩 ) (🟩 , 🟩 ) (🔴 , 🔴 ) | 🟢 Yes +| | (🟩 , 🟩 ) (🔴 , 🔴 ) (🟩 , 🟧 ) | 🟡 Yes, with 3 replicas +| (🟩 , 🟩 ) (🟩 , 🟧 ) (🟩 , 🟧 ) | (🟩 , 🟠 ) (🟩 , 🟧 ) (🟩 , 🟧 ) | 🟢 Yes +| | (🟩 , 🟩 ) (🟩 , 🟧 ) (🟠 , 🟧 ) | 🟢 Yes +| | (🟩 , 🟩 ) (🟩 , 🟧 ) (🔴 , 🔴 ) | 🟢 Yes +| | (🔴 , 🔴 ) (🟩 , 🟧 ) (🟩 , 🟧 ) | 🟡 Yes, with 3 replicas +| (🟩 , 🟧 ) (🟩 , 🟧 ) (🟩 , 🟧 ) | (🟩 , 🟧 ) (🟩 , 🟧 ) (🟠 , 🟧 ) | 🟡 Yes, with 3 replicas +| | (🟩 , 🟧 ) (🟠 , 🟧 ) (🟠 , 🟧 ) | 🔴 No; ranges guaranteed to be lost +| | (🟠 , 🟧 ) (🟠 , 🟧 ) (🟠 , 🟧 ) | 🔴 No; ranges guaranteed to be lost +| | (🟩 , 🟧 ) (🟩 , 🟧 ) (🔴 , 🔴 ) | 🟡 Yes, with 3 replicas +| (🟩 , 🟩 ) (🟩 , 🟩 ) (🟥 , 🟥 ) | (🟩 , 🟩 ) (🟩 , 🟠 ) (🟥 , 🟥 ) | 🟡 Yes, with 3 replicas +| | (🟩 , 🟠 ) (🟩 , 🟠 ) (🟥 , 🟥 ) | 🔴 No; some ranges may be lost +| | (🟩 , 🟩 ) (🔴 , 🔴 ) (🟥 , 🟥 ) | 🔴 No; some ranges may be lost ### Sizing -See [sizing](../build/deploy/README.md#sizing). +#### Introduction +This section contains an estimate of the computational and other resources +likely necessary to support expected demand in a country similar to the United +States. + +#### Time required to fulfill queries for a single flight +1. Assume 1 ISA per flight (worst case) + 1. 2 ISA management queries per flight (create & delete) +1. Assume 90% of flights are nominal and require 3 strategic deconfliction queries (Accepted, Activated, Ended) while 10% of flights have problems and require 7 strategic deconfliction queries + 1. 3.4 strategic deconfliction queries per flight +1. Assume 0.1 seconds to fulfill a query + 1. Therefore, 0.54 seconds required (on average) to fulfill management queries to support a flight + +#### Time required to fulfill queries for a RID Display Provider +1. Assume 2 Display Providers viewing each flight on average, 4 subscriptions per flight per DP, and 40% chance of subscription reuse + 1. 9.6 subscription queries per flight + 1. 0.96 seconds required (on average) to fulfill viewing queries to support a flight + +#### Required parallelism +1. Use [348,537 remote pilots in 2024](https://www.faa.gov/uas/resources/by_the_numbers/) +1. Assume 100 flights per month per remote pilot +1. Use [989,916 recreational pilots](https://www.faa.gov/data_research/aviation/aerospace_forecasts/media/FY2020-40_faa_aerospace_forecast.pdf) as a baseline (even though this is likely number of aircraft, not number of pilots) and double it for the future +1. Use [7.1 flights per month per recreational pilot](https://www.faa.gov/data_research/aviation/aerospace_forecasts/media/FY2020-40_faa_aerospace_forecast.pdf) +1. Therefore, expect about 18.6 flights per second +1. With 1.5 seconds of query time per flight, a nominal parallelism of 28 is required to satisfy the demand +1. Assuming a peak-average ratio of 3.5, a parallelism of 98 is required + +#### Required resources +1. With Cockroach Labs guidance of 4 parallel operations per vCPU, the DSS pool requires 25 vCPUs. +1. Assuming 3 DSS instances and the need to continue to operate when one instance is down, each DSS instance requires 13 vCPUs. +1. Using 8-vCPU virtual machines (like n2-standard-8), this means each instance needs 2 of these virtual machines +1. Assuming that 5 days' worth of flights are occupying space on disk at any given time and that each flight record on disk is 100k, approximately 83 GB of storage is required + 1. Note that Cockroach Labs recommends 4,000 read IO/s and 4,000 write IO/s, and some cloud providers scale storage speed with storage size, so 83 GB of storage may be far less than is necessary to achieve these speed numbers diff --git a/deploy/infrastructure/dependencies/terraform-commons-dss/templates/main.jsonnet.tmp b/deploy/infrastructure/dependencies/terraform-commons-dss/templates/main.jsonnet.tmp index 0f9d0e150..85c093ed6 100644 --- a/deploy/infrastructure/dependencies/terraform-commons-dss/templates/main.jsonnet.tmp +++ b/deploy/infrastructure/dependencies/terraform-commons-dss/templates/main.jsonnet.tmp @@ -1,8 +1,7 @@ // This file was automatically generated by terraform-commons-dss. // Do not edit it directly. - -local dss = import '../../deploy/dss.libsonnet'; -local metadataBase = import '../../deploy/metadata_base.libsonnet'; +local dss = import '../../../deploy/services/tanka/dss.libsonnet'; +local metadataBase = import '../../../deploy/services/tanka/metadata_base.libsonnet'; // All VAR_* values below must be replaced with appropriate values; see // dss/build/README.md for more information. diff --git a/deploy/services/tanka/README.md b/deploy/services/tanka/README.md index 35e376f2a..66946a3ff 100644 --- a/deploy/services/tanka/README.md +++ b/deploy/services/tanka/README.md @@ -1,6 +1,5 @@ -# Tanka - -See [Tanka](../../../build/deploy/README.md#kubernetes-deployment-via-tanka) -and the [legacy deployment procedure](../../../build/README.md#deploying-a-dss-instance-via-kubernetes) - +# Kubernetes deployment via Tanka +This folder contains a set of configuration files to be used by +[tanka](https://tanka.dev/install) to deploy a single DSS instance via +Kubernetes following the procedures found in the [build](../../../build) folder. diff --git a/build/deploy/alertmanager.libsonnet b/deploy/services/tanka/alertmanager.libsonnet similarity index 100% rename from build/deploy/alertmanager.libsonnet rename to deploy/services/tanka/alertmanager.libsonnet diff --git a/build/deploy/base.libsonnet b/deploy/services/tanka/base.libsonnet similarity index 100% rename from build/deploy/base.libsonnet rename to deploy/services/tanka/base.libsonnet diff --git a/build/deploy/cockroachdb-auxiliary.libsonnet b/deploy/services/tanka/cockroachdb-auxiliary.libsonnet similarity index 100% rename from build/deploy/cockroachdb-auxiliary.libsonnet rename to deploy/services/tanka/cockroachdb-auxiliary.libsonnet diff --git a/build/deploy/cockroachdb.libsonnet b/deploy/services/tanka/cockroachdb.libsonnet similarity index 100% rename from build/deploy/cockroachdb.libsonnet rename to deploy/services/tanka/cockroachdb.libsonnet diff --git a/build/deploy/core-service.libsonnet b/deploy/services/tanka/core-service.libsonnet similarity index 100% rename from build/deploy/core-service.libsonnet rename to deploy/services/tanka/core-service.libsonnet diff --git a/build/deploy/dashboard.libsonnet b/deploy/services/tanka/dashboard.libsonnet similarity index 100% rename from build/deploy/dashboard.libsonnet rename to deploy/services/tanka/dashboard.libsonnet diff --git a/build/deploy/dss.libsonnet b/deploy/services/tanka/dss.libsonnet similarity index 100% rename from build/deploy/dss.libsonnet rename to deploy/services/tanka/dss.libsonnet diff --git a/build/deploy/examples/minimum/main.jsonnet b/deploy/services/tanka/examples/minimum/main.jsonnet similarity index 87% rename from build/deploy/examples/minimum/main.jsonnet rename to deploy/services/tanka/examples/minimum/main.jsonnet index e63da6c25..6110279e4 100644 --- a/build/deploy/examples/minimum/main.jsonnet +++ b/deploy/services/tanka/examples/minimum/main.jsonnet @@ -1,5 +1,7 @@ -local dss = import '../../../deploy/dss.libsonnet'; -local metadataBase = import '../../../deploy/metadata_base.libsonnet'; + +# The path used in imports below must be updated to point to /deploy/services/tanka/ +local dss = import '../dss.libsonnet'; +local metadataBase = import '../metadata_base.libsonnet'; // All VAR_* values below must be replaced with appropriate values; see // dss/build/README.md for more information. diff --git a/build/deploy/examples/minimum/spec.json b/deploy/services/tanka/examples/minimum/spec.json similarity index 100% rename from build/deploy/examples/minimum/spec.json rename to deploy/services/tanka/examples/minimum/spec.json diff --git a/build/deploy/examples/schema_manager/main.jsonnet b/deploy/services/tanka/examples/schema_manager/main.jsonnet similarity index 74% rename from build/deploy/examples/schema_manager/main.jsonnet rename to deploy/services/tanka/examples/schema_manager/main.jsonnet index 2649cc241..1f02b7ee7 100644 --- a/build/deploy/examples/schema_manager/main.jsonnet +++ b/deploy/services/tanka/examples/schema_manager/main.jsonnet @@ -1,5 +1,7 @@ -local schemaManager = import '../../../deploy/schema-manager.libsonnet'; -local metadataBase = import '../../../deploy/metadata_base.libsonnet'; +# The path used in imports below must be updated to point to /deploy/services/tanka/ + +local schemaManager = import '../schema-manager.libsonnet'; +local metadataBase = import '../metadata_base.libsonnet'; // All VAR_* values below must be replaced with appropriate values; see // dss/build/README.md for more information. diff --git a/build/deploy/examples/schema_manager/spec.json b/deploy/services/tanka/examples/schema_manager/spec.json similarity index 100% rename from build/deploy/examples/schema_manager/spec.json rename to deploy/services/tanka/examples/schema_manager/spec.json diff --git a/build/deploy/grafana.libsonnet b/deploy/services/tanka/grafana.libsonnet similarity index 100% rename from build/deploy/grafana.libsonnet rename to deploy/services/tanka/grafana.libsonnet diff --git a/build/deploy/grafana_dashboards/crdb-replica-grafana.json b/deploy/services/tanka/grafana_dashboards/crdb-replica-grafana.json similarity index 100% rename from build/deploy/grafana_dashboards/crdb-replica-grafana.json rename to deploy/services/tanka/grafana_dashboards/crdb-replica-grafana.json diff --git a/build/deploy/grafana_dashboards/crdb-runtime-grafana.json b/deploy/services/tanka/grafana_dashboards/crdb-runtime-grafana.json similarity index 100% rename from build/deploy/grafana_dashboards/crdb-runtime-grafana.json rename to deploy/services/tanka/grafana_dashboards/crdb-runtime-grafana.json diff --git a/build/deploy/grafana_dashboards/crdb-sql-grafana.json b/deploy/services/tanka/grafana_dashboards/crdb-sql-grafana.json similarity index 100% rename from build/deploy/grafana_dashboards/crdb-sql-grafana.json rename to deploy/services/tanka/grafana_dashboards/crdb-sql-grafana.json diff --git a/build/deploy/grafana_dashboards/crdb-storage-grafana.json b/deploy/services/tanka/grafana_dashboards/crdb-storage-grafana.json similarity index 100% rename from build/deploy/grafana_dashboards/crdb-storage-grafana.json rename to deploy/services/tanka/grafana_dashboards/crdb-storage-grafana.json diff --git a/build/deploy/grafana_dashboards/kubernetes-overview.json b/deploy/services/tanka/grafana_dashboards/kubernetes-overview.json similarity index 100% rename from build/deploy/grafana_dashboards/kubernetes-overview.json rename to deploy/services/tanka/grafana_dashboards/kubernetes-overview.json diff --git a/build/deploy/grafana_dashboards/prometheus-overview.json b/deploy/services/tanka/grafana_dashboards/prometheus-overview.json similarity index 100% rename from build/deploy/grafana_dashboards/prometheus-overview.json rename to deploy/services/tanka/grafana_dashboards/prometheus-overview.json diff --git a/build/jsonnetfile.json b/deploy/services/tanka/jsonnetfile.json similarity index 100% rename from build/jsonnetfile.json rename to deploy/services/tanka/jsonnetfile.json diff --git a/build/deploy/metadata_base.libsonnet b/deploy/services/tanka/metadata_base.libsonnet similarity index 100% rename from build/deploy/metadata_base.libsonnet rename to deploy/services/tanka/metadata_base.libsonnet diff --git a/build/deploy/prometheus.libsonnet b/deploy/services/tanka/prometheus.libsonnet similarity index 100% rename from build/deploy/prometheus.libsonnet rename to deploy/services/tanka/prometheus.libsonnet diff --git a/build/deploy/prometheus_configs/crdb-aggregation.libsonnet b/deploy/services/tanka/prometheus_configs/crdb-aggregation.libsonnet similarity index 100% rename from build/deploy/prometheus_configs/crdb-aggregation.libsonnet rename to deploy/services/tanka/prometheus_configs/crdb-aggregation.libsonnet diff --git a/build/deploy/prometheus_configs/k8s-endpoints.libsonnet b/deploy/services/tanka/prometheus_configs/k8s-endpoints.libsonnet similarity index 100% rename from build/deploy/prometheus_configs/k8s-endpoints.libsonnet rename to deploy/services/tanka/prometheus_configs/k8s-endpoints.libsonnet diff --git a/build/deploy/schema-manager.libsonnet b/deploy/services/tanka/schema-manager.libsonnet similarity index 100% rename from build/deploy/schema-manager.libsonnet rename to deploy/services/tanka/schema-manager.libsonnet diff --git a/build/deploy/util.libsonnet b/deploy/services/tanka/util.libsonnet similarity index 100% rename from build/deploy/util.libsonnet rename to deploy/services/tanka/util.libsonnet diff --git a/build/deploy/volumes.libsonnet b/deploy/services/tanka/volumes.libsonnet similarity index 100% rename from build/deploy/volumes.libsonnet rename to deploy/services/tanka/volumes.libsonnet