From fc97e24d6778d9cc333a8d3eb42eabfcede87dd5 Mon Sep 17 00:00:00 2001 From: Daniel Scholl Date: Tue, 27 Aug 2024 08:01:53 -0500 Subject: [PATCH 01/10] Reorder sequence. --- software/applications/osdu-core/file.yaml | 3 +++ software/applications/osdu-core/indexer.yaml | 10 ++++++++-- software/applications/osdu-core/legal.yaml | 3 +++ software/applications/osdu-core/storage.yaml | 3 +++ 4 files changed, 17 insertions(+), 2 deletions(-) diff --git a/software/applications/osdu-core/file.yaml b/software/applications/osdu-core/file.yaml index 7f66f07b..ea89e2e6 100644 --- a/software/applications/osdu-core/file.yaml +++ b/software/applications/osdu-core/file.yaml @@ -7,6 +7,9 @@ metadata: annotations: clusterconfig.azure.com/use-managed-source: "true" spec: + dependsOn: + - name: osdu-developer-base-core + namespace: default targetNamespace: osdu-core chart: spec: diff --git a/software/applications/osdu-core/indexer.yaml b/software/applications/osdu-core/indexer.yaml index 93aedb66..d54b7c91 100644 --- a/software/applications/osdu-core/indexer.yaml +++ b/software/applications/osdu-core/indexer.yaml @@ -7,6 +7,10 @@ metadata: annotations: clusterconfig.azure.com/use-managed-source: "true" spec: + dependsOn: + - name: osdu-developer-base-core + namespace: default + targetNamespace: osdu-core chart: spec: chart: ./charts/osdu-developer-service @@ -19,7 +23,6 @@ spec: install: remediation: retries: 3 - targetNamespace: osdu-core valuesFrom: - kind: ConfigMap name: configmap-software @@ -147,6 +150,10 @@ metadata: annotations: clusterconfig.azure.com/use-managed-source: "true" spec: + dependsOn: + - name: osdu-developer-base-core + namespace: default + targetNamespace: osdu-core chart: spec: chart: ./charts/osdu-developer-service @@ -159,7 +166,6 @@ spec: install: remediation: retries: 3 - targetNamespace: osdu-core valuesFrom: - kind: ConfigMap name: configmap-software diff --git a/software/applications/osdu-core/legal.yaml b/software/applications/osdu-core/legal.yaml index eb78c3bd..5b545acf 100644 --- a/software/applications/osdu-core/legal.yaml +++ b/software/applications/osdu-core/legal.yaml @@ -7,6 +7,9 @@ metadata: annotations: clusterconfig.azure.com/use-managed-source: "true" spec: + dependsOn: + - name: osdu-developer-base-core + namespace: default targetNamespace: osdu-core chart: spec: diff --git a/software/applications/osdu-core/storage.yaml b/software/applications/osdu-core/storage.yaml index 5d2dab7c..528e8077 100644 --- a/software/applications/osdu-core/storage.yaml +++ b/software/applications/osdu-core/storage.yaml @@ -7,6 +7,9 @@ metadata: annotations: clusterconfig.azure.com/use-managed-source: "true" spec: + dependsOn: + - name: osdu-partition + namespace: osdu-core chart: spec: chart: ./charts/osdu-developer-service From b95dae71135169f146d79b0bdb53da69ac6335b6 Mon Sep 17 00:00:00 2001 From: Daniel Scholl Date: Tue, 27 Aug 2024 08:24:45 -0500 Subject: [PATCH 02/10] Reorder sequence. --- bicep/modules/aks_cluster.bicep | 4 ++-- software/applications/osdu-core/entitlements.yaml | 2 +- software/applications/osdu-core/file.yaml | 4 ++-- software/applications/osdu-core/indexer.yaml | 8 ++++---- software/applications/osdu-core/legal.yaml | 4 ++-- software/applications/osdu-core/search.yaml | 3 +++ software/applications/osdu-core/storage.yaml | 2 +- 7 files changed, 15 insertions(+), 12 deletions(-) diff --git a/bicep/modules/aks_cluster.bicep b/bicep/modules/aks_cluster.bicep index c3fb1cc2..81f0f889 100644 --- a/bicep/modules/aks_cluster.bicep +++ b/bicep/modules/aks_cluster.bicep @@ -396,7 +396,7 @@ var userPoolPresets = { // 4 vCPU, 16 GiB RAM, 32 GiB Temp Disk, (3600) IOPS, 128 GB Managed OS Disk Burstable : { vmSize: 'Standard_B4ms' - minCount: 3 + minCount: 4 maxCount: 20 availabilityZones: [ '1' @@ -410,7 +410,7 @@ var userPoolPresets = { // 4 vCPU, 32 GiB RAM, 64 GiB SSD, (8000) IOPS, 128 GB Managed OS Disk Standard : { vmSize: 'Standard_D4s_v5' - minCount: 3 + minCount: 4 maxCount: 20 availabilityZones: [ '1' diff --git a/software/applications/osdu-core/entitlements.yaml b/software/applications/osdu-core/entitlements.yaml index fe36e471..97d11a33 100644 --- a/software/applications/osdu-core/entitlements.yaml +++ b/software/applications/osdu-core/entitlements.yaml @@ -8,7 +8,7 @@ metadata: clusterconfig.azure.com/use-managed-source: "true" spec: dependsOn: - - name: osdu-partition + - name: osdu-init-partition namespace: osdu-core targetNamespace: osdu-core chart: diff --git a/software/applications/osdu-core/file.yaml b/software/applications/osdu-core/file.yaml index ea89e2e6..14f714a3 100644 --- a/software/applications/osdu-core/file.yaml +++ b/software/applications/osdu-core/file.yaml @@ -8,8 +8,8 @@ metadata: clusterconfig.azure.com/use-managed-source: "true" spec: dependsOn: - - name: osdu-developer-base-core - namespace: default + - name: osdu-init-partition + namespace: osdu-core targetNamespace: osdu-core chart: spec: diff --git a/software/applications/osdu-core/indexer.yaml b/software/applications/osdu-core/indexer.yaml index d54b7c91..77e9a4d2 100644 --- a/software/applications/osdu-core/indexer.yaml +++ b/software/applications/osdu-core/indexer.yaml @@ -8,8 +8,8 @@ metadata: clusterconfig.azure.com/use-managed-source: "true" spec: dependsOn: - - name: osdu-developer-base-core - namespace: default + - name: osdu-init-partition + namespace: osdu-core targetNamespace: osdu-core chart: spec: @@ -151,8 +151,8 @@ metadata: clusterconfig.azure.com/use-managed-source: "true" spec: dependsOn: - - name: osdu-developer-base-core - namespace: default + - name: osdu-init-partition + namespace: osdu-core targetNamespace: osdu-core chart: spec: diff --git a/software/applications/osdu-core/legal.yaml b/software/applications/osdu-core/legal.yaml index 5b545acf..9a782aef 100644 --- a/software/applications/osdu-core/legal.yaml +++ b/software/applications/osdu-core/legal.yaml @@ -8,8 +8,8 @@ metadata: clusterconfig.azure.com/use-managed-source: "true" spec: dependsOn: - - name: osdu-developer-base-core - namespace: default + - name: osdu-init-partition + namespace: osdu-core targetNamespace: osdu-core chart: spec: diff --git a/software/applications/osdu-core/search.yaml b/software/applications/osdu-core/search.yaml index 885ee3ba..5b11e836 100644 --- a/software/applications/osdu-core/search.yaml +++ b/software/applications/osdu-core/search.yaml @@ -7,6 +7,9 @@ metadata: annotations: clusterconfig.azure.com/use-managed-source: "true" spec: + dependsOn: + - name: osdu-init-partition + namespace: osdu-core targetNamespace: osdu-core chart: spec: diff --git a/software/applications/osdu-core/storage.yaml b/software/applications/osdu-core/storage.yaml index 528e8077..46fc143b 100644 --- a/software/applications/osdu-core/storage.yaml +++ b/software/applications/osdu-core/storage.yaml @@ -8,7 +8,7 @@ metadata: clusterconfig.azure.com/use-managed-source: "true" spec: dependsOn: - - name: osdu-partition + - name: osdu-init-partition namespace: osdu-core chart: spec: From 86475a6ec24fca714104fe3258406e7a89c2d40e Mon Sep 17 00:00:00 2001 From: Daniel Scholl Date: Tue, 27 Aug 2024 09:09:28 -0500 Subject: [PATCH 03/10] Reorder sequence. --- software/applications/osdu-core/README.md | 9 +++++---- software/applications/osdu-core/file.yaml | 2 +- software/applications/osdu-core/indexer.yaml | 4 ++-- software/applications/osdu-core/legal.yaml | 2 +- software/applications/osdu-core/search.yaml | 2 +- software/applications/osdu-core/storage.yaml | 2 +- 6 files changed, 11 insertions(+), 10 deletions(-) diff --git a/software/applications/osdu-core/README.md b/software/applications/osdu-core/README.md index d62970c7..3c4b180b 100644 --- a/software/applications/osdu-core/README.md +++ b/software/applications/osdu-core/README.md @@ -22,15 +22,16 @@ flowchart TD partition-->partition_init entitlements-->entitlements_init partition_init-->entitlements_init - entitlements_init-->legal + entitlements_init-->user_init + entitlements-->legal legal-->indexer legal-->indexer_queue - entitlements_init-->user_init + indexer-->schema indexer_queue-->schema schema-->schema_init schema-->storage schema-->file - storage-->search - file-->search + schema-->search + schema-->search ``` \ No newline at end of file diff --git a/software/applications/osdu-core/file.yaml b/software/applications/osdu-core/file.yaml index 14f714a3..e1fcc1ab 100644 --- a/software/applications/osdu-core/file.yaml +++ b/software/applications/osdu-core/file.yaml @@ -8,7 +8,7 @@ metadata: clusterconfig.azure.com/use-managed-source: "true" spec: dependsOn: - - name: osdu-init-partition + - name: osdu-schema namespace: osdu-core targetNamespace: osdu-core chart: diff --git a/software/applications/osdu-core/indexer.yaml b/software/applications/osdu-core/indexer.yaml index 77e9a4d2..3a5bcb9c 100644 --- a/software/applications/osdu-core/indexer.yaml +++ b/software/applications/osdu-core/indexer.yaml @@ -8,7 +8,7 @@ metadata: clusterconfig.azure.com/use-managed-source: "true" spec: dependsOn: - - name: osdu-init-partition + - name: legal namespace: osdu-core targetNamespace: osdu-core chart: @@ -145,7 +145,7 @@ spec: apiVersion: helm.toolkit.fluxcd.io/v2beta1 kind: HelmRelease metadata: - name: osdu-indexer-queue + name: legal namespace: osdu-core annotations: clusterconfig.azure.com/use-managed-source: "true" diff --git a/software/applications/osdu-core/legal.yaml b/software/applications/osdu-core/legal.yaml index 9a782aef..686cbf25 100644 --- a/software/applications/osdu-core/legal.yaml +++ b/software/applications/osdu-core/legal.yaml @@ -8,7 +8,7 @@ metadata: clusterconfig.azure.com/use-managed-source: "true" spec: dependsOn: - - name: osdu-init-partition + - name: entitlements namespace: osdu-core targetNamespace: osdu-core chart: diff --git a/software/applications/osdu-core/search.yaml b/software/applications/osdu-core/search.yaml index 5b11e836..d7ed0f0b 100644 --- a/software/applications/osdu-core/search.yaml +++ b/software/applications/osdu-core/search.yaml @@ -8,7 +8,7 @@ metadata: clusterconfig.azure.com/use-managed-source: "true" spec: dependsOn: - - name: osdu-init-partition + - name: osdu-schema namespace: osdu-core targetNamespace: osdu-core chart: diff --git a/software/applications/osdu-core/storage.yaml b/software/applications/osdu-core/storage.yaml index 46fc143b..029478fa 100644 --- a/software/applications/osdu-core/storage.yaml +++ b/software/applications/osdu-core/storage.yaml @@ -8,7 +8,7 @@ metadata: clusterconfig.azure.com/use-managed-source: "true" spec: dependsOn: - - name: osdu-init-partition + - name: osdu-schema namespace: osdu-core chart: spec: From b875fad83c1f07055fb7f1426b3e8403f0f7517d Mon Sep 17 00:00:00 2001 From: Daniel Scholl Date: Tue, 27 Aug 2024 09:18:57 -0500 Subject: [PATCH 04/10] Reorder sequence. --- software/applications/osdu-core/README.md | 2 -- software/applications/osdu-core/indexer.yaml | 6 +++--- software/applications/osdu-core/legal.yaml | 2 +- 3 files changed, 4 insertions(+), 6 deletions(-) diff --git a/software/applications/osdu-core/README.md b/software/applications/osdu-core/README.md index 3c4b180b..ec9cd547 100644 --- a/software/applications/osdu-core/README.md +++ b/software/applications/osdu-core/README.md @@ -26,12 +26,10 @@ flowchart TD entitlements-->legal legal-->indexer legal-->indexer_queue - indexer-->schema indexer_queue-->schema schema-->schema_init schema-->storage schema-->file schema-->search - schema-->search ``` \ No newline at end of file diff --git a/software/applications/osdu-core/indexer.yaml b/software/applications/osdu-core/indexer.yaml index 3a5bcb9c..a3c544d7 100644 --- a/software/applications/osdu-core/indexer.yaml +++ b/software/applications/osdu-core/indexer.yaml @@ -8,7 +8,7 @@ metadata: clusterconfig.azure.com/use-managed-source: "true" spec: dependsOn: - - name: legal + - name: osdu-legal namespace: osdu-core targetNamespace: osdu-core chart: @@ -145,13 +145,13 @@ spec: apiVersion: helm.toolkit.fluxcd.io/v2beta1 kind: HelmRelease metadata: - name: legal + name: osdu-indexer-queue namespace: osdu-core annotations: clusterconfig.azure.com/use-managed-source: "true" spec: dependsOn: - - name: osdu-init-partition + - name: osdu-legal namespace: osdu-core targetNamespace: osdu-core chart: diff --git a/software/applications/osdu-core/legal.yaml b/software/applications/osdu-core/legal.yaml index 686cbf25..b8064396 100644 --- a/software/applications/osdu-core/legal.yaml +++ b/software/applications/osdu-core/legal.yaml @@ -8,7 +8,7 @@ metadata: clusterconfig.azure.com/use-managed-source: "true" spec: dependsOn: - - name: entitlements + - name: osdu-entitlements namespace: osdu-core targetNamespace: osdu-core chart: From 7467bce015a521b94955a583d93aa8e4516063b6 Mon Sep 17 00:00:00 2001 From: Daniel Scholl Date: Tue, 27 Aug 2024 09:33:42 -0500 Subject: [PATCH 05/10] Reorder sequence. --- software/applications/osdu-core/README.md | 12 +++++------- software/applications/osdu-core/entitlements.yaml | 2 +- software/applications/osdu-core/file.yaml | 2 +- software/applications/osdu-core/legal.yaml | 2 +- software/applications/osdu-core/search.yaml | 2 +- software/applications/osdu-core/storage.yaml | 2 +- 6 files changed, 10 insertions(+), 12 deletions(-) diff --git a/software/applications/osdu-core/README.md b/software/applications/osdu-core/README.md index ec9cd547..9ba930d2 100644 --- a/software/applications/osdu-core/README.md +++ b/software/applications/osdu-core/README.md @@ -21,15 +21,13 @@ flowchart TD partition-->entitlements partition-->partition_init entitlements-->entitlements_init - partition_init-->entitlements_init entitlements_init-->user_init - entitlements-->legal + partition-->legal legal-->indexer legal-->indexer_queue - indexer-->schema - indexer_queue-->schema + legal-->schema schema-->schema_init - schema-->storage - schema-->file - schema-->search + indexer_queue-->storage + indexer_queue-->file + indexer_queue-->search ``` \ No newline at end of file diff --git a/software/applications/osdu-core/entitlements.yaml b/software/applications/osdu-core/entitlements.yaml index 97d11a33..fe36e471 100644 --- a/software/applications/osdu-core/entitlements.yaml +++ b/software/applications/osdu-core/entitlements.yaml @@ -8,7 +8,7 @@ metadata: clusterconfig.azure.com/use-managed-source: "true" spec: dependsOn: - - name: osdu-init-partition + - name: osdu-partition namespace: osdu-core targetNamespace: osdu-core chart: diff --git a/software/applications/osdu-core/file.yaml b/software/applications/osdu-core/file.yaml index e1fcc1ab..cf5229d4 100644 --- a/software/applications/osdu-core/file.yaml +++ b/software/applications/osdu-core/file.yaml @@ -8,7 +8,7 @@ metadata: clusterconfig.azure.com/use-managed-source: "true" spec: dependsOn: - - name: osdu-schema + - name: osdu-indexer-queue namespace: osdu-core targetNamespace: osdu-core chart: diff --git a/software/applications/osdu-core/legal.yaml b/software/applications/osdu-core/legal.yaml index b8064396..d1e46741 100644 --- a/software/applications/osdu-core/legal.yaml +++ b/software/applications/osdu-core/legal.yaml @@ -8,7 +8,7 @@ metadata: clusterconfig.azure.com/use-managed-source: "true" spec: dependsOn: - - name: osdu-entitlements + - name: osdu-partition namespace: osdu-core targetNamespace: osdu-core chart: diff --git a/software/applications/osdu-core/search.yaml b/software/applications/osdu-core/search.yaml index d7ed0f0b..be1fa8af 100644 --- a/software/applications/osdu-core/search.yaml +++ b/software/applications/osdu-core/search.yaml @@ -8,7 +8,7 @@ metadata: clusterconfig.azure.com/use-managed-source: "true" spec: dependsOn: - - name: osdu-schema + - name: osdu-indexer-queue namespace: osdu-core targetNamespace: osdu-core chart: diff --git a/software/applications/osdu-core/storage.yaml b/software/applications/osdu-core/storage.yaml index 029478fa..6572a454 100644 --- a/software/applications/osdu-core/storage.yaml +++ b/software/applications/osdu-core/storage.yaml @@ -8,7 +8,7 @@ metadata: clusterconfig.azure.com/use-managed-source: "true" spec: dependsOn: - - name: osdu-schema + - name: osdu-indexer-queue namespace: osdu-core chart: spec: From a01321ae1636f2d61c70ecf21b5a7302472c409c Mon Sep 17 00:00:00 2001 From: Daniel Scholl Date: Tue, 27 Aug 2024 10:26:43 -0500 Subject: [PATCH 06/10] Documentation updates --- bicep/modules/aks_cluster.bicep | 8 ++++---- docs/src/architecture.md | 10 +++------- docs/src/images/architecture_2.png | Bin 0 -> 92797 bytes docs/src/images/overview_1.png | Bin 0 -> 42071 bytes docs/src/images/overview_2.png | Bin 0 -> 67715 bytes docs/src/index.md | 6 ++++++ docs/src/software.md | 19 ------------------- 7 files changed, 13 insertions(+), 30 deletions(-) create mode 100644 docs/src/images/architecture_2.png create mode 100644 docs/src/images/overview_1.png create mode 100644 docs/src/images/overview_2.png diff --git a/bicep/modules/aks_cluster.bicep b/bicep/modules/aks_cluster.bicep index 81f0f889..cf50de90 100644 --- a/bicep/modules/aks_cluster.bicep +++ b/bicep/modules/aks_cluster.bicep @@ -396,7 +396,7 @@ var userPoolPresets = { // 4 vCPU, 16 GiB RAM, 32 GiB Temp Disk, (3600) IOPS, 128 GB Managed OS Disk Burstable : { vmSize: 'Standard_B4ms' - minCount: 4 + minCount: 3 maxCount: 20 availabilityZones: [ '1' @@ -405,12 +405,12 @@ var userPoolPresets = { ] osDiskType: 'Managed' osDiskSize: 128 - maxPods: 30 + maxPods: 60 } // 4 vCPU, 32 GiB RAM, 64 GiB SSD, (8000) IOPS, 128 GB Managed OS Disk Standard : { vmSize: 'Standard_D4s_v5' - minCount: 4 + minCount: 3 maxCount: 20 availabilityZones: [ '1' @@ -419,7 +419,7 @@ var userPoolPresets = { ] osDiskType: 'Managed' osDiskSize: 128 - maxPods: 30 + maxPods: 60 } } diff --git a/docs/src/architecture.md b/docs/src/architecture.md index 36d940be..7e7f731f 100644 --- a/docs/src/architecture.md +++ b/docs/src/architecture.md @@ -7,13 +7,6 @@ This provides valuable insights into best practices and design considerations of azure workloads. - -**Cost Optimization** - Create a cost-effective solution while balancing security. - -**Security** - Enhance security within a development context, adhering to a zero trust model. - -**Operational Excellence** - Prioritize standards with automation to ensure efficient operations and robust monitoring. - #### Desired State Configuration Bicep is a domain-specific language (DSL) for deploying Azure resources declaratively. It simplifies authoring ARM templates and allows you to define the desired state of your Infrastructure as Code (IaC). Azure Resource Manager (ARM) processes the Bicep file to ensure the Azure environment matches the defined desired state, correcting any drift through redeployment. @@ -103,4 +96,7 @@ A GitOps configuration resides in this Git repository and uses a customized [rep A GitOps approach simplifies the process of deploying and managing software, making it easier to maintain and update, as well as providing a configurable way of leveraging other software configurations by pointing to alternate repositories hosting other configurations. By leveraging this method, we ensure that our deployments can be extended to things that not only include the default software load. +![[1]][1] + [0]: images/architecture.png "Architecture Diagram" +[1]: images/architecture_2.png "Gitops Diagram" \ No newline at end of file diff --git a/docs/src/images/architecture_2.png b/docs/src/images/architecture_2.png new file mode 100644 index 0000000000000000000000000000000000000000..8a2572ce7ccd0dbe8297b37403bd01b159e478ec GIT binary patch literal 92797 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%0D)&@k@4|1#suD1?@KvbOH)SgR|*lE!#0 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