diff --git a/platform/gitops-pipelines/delivery/clusters/cc-cluster/core-services/180-perfectscale.yaml b/platform/gitops-pipelines/delivery/clusters/cc-cluster/core-services/180-perfectscale.yaml new file mode 100644 index 00000000..fd57fa6b --- /dev/null +++ b/platform/gitops-pipelines/delivery/clusters/cc-cluster/core-services/180-perfectscale.yaml @@ -0,0 +1,28 @@ +apiVersion: argoproj.io/v1alpha1 +kind: Application +metadata: + name: perfectscale-components + namespace: argocd + annotations: + argocd.argoproj.io/sync-wave: '180' +spec: + project: core + source: + repoURL: + path: gitops-pipelines/delivery/clusters/cc-cluster/core-services/components/perfectscale + targetRevision: HEAD + destination: + server: 'https://kubernetes.default.svc' + namespace: perfectscale + syncPolicy: + automated: + prune: true + selfHeal: true + syncOptions: + - CreateNamespace=true + retry: + limit: 5 + backoff: + duration: 30s + maxDuration: 15m0s + factor: 2 diff --git a/platform/gitops-pipelines/delivery/clusters/cc-cluster/core-services/components/perfectscale/application.yaml b/platform/gitops-pipelines/delivery/clusters/cc-cluster/core-services/components/perfectscale/application.yaml new file mode 100644 index 00000000..1460bcfb --- /dev/null +++ b/platform/gitops-pipelines/delivery/clusters/cc-cluster/core-services/components/perfectscale/application.yaml @@ -0,0 +1,62 @@ +--- +apiVersion: argoproj.io/v1alpha1 +kind: Application +metadata: + name: perfectscale + namespace: argocd + annotations: + argocd.argoproj.io/sync-wave: "180" +spec: + project: core + source: + repoURL: https://perfectscale-io.github.io + chart: exporter + targetRevision: v1.0.41 + helm: + values: |- + secret: + name: perfectscale-secret + settings: + clusterName: cg-devx-perfectscale + additionalLabels: + cg-devx.cost-allocation.cost-center: platform + cg-devx.metadata.owner: -admin + cg-devx.metadata.service: scaler.perfectscale + cg-devx.metadata.chart-version: 1.0.41 + cg-devx.metadata.version: 1.0.0 + destination: + server: 'https://kubernetes.default.svc' + namespace: perfectscale + syncPolicy: + automated: + prune: true + selfHeal: true + syncOptions: + - CreateNamespace=true +--- +apiVersion: argoproj.io/v1alpha1 +kind: Application +metadata: + name: psc-autoscaler + namespace: argocd + annotations: + argocd.argoproj.io/sync-wave: "180" +spec: + project: core + source: + repoURL: https://perfectscale-io.github.io + chart: psc-autoscaler + targetRevision: v1.0.10 + helm: + values: |- + secret: + create: false + destination: + server: 'https://kubernetes.default.svc' + namespace: perfectscale + syncPolicy: + automated: + prune: true + selfHeal: true + syncOptions: + - CreateNamespace=true diff --git a/platform/gitops-pipelines/delivery/clusters/cc-cluster/core-services/components/perfectscale/externalsecret.yaml b/platform/gitops-pipelines/delivery/clusters/cc-cluster/core-services/components/perfectscale/externalsecret.yaml new file mode 100644 index 00000000..b7cb7a1f --- /dev/null +++ b/platform/gitops-pipelines/delivery/clusters/cc-cluster/core-services/components/perfectscale/externalsecret.yaml @@ -0,0 +1,16 @@ +apiVersion: external-secrets.io/v1beta1 +kind: ExternalSecret +metadata: + name: perfectscale-secret + annotations: + argocd.argoproj.io/sync-wave: "180" +spec: + target: + name: perfectscale-secret + secretStoreRef: + kind: ClusterSecretStore + name: vault-kv-secret + refreshInterval: 10s + dataFrom: + - extract: + key: /perfectscale-secret \ No newline at end of file diff --git a/platform/gitops-pipelines/delivery/clusters/cc-cluster/core-services/components/perfectscale/pcs-cluster-autoscaler-config.yaml b/platform/gitops-pipelines/delivery/clusters/cc-cluster/core-services/components/perfectscale/pcs-cluster-autoscaler-config.yaml new file mode 100644 index 00000000..bb4e037c --- /dev/null +++ b/platform/gitops-pipelines/delivery/clusters/cc-cluster/core-services/components/perfectscale/pcs-cluster-autoscaler-config.yaml @@ -0,0 +1,21 @@ +apiVersion: perfectscale.io/v1 +kind: ClusterAutomationConfig +metadata: + name: cluster-automation-config +spec: + automation: + operational: + stopAllAutomation: false + workloadTypes: + Deployment: + operational: + automationMode: "Disabled" + restrictions: + StatefulSet: + operational: + automationMode: "Disabled" + restrictions: + DaemonSet: + operational: + automationMode: "Disabled" + restrictions: \ No newline at end of file diff --git a/platform/terraform/modules/secrets_vault/secrets.tf b/platform/terraform/modules/secrets_vault/secrets.tf index b9560d96..23a96eca 100644 --- a/platform/terraform/modules/secrets_vault/secrets.tf +++ b/platform/terraform/modules/secrets_vault/secrets.tf @@ -236,3 +236,16 @@ resource "vault_generic_secret" "oauth2_cookie_secret" { depends_on = [vault_mount.secret] } + +resource "vault_generic_secret" "perfectscale_secret" { + path = "secret/perfectscale-secret" + + data_json = jsonencode( + { + clientId = "", + clientSecret = "", + } + ) + + depends_on = [vault_mount.secret] +} \ No newline at end of file diff --git a/tools/cli/commands/README.md b/tools/cli/commands/README.md index 2e2a39ad..72fb8796 100644 --- a/tools/cli/commands/README.md +++ b/tools/cli/commands/README.md @@ -54,10 +54,14 @@ for checkpointing, allowing the command to be rerun if necessary. - keda - kubevirt - nvidia-gpu-operator +- perfectscale - vpa > **Note!**: Use kebab-case for all parameter names. +When installing PerfectScale, you should set `clientId` and `clientSecret` in your secret store ( +path `secret/perfectscale-secret`) to values provided in PerfectScale UI. + ### Examples **Using command arguments:** diff --git a/tools/cli/common/enums/optional_services.py b/tools/cli/common/enums/optional_services.py index b3d06f48..50ea1fa6 100644 --- a/tools/cli/common/enums/optional_services.py +++ b/tools/cli/common/enums/optional_services.py @@ -12,6 +12,7 @@ class OptionalServices(str, enum.Enum): KEDA = "keda" KUBEVIRT = "kubevirt" ClusterAutoScaler = 'cluster-auto-scaler' + PerfectScale = 'perfectscale' @classmethod def has_value(cls, value) -> bool: diff --git a/tools/cli/common/utils/optional_services_manager.py b/tools/cli/common/utils/optional_services_manager.py index 58dafef4..9be351d8 100644 --- a/tools/cli/common/utils/optional_services_manager.py +++ b/tools/cli/common/utils/optional_services_manager.py @@ -5,6 +5,7 @@ OptionalServices.KEDA: ["180-keda.yaml"], OptionalServices.KUBEVIRT: ["180-kubevirt.yaml"], OptionalServices.VPA: ["180-vpa.yaml"], + OptionalServices.PerfectScale: ["180-perfectscale.yaml"], OptionalServices.ClusterAutoScaler: ["30-cluster-autoscaler.yaml"] }