From 4641470b982493e82e48e11a67b6c43266a68cc3 Mon Sep 17 00:00:00 2001 From: chipzoller Date: Sun, 25 Feb 2024 09:37:45 -0500 Subject: [PATCH 1/6] add 2.1.0 Signed-off-by: chipzoller --- operators/kubecost/2.1.0/bundle.Dockerfile | 20 + .../charts.kubecost.com_costanalyzers.yaml | 50 + ...er-manager-metrics-service_v1_service.yaml | 23 + ...c.authorization.k8s.io_v1_clusterrole.yaml | 17 + ...becost-operator.clusterserviceversion.yaml | 1728 +++++++++++++++++ .../kubecost/2.1.0/metadata/annotations.yaml | 14 + .../2.1.0/tests/scorecard/config.yaml | 70 + 7 files changed, 1922 insertions(+) create mode 100644 operators/kubecost/2.1.0/bundle.Dockerfile create mode 100644 operators/kubecost/2.1.0/manifests/charts.kubecost.com_costanalyzers.yaml create mode 100644 operators/kubecost/2.1.0/manifests/kubecost-operator-controller-manager-metrics-service_v1_service.yaml create mode 100644 operators/kubecost/2.1.0/manifests/kubecost-operator-metrics-reader_rbac.authorization.k8s.io_v1_clusterrole.yaml create mode 100644 operators/kubecost/2.1.0/manifests/kubecost-operator.clusterserviceversion.yaml create mode 100644 operators/kubecost/2.1.0/metadata/annotations.yaml create mode 100644 operators/kubecost/2.1.0/tests/scorecard/config.yaml diff --git a/operators/kubecost/2.1.0/bundle.Dockerfile b/operators/kubecost/2.1.0/bundle.Dockerfile new file mode 100644 index 00000000000..2ad36321684 --- /dev/null +++ b/operators/kubecost/2.1.0/bundle.Dockerfile @@ -0,0 +1,20 @@ +FROM scratch + +# Core bundle labels. +LABEL operators.operatorframework.io.bundle.mediatype.v1=registry+v1 +LABEL operators.operatorframework.io.bundle.manifests.v1=manifests/ +LABEL operators.operatorframework.io.bundle.metadata.v1=metadata/ +LABEL operators.operatorframework.io.bundle.package.v1=kubecost +LABEL operators.operatorframework.io.bundle.channels.v1=alpha +LABEL operators.operatorframework.io.metrics.builder=operator-sdk-v1.32.0 +LABEL operators.operatorframework.io.metrics.mediatype.v1=metrics+v1 +LABEL operators.operatorframework.io.metrics.project_layout=helm.sdk.operatorframework.io/v1 + +# Labels for testing. +LABEL operators.operatorframework.io.test.mediatype.v1=scorecard+v1 +LABEL operators.operatorframework.io.test.config.v1=tests/scorecard/ + +# Copy files to locations specified by labels. +COPY bundle/manifests /manifests/ +COPY bundle/metadata /metadata/ +COPY bundle/tests/scorecard /tests/scorecard/ diff --git a/operators/kubecost/2.1.0/manifests/charts.kubecost.com_costanalyzers.yaml b/operators/kubecost/2.1.0/manifests/charts.kubecost.com_costanalyzers.yaml new file mode 100644 index 00000000000..60a6a7653ae --- /dev/null +++ b/operators/kubecost/2.1.0/manifests/charts.kubecost.com_costanalyzers.yaml @@ -0,0 +1,50 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + creationTimestamp: null + name: costanalyzers.charts.kubecost.com +spec: + group: charts.kubecost.com + names: + kind: CostAnalyzer + listKind: CostAnalyzerList + plural: costanalyzers + singular: costanalyzer + scope: Namespaced + versions: + - name: v1alpha1 + schema: + openAPIV3Schema: + description: CostAnalyzer is the Schema for the costanalyzers API + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: Spec defines the desired state of CostAnalyzer + type: object + x-kubernetes-preserve-unknown-fields: true + status: + description: Status defines the observed state of CostAnalyzer + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + served: true + storage: true + subresources: + status: {} +status: + acceptedNames: + kind: "" + plural: "" + conditions: null + storedVersions: null diff --git a/operators/kubecost/2.1.0/manifests/kubecost-operator-controller-manager-metrics-service_v1_service.yaml b/operators/kubecost/2.1.0/manifests/kubecost-operator-controller-manager-metrics-service_v1_service.yaml new file mode 100644 index 00000000000..bf4c797c112 --- /dev/null +++ b/operators/kubecost/2.1.0/manifests/kubecost-operator-controller-manager-metrics-service_v1_service.yaml @@ -0,0 +1,23 @@ +apiVersion: v1 +kind: Service +metadata: + creationTimestamp: null + labels: + app.kubernetes.io/component: kube-rbac-proxy + app.kubernetes.io/created-by: kubecost-operator + app.kubernetes.io/instance: controller-manager-metrics-service + app.kubernetes.io/managed-by: kustomize + app.kubernetes.io/name: service + app.kubernetes.io/part-of: kubecost-operator + control-plane: controller-manager + name: kubecost-operator-controller-manager-metrics-service +spec: + ports: + - name: https + port: 8443 + protocol: TCP + targetPort: https + selector: + control-plane: controller-manager +status: + loadBalancer: {} diff --git a/operators/kubecost/2.1.0/manifests/kubecost-operator-metrics-reader_rbac.authorization.k8s.io_v1_clusterrole.yaml b/operators/kubecost/2.1.0/manifests/kubecost-operator-metrics-reader_rbac.authorization.k8s.io_v1_clusterrole.yaml new file mode 100644 index 00000000000..97e828e3b74 --- /dev/null +++ b/operators/kubecost/2.1.0/manifests/kubecost-operator-metrics-reader_rbac.authorization.k8s.io_v1_clusterrole.yaml @@ -0,0 +1,17 @@ +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + creationTimestamp: null + labels: + app.kubernetes.io/component: kube-rbac-proxy + app.kubernetes.io/created-by: kubecost-operator + app.kubernetes.io/instance: metrics-reader + app.kubernetes.io/managed-by: kustomize + app.kubernetes.io/name: clusterrole + app.kubernetes.io/part-of: kubecost-operator + name: kubecost-operator-metrics-reader +rules: +- nonResourceURLs: + - /metrics + verbs: + - get diff --git a/operators/kubecost/2.1.0/manifests/kubecost-operator.clusterserviceversion.yaml b/operators/kubecost/2.1.0/manifests/kubecost-operator.clusterserviceversion.yaml new file mode 100644 index 00000000000..3f00fd618d4 --- /dev/null +++ b/operators/kubecost/2.1.0/manifests/kubecost-operator.clusterserviceversion.yaml @@ -0,0 +1,1728 @@ +apiVersion: operators.coreos.com/v1alpha1 +kind: ClusterServiceVersion +metadata: + annotations: + alm-examples: |- + [ + { + "apiVersion": "charts.kubecost.com/v1alpha1", + "kind": "CostAnalyzer", + "metadata": { + "name": "costanalyzer-sample" + }, + "spec": { + "global": { + "prometheus": { + "enabled": true, + "fqdn": "http://cost-analyzer-prometheus-server.default.svc" + }, + "grafana": { + "enabled": false, + "domainName": "cost-analyzer-grafana.default.svc", + "scheme": "http", + "proxy": false + }, + "gcpstore": { + "enabled": false + }, + "gmp": { + "enabled": false, + "prometheusServerEndpoint": "http://localhost:8085/", + "gmpProxy": { + "enabled": false, + "image": "gke.gcr.io/prometheus-engine/frontend:v0.4.1-gke.0", + "imagePullPolicy": "Always", + "name": "gmp-proxy", + "port": 8085, + "projectId": "YOUR_PROJECT_ID" + } + }, + "amp": { + "enabled": false, + "prometheusServerEndpoint": "http://localhost:8005/workspaces//", + "remoteWriteService": "https://aps-workspaces.us-west-2.amazonaws.com/workspaces//api/v1/remote_write", + "sigv4": { + "region": "us-west-2" + } + }, + "mimirProxy": { + "enabled": false, + "name": "mimir-proxy", + "image": "nginxinc/nginx-unprivileged", + "port": 8085, + "mimirEndpoint": "$mimir_endpoint", + "orgIdentifier": "$your_tenant_ID" + }, + "notifications": { + "alertmanager": { + "enabled": false, + "fqdn": "http://cost-analyzer-prometheus-server.default.svc" + } + }, + "savedReports": { + "enabled": false, + "reports": [ + { + "title": "Example Saved Report 0", + "window": "today", + "aggregateBy": "namespace", + "chartDisplay": "category", + "idle": "separate", + "rate": "cumulative", + "accumulate": false, + "filters": [ + { + "key": "cluster", + "operator": ":", + "value": "dev" + } + ] + }, + { + "title": "Example Saved Report 1", + "window": "month", + "aggregateBy": "controllerKind", + "chartDisplay": "category", + "idle": "share", + "rate": "monthly", + "accumulate": false, + "filters": [ + { + "key": "namespace", + "operator": "!:", + "value": "kubecost" + } + ] + }, + { + "title": "Example Saved Report 2", + "window": "2020-11-11T00:00:00Z,2020-12-09T23:59:59Z", + "aggregateBy": "service", + "chartDisplay": "category", + "idle": "hide", + "rate": "daily", + "accumulate": true, + "filters": [] + } + ] + }, + "assetReports": { + "enabled": false, + "reports": [ + { + "title": "Example Asset Report 0", + "window": "today", + "aggregateBy": "type", + "accumulate": false, + "filters": [ + { + "property": "cluster", + "value": "cluster-one" + } + ] + } + ] + }, + "advancedReports": { + "enabled": false, + "reports": [ + { + "title": "Example Advanced Report 0", + "window": "7d", + "aggregateBy": "namespace", + "filters": [ + { + "key": "cluster", + "operator": ":", + "value": "dev" + } + ], + "cloudBreakdown": "service", + "cloudJoin": "label:kubernetes_namespace" + } + ] + }, + "cloudCostReports": { + "enabled": false, + "reports": [ + { + "title": "Cloud Cost Report 0", + "window": "today", + "aggregateBy": "service", + "accumulate": false + } + ] + }, + "podAnnotations": {}, + "additionalLabels": {}, + "securityContext": { + "runAsNonRoot": true, + "seccompProfile": { + "type": "RuntimeDefault" + }, + "fsGroup": 1001, + "runAsGroup": 1001, + "runAsUser": 1001, + "fsGroupChangePolicy": "OnRootMismatch" + }, + "containerSecurityContext": { + "allowPrivilegeEscalation": false, + "privileged": false, + "readOnlyRootFilesystem": true, + "capabilities": { + "drop": [ + "ALL" + ] + } + }, + "platforms": { + "openshift": { + "enabled": true, + "route": { + "enabled": false, + "annotations": {} + }, + "scc": { + "nodeExporter": false, + "networkCosts": false + }, + "securityContext": { + "runAsNonRoot": true, + "seccompProfile": { + "type": "RuntimeDefault" + } + } + }, + "cicd": { + "enabled": true, + "skipSanityChecks": true + } + } + }, + "upgrade": { + "toV2": false + }, + "kubecostToken": null, + "pricingCsv": { + "enabled": false, + "location": { + "provider": "AWS", + "region": "us-east-1", + "URI": "s3://kc-csv-test/pricing_schema.csv", + "csvAccessCredentials": "pricing-schema-access-secret" + } + }, + "saml": { + "enabled": false, + "rbac": { + "enabled": false + } + }, + "oidc": { + "enabled": false, + "clientID": "", + "clientSecret": "", + "existingCustomSecret": { + "enabled": false, + "name": "" + }, + "skipOnlineTokenValidation": false, + "rbac": { + "enabled": false + } + }, + "systemProxy": { + "enabled": false, + "httpProxyUrl": "", + "httpsProxyUrl": "", + "noProxy": "" + }, + "kubecostFrontend": { + "enabled": true, + "image": "gcr.io/kubecost1/frontend", + "imagePullPolicy": "Always", + "resources": { + "requests": { + "cpu": "10m", + "memory": "55Mi" + } + }, + "readinessProbe": { + "enabled": true, + "initialDelaySeconds": 10, + "periodSeconds": 10, + "failureThreshold": 200 + }, + "livenessProbe": { + "enabled": true, + "initialDelaySeconds": 10, + "periodSeconds": 10, + "failureThreshold": 200 + }, + "ipv6": { + "enabled": true + }, + "useDefaultFqdn": false + }, + "kubecostMetrics": { + "exporter": { + "enabled": false, + "port": 9005, + "prometheusScrape": true, + "resources": {}, + "tolerations": [], + "affinity": {}, + "service": { + "annotations": {} + }, + "serviceMonitor": { + "enabled": false, + "additionalLabels": {}, + "metricRelabelings": [], + "relabelings": [] + }, + "priorityClassName": "", + "additionalLabels": {}, + "nodeSelector": {}, + "extraArgs": [] + } + }, + "sigV4Proxy": { + "image": "public.ecr.aws/aws-observability/aws-sigv4-proxy:latest", + "imagePullPolicy": "Always", + "name": "aps", + "port": 8005, + "region": "us-west-2", + "host": "aps-workspaces.us-west-2.amazonaws.com", + "extraEnv": null, + "resources": {} + }, + "kubecostModel": { + "image": "gcr.io/kubecost1/cost-model", + "imagePullPolicy": "Always", + "outOfClusterPromMetricsEnabled": false, + "warmCache": false, + "etl": true, + "etlFileStoreEnabled": true, + "etlDailyStoreDurationDays": 91, + "etlHourlyStoreDurationHours": 49, + "etlWeeklyStoreDurationWeeks": 53, + "etlReadOnlyMode": false, + "cloudCost": { + "labelList": { + "IsIncludeList": false, + "labels": "" + }, + "topNItems": 1000 + }, + "allocation": null, + "maxQueryConcurrency": 5, + "resources": { + "requests": { + "cpu": "200m", + "memory": "55Mi" + } + }, + "readinessProbe": { + "enabled": true, + "initialDelaySeconds": 10, + "periodSeconds": 10, + "failureThreshold": 200 + }, + "livenessProbe": { + "enabled": true, + "initialDelaySeconds": 10, + "periodSeconds": 10, + "failureThreshold": 200 + }, + "extraArgs": [], + "ingress": { + "enabled": false, + "labels": null, + "annotations": null, + "paths": [ + "/" + ], + "pathType": "ImplementationSpecific", + "hosts": [ + "cost-analyzer-model.local" + ], + "tls": [] + }, + "utcOffset": "+00:00", + "extraPorts": [] + }, + "etlUtils": { + "enabled": false, + "fullImageName": null, + "resources": {}, + "env": {}, + "nodeSelector": {}, + "tolerations": {}, + "affinity": {} + }, + "ingress": { + "enabled": false, + "labels": null, + "annotations": null, + "paths": [ + "/" + ], + "pathType": "ImplementationSpecific", + "hosts": [ + "cost-analyzer.local" + ], + "tls": [] + }, + "nodeSelector": {}, + "tolerations": [], + "affinity": {}, + "topologySpreadConstraints": [], + "priority": { + "enabled": false, + "name": "" + }, + "networkPolicy": { + "enabled": false, + "denyEgress": true, + "sameNamespace": true, + "costAnalyzer": { + "enabled": false, + "annotations": {}, + "additionalLabels": {} + } + }, + "extraVolumes": [], + "extraVolumeMounts": [], + "persistentVolume": { + "size": "32Gi", + "dbSize": "32.0Gi", + "enabled": true, + "labels": {}, + "annotations": {}, + "dbPVEnabled": false + }, + "service": { + "type": "ClusterIP", + "port": 9090, + "targetPort": 9090, + "labels": {}, + "annotations": {}, + "sessionAffinity": { + "enabled": false, + "timeoutSeconds": 10800 + } + }, + "prometheus": { + "rbac": { + "create": true + }, + "serviceAccounts": { + "alertmanager": { + "create": true, + "name": null + }, + "nodeExporter": { + "create": true, + "name": null + }, + "pushgateway": { + "create": true, + "name": null + }, + "server": { + "create": true, + "name": null, + "annotations": {} + } + }, + "imagePullSecrets": null, + "extraScrapeConfigs": "- job_name: kubecost\n honor_labels: true\n scrape_interval: 1m\n scrape_timeout: 60s\n metrics_path: /metrics\n scheme: http\n dns_sd_configs:\n - names:\n - {{ template \"cost-analyzer.serviceName\" . }}\n type: 'A'\n port: 9003\n- job_name: kubecost-networking\n kubernetes_sd_configs:\n - role: pod\n relabel_configs:\n # Scrape only the the targets matching the following metadata\n - source_labels: [__meta_kubernetes_pod_label_app_kubernetes_io_instance]\n action: keep\n regex: kubecost\n - source_labels: [__meta_kubernetes_pod_label_app_kubernetes_io_name]\n action: keep\n regex: network-costs\n", + "server": { + "enabled": true, + "name": "server", + "sidecarContainers": null, + "strategy": { + "type": "Recreate", + "rollingUpdate": null + }, + "image": { + "repository": "quay.io/prometheus/prometheus", + "tag": "v2.49.1", + "pullPolicy": "IfNotPresent" + }, + "priorityClassName": "", + "prefixURL": "", + "baseURL": "", + "env": [], + "extraFlags": [ + "web.enable-lifecycle" + ], + "configPath": "/etc/config/prometheus.yml", + "global": { + "scrape_interval": "1m", + "scrape_timeout": "60s", + "evaluation_interval": "1m", + "external_labels": { + "cluster_id": "cluster-one" + } + }, + "remoteWrite": {}, + "remoteRead": {}, + "extraArgs": { + "query.max-concurrency": 1, + "query.max-samples": 100000000 + }, + "extraInitContainers": [], + "extraVolumeMounts": [], + "extraVolumes": [], + "extraHostPathMounts": [], + "extraConfigmapMounts": [], + "extraSecretMounts": [], + "configMapOverrideName": "", + "ingress": { + "enabled": false, + "annotations": {}, + "extraLabels": {}, + "hosts": [], + "pathType": "Prefix", + "extraPaths": [], + "tls": [] + }, + "tolerations": [], + "nodeSelector": {}, + "affinity": {}, + "podDisruptionBudget": { + "enabled": false, + "maxUnavailable": 1 + }, + "persistentVolume": { + "enabled": true, + "accessModes": [ + "ReadWriteOnce" + ], + "annotations": {}, + "existingClaim": "", + "mountPath": "/data", + "size": "32Gi", + "subPath": "" + }, + "emptyDir": { + "sizeLimit": "" + }, + "podAnnotations": {}, + "deploymentAnnotations": {}, + "podLabels": {}, + "alertmanagers": [], + "replicaCount": 1, + "statefulSet": { + "enabled": false, + "annotations": {}, + "labels": {}, + "podManagementPolicy": "OrderedReady", + "headless": { + "annotations": {}, + "labels": {}, + "servicePort": 80 + } + }, + "readinessProbeInitialDelay": 30, + "readinessProbeTimeout": 30, + "readinessProbeFailureThreshold": 3, + "readinessProbeSuccessThreshold": 1, + "livenessProbeInitialDelay": 30, + "livenessProbeTimeout": 30, + "livenessProbeFailureThreshold": 3, + "livenessProbeSuccessThreshold": 1, + "resources": {}, + "verticalAutoscaler": { + "enabled": false + }, + "securityContext": {}, + "containerSecurityContext": {}, + "service": { + "annotations": {}, + "labels": {}, + "clusterIP": "", + "externalIPs": [], + "loadBalancerIP": "", + "loadBalancerSourceRanges": [], + "servicePort": 80, + "sessionAffinity": "None", + "type": "ClusterIP", + "gRPC": { + "enabled": false, + "servicePort": 10901 + }, + "statefulsetReplica": { + "enabled": false, + "replica": 0 + } + }, + "terminationGracePeriodSeconds": 300, + "retention": "15d" + }, + "alertmanager": { + "enabled": false, + "strategy": { + "type": "Recreate", + "rollingUpdate": null + }, + "name": "alertmanager", + "image": { + "repository": "quay.io/prometheus/alertmanager", + "tag": "v0.26.0", + "pullPolicy": "IfNotPresent" + }, + "priorityClassName": "", + "extraArgs": {}, + "prefixURL": "", + "baseURL": "http://localhost:9093", + "extraEnv": {}, + "extraSecretMounts": [], + "configMapOverrideName": "", + "configFromSecret": "", + "configFileName": "alertmanager.yml", + "ingress": { + "enabled": false, + "annotations": {}, + "extraLabels": {}, + "hosts": [], + "extraPaths": [], + "tls": [] + }, + "tolerations": [], + "nodeSelector": {}, + "affinity": {}, + "podDisruptionBudget": { + "enabled": false, + "maxUnavailable": 1 + }, + "persistentVolume": { + "enabled": true, + "accessModes": [ + "ReadWriteOnce" + ], + "annotations": {}, + "existingClaim": "", + "mountPath": "/data", + "size": "2Gi", + "subPath": "" + }, + "podAnnotations": {}, + "podLabels": {}, + "replicaCount": 1, + "statefulSet": { + "enabled": false, + "podManagementPolicy": "OrderedReady", + "headless": { + "annotations": {}, + "labels": {}, + "servicePort": 80 + } + }, + "resources": {}, + "securityContext": { + "runAsUser": 1001, + "runAsNonRoot": true, + "runAsGroup": 1001, + "fsGroup": 1001 + }, + "service": { + "annotations": {}, + "labels": {}, + "clusterIP": "", + "externalIPs": [], + "loadBalancerIP": "", + "loadBalancerSourceRanges": [], + "servicePort": 80, + "sessionAffinity": "None", + "type": "ClusterIP" + } + }, + "alertmanagerFiles": { + "alertmanager.yml": { + "global": {}, + "receivers": [ + { + "name": "default-receiver" + } + ], + "route": { + "group_wait": "10s", + "group_interval": "5m", + "receiver": "default-receiver", + "repeat_interval": "3h" + } + } + }, + "configmapReload": { + "prometheus": { + "enabled": false, + "name": "configmap-reload", + "image": { + "repository": "quay.io/prometheus-operator/prometheus-config-reloader", + "tag": "v0.71.2", + "pullPolicy": "IfNotPresent" + }, + "extraArgs": {}, + "extraVolumeDirs": [], + "extraConfigmapMounts": [], + "resources": {}, + "containerSecurityContext": {} + }, + "alertmanager": { + "enabled": false, + "name": "configmap-reload", + "image": { + "repository": "quay.io/prometheus-operator/prometheus-config-reloader", + "tag": "v0.71.2", + "pullPolicy": "IfNotPresent" + }, + "extraArgs": {}, + "extraVolumeDirs": [], + "extraConfigmapMounts": [], + "resources": {} + } + }, + "nodeExporter": { + "enabled": false, + "hostNetwork": true, + "hostPID": true, + "dnsPolicy": "ClusterFirstWithHostNet", + "name": "node-exporter", + "image": { + "repository": "prom/node-exporter", + "tag": "v1.7.0", + "pullPolicy": "IfNotPresent" + }, + "priorityClassName": "", + "updateStrategy": { + "type": "RollingUpdate" + }, + "extraArgs": {}, + "extraHostPathMounts": [], + "extraConfigmapMounts": [], + "tolerations": [], + "nodeSelector": {}, + "podAnnotations": {}, + "deploymentAnnotations": {}, + "pod": { + "labels": {} + }, + "podDisruptionBudget": { + "enabled": false, + "maxUnavailable": 1 + }, + "resources": {}, + "securityContext": {}, + "service": { + "annotations": { + "prometheus.io/scrape": "true" + }, + "labels": {}, + "clusterIP": "None", + "externalIPs": [], + "hostPort": 9100, + "loadBalancerIP": "", + "loadBalancerSourceRanges": [], + "servicePort": 9100, + "type": "ClusterIP" + } + }, + "pushgateway": { + "enabled": false, + "name": "pushgateway", + "image": { + "repository": "prom/pushgateway", + "tag": "v1.6.2", + "pullPolicy": "IfNotPresent" + }, + "priorityClassName": "", + "extraArgs": {}, + "ingress": { + "enabled": false, + "annotations": {}, + "hosts": [], + "extraPaths": [], + "tls": [] + }, + "tolerations": [], + "nodeSelector": {}, + "podAnnotations": {}, + "replicaCount": 1, + "podDisruptionBudget": { + "enabled": false, + "maxUnavailable": 1 + }, + "resources": {}, + "securityContext": { + "runAsUser": 1001, + "runAsNonRoot": true + }, + "service": { + "annotations": { + "prometheus.io/probe": "pushgateway" + }, + "labels": {}, + "clusterIP": "", + "externalIPs": [], + "loadBalancerIP": "", + "loadBalancerSourceRanges": [], + "servicePort": 9091, + "type": "ClusterIP" + }, + "strategy": { + "type": "Recreate", + "rollingUpdate": null + }, + "persistentVolume": { + "enabled": true, + "accessModes": [ + "ReadWriteOnce" + ], + "annotations": {}, + "existingClaim": "", + "mountPath": "/data", + "size": "2Gi", + "subPath": "" + } + }, + "serverFiles": { + "alerting_rules.yml": {}, + "alerts": {}, + "recording_rules.yml": {}, + "prometheus.yml": { + "rule_files": [ + "/etc/config/recording_rules.yml", + "/etc/config/alerting_rules.yml", + "/etc/config/rules", + "/etc/config/alerts" + ], + "scrape_configs": [ + { + "job_name": "prometheus", + "static_configs": [ + { + "targets": [ + "localhost:9090" + ] + } + ] + }, + { + "job_name": "kubernetes-nodes-cadvisor", + "scheme": "https", + "tls_config": { + "ca_file": "/var/run/secrets/kubernetes.io/serviceaccount/ca.crt", + "insecure_skip_verify": true + }, + "bearer_token_file": "/var/run/secrets/kubernetes.io/serviceaccount/token", + "kubernetes_sd_configs": [ + { + "role": "node" + } + ], + "relabel_configs": [ + { + "action": "labelmap", + "regex": "__meta_kubernetes_node_label_(.+)" + }, + { + "target_label": "__address__", + "replacement": "kubernetes.default.svc:443" + }, + { + "source_labels": [ + "__meta_kubernetes_node_name" + ], + "regex": "(.+)", + "target_label": "__metrics_path__", + "replacement": "/api/v1/nodes/$1/proxy/metrics/cadvisor" + } + ], + "metric_relabel_configs": [ + { + "source_labels": [ + "__name__" + ], + "regex": "(container_cpu_usage_seconds_total|container_memory_working_set_bytes|container_network_receive_errors_total|container_network_transmit_errors_total|container_network_receive_packets_dropped_total|container_network_transmit_packets_dropped_total|container_memory_usage_bytes|container_cpu_cfs_throttled_periods_total|container_cpu_cfs_periods_total|container_fs_usage_bytes|container_fs_limit_bytes|container_cpu_cfs_periods_total|container_fs_inodes_free|container_fs_inodes_total|container_fs_usage_bytes|container_fs_limit_bytes|container_cpu_cfs_throttled_periods_total|container_cpu_cfs_periods_total|container_network_receive_bytes_total|container_network_transmit_bytes_total|container_fs_inodes_free|container_fs_inodes_total|container_fs_usage_bytes|container_fs_limit_bytes|container_spec_cpu_shares|container_spec_memory_limit_bytes|container_network_receive_bytes_total|container_network_transmit_bytes_total|container_fs_reads_bytes_total|container_network_receive_bytes_total|container_fs_writes_bytes_total|container_fs_reads_bytes_total|cadvisor_version_info|kubecost_pv_info)", + "action": "keep" + }, + { + "source_labels": [ + "container" + ], + "target_label": "container_name", + "regex": "(.+)", + "action": "replace" + }, + { + "source_labels": [ + "pod" + ], + "target_label": "pod_name", + "regex": "(.+)", + "action": "replace" + } + ] + }, + { + "job_name": "kubernetes-nodes", + "scheme": "https", + "tls_config": { + "ca_file": "/var/run/secrets/kubernetes.io/serviceaccount/ca.crt", + "insecure_skip_verify": true + }, + "bearer_token_file": "/var/run/secrets/kubernetes.io/serviceaccount/token", + "kubernetes_sd_configs": [ + { + "role": "node" + } + ], + "relabel_configs": [ + { + "action": "labelmap", + "regex": "__meta_kubernetes_node_label_(.+)" + }, + { + "target_label": "__address__", + "replacement": "kubernetes.default.svc:443" + }, + { + "source_labels": [ + "__meta_kubernetes_node_name" + ], + "regex": "(.+)", + "target_label": "__metrics_path__", + "replacement": "/api/v1/nodes/$1/proxy/metrics" + } + ], + "metric_relabel_configs": [ + { + "source_labels": [ + "__name__" + ], + "regex": "(kubelet_volume_stats_used_bytes)", + "action": "keep" + } + ] + }, + { + "job_name": "kubernetes-service-endpoints", + "kubernetes_sd_configs": [ + { + "role": "endpoints" + } + ], + "relabel_configs": [ + { + "source_labels": [ + "__meta_kubernetes_service_annotation_prometheus_io_scrape" + ], + "action": "keep", + "regex": true + }, + { + "source_labels": [ + "__meta_kubernetes_endpoints_name" + ], + "action": "keep", + "regex": "(.*node-exporter|kubecost-network-costs)" + }, + { + "source_labels": [ + "__meta_kubernetes_service_annotation_prometheus_io_scheme" + ], + "action": "replace", + "target_label": "__scheme__", + "regex": "(https?)" + }, + { + "source_labels": [ + "__meta_kubernetes_service_annotation_prometheus_io_path" + ], + "action": "replace", + "target_label": "__metrics_path__", + "regex": "(.+)" + }, + { + "source_labels": [ + "__address__", + "__meta_kubernetes_service_annotation_prometheus_io_port" + ], + "action": "replace", + "target_label": "__address__", + "regex": "([^:]+)(?::\\d+)?;(\\d+)", + "replacement": "$1:$2" + }, + { + "action": "labelmap", + "regex": "__meta_kubernetes_service_label_(.+)" + }, + { + "source_labels": [ + "__meta_kubernetes_namespace" + ], + "action": "replace", + "target_label": "kubernetes_namespace" + }, + { + "source_labels": [ + "__meta_kubernetes_service_name" + ], + "action": "replace", + "target_label": "kubernetes_name" + }, + { + "source_labels": [ + "__meta_kubernetes_pod_node_name" + ], + "action": "replace", + "target_label": "kubernetes_node" + } + ], + "metric_relabel_configs": [ + { + "source_labels": [ + "__name__" + ], + "regex": "(container_cpu_allocation|container_cpu_usage_seconds_total|container_fs_limit_bytes|container_fs_writes_bytes_total|container_gpu_allocation|container_memory_allocation_bytes|container_memory_usage_bytes|container_memory_working_set_bytes|container_network_receive_bytes_total|container_network_transmit_bytes_total|DCGM_FI_DEV_GPU_UTIL|deployment_match_labels|kube_daemonset_status_desired_number_scheduled|kube_daemonset_status_number_ready|kube_deployment_spec_replicas|kube_deployment_status_replicas|kube_deployment_status_replicas_available|kube_job_status_failed|kube_namespace_annotations|kube_namespace_labels|kube_node_info|kube_node_labels|kube_node_status_allocatable|kube_node_status_allocatable_cpu_cores|kube_node_status_allocatable_memory_bytes|kube_node_status_capacity|kube_node_status_capacity_cpu_cores|kube_node_status_capacity_memory_bytes|kube_node_status_condition|kube_persistentvolume_capacity_bytes|kube_persistentvolume_status_phase|kube_persistentvolumeclaim_info|kube_persistentvolumeclaim_resource_requests_storage_bytes|kube_pod_container_info|kube_pod_container_resource_limits|kube_pod_container_resource_limits_cpu_cores|kube_pod_container_resource_limits_memory_bytes|kube_pod_container_resource_requests|kube_pod_container_resource_requests_cpu_cores|kube_pod_container_resource_requests_memory_bytes|kube_pod_container_status_restarts_total|kube_pod_container_status_running|kube_pod_container_status_terminated_reason|kube_pod_labels|kube_pod_owner|kube_pod_status_phase|kube_replicaset_owner|kube_statefulset_replicas|kube_statefulset_status_replicas|kubecost_cluster_info|kubecost_cluster_management_cost|kubecost_cluster_memory_working_set_bytes|kubecost_load_balancer_cost|kubecost_network_internet_egress_cost|kubecost_network_region_egress_cost|kubecost_network_zone_egress_cost|kubecost_node_is_spot|kubecost_pod_network_egress_bytes_total|node_cpu_hourly_cost|node_cpu_seconds_total|node_disk_reads_completed|node_disk_reads_completed_total|node_disk_writes_completed|node_disk_writes_completed_total|node_filesystem_device_error|node_gpu_count|node_gpu_hourly_cost|node_memory_Buffers_bytes|node_memory_Cached_bytes|node_memory_MemAvailable_bytes|node_memory_MemFree_bytes|node_memory_MemTotal_bytes|node_network_transmit_bytes_total|node_ram_hourly_cost|node_total_hourly_cost|pod_pvc_allocation|pv_hourly_cost|service_selector_labels|statefulSet_match_labels|kubecost_pv_info|up)", + "action": "keep" + } + ] + } + ] + }, + "rules": { + "groups": [ + { + "name": "CPU", + "rules": [ + { + "expr": "sum(rate(container_cpu_usage_seconds_total{container!=\"\"}[5m]))", + "record": "cluster:cpu_usage:rate5m" + }, + { + "expr": "rate(container_cpu_usage_seconds_total{container!=\"\"}[5m])", + "record": "cluster:cpu_usage_nosum:rate5m" + }, + { + "expr": "avg(irate(container_cpu_usage_seconds_total{container!=\"POD\", container!=\"\"}[5m])) by (container,pod,namespace)", + "record": "kubecost_container_cpu_usage_irate" + }, + { + "expr": "sum(container_memory_working_set_bytes{container!=\"POD\",container!=\"\"}) by (container,pod,namespace)", + "record": "kubecost_container_memory_working_set_bytes" + }, + { + "expr": "sum(container_memory_working_set_bytes{container!=\"POD\",container!=\"\"})", + "record": "kubecost_cluster_memory_working_set_bytes" + } + ] + }, + { + "name": "Savings", + "rules": [ + { + "expr": "sum(avg(kube_pod_owner{owner_kind!=\"DaemonSet\"}) by (pod) * sum(container_cpu_allocation) by (pod))", + "record": "kubecost_savings_cpu_allocation", + "labels": { + "daemonset": "false" + } + }, + { + "expr": "sum(avg(kube_pod_owner{owner_kind=\"DaemonSet\"}) by (pod) * sum(container_cpu_allocation) by (pod)) / sum(kube_node_info)", + "record": "kubecost_savings_cpu_allocation", + "labels": { + "daemonset": "true" + } + }, + { + "expr": "sum(avg(kube_pod_owner{owner_kind!=\"DaemonSet\"}) by (pod) * sum(container_memory_allocation_bytes) by (pod))", + "record": "kubecost_savings_memory_allocation_bytes", + "labels": { + "daemonset": "false" + } + }, + { + "expr": "sum(avg(kube_pod_owner{owner_kind=\"DaemonSet\"}) by (pod) * sum(container_memory_allocation_bytes) by (pod)) / sum(kube_node_info)", + "record": "kubecost_savings_memory_allocation_bytes", + "labels": { + "daemonset": "true" + } + } + ] + } + ] + } + }, + "alertRelabelConfigs": null, + "networkPolicy": { + "enabled": false + } + }, + "networkCosts": { + "enabled": false, + "image": { + "repository": "gcr.io/kubecost1/kubecost-network-costs", + "tag": "v0.17.2" + }, + "imagePullPolicy": "Always", + "updateStrategy": { + "type": "RollingUpdate" + }, + "prometheusScrape": false, + "trafficLogging": true, + "port": 3001, + "resources": { + "limits": { + "cpu": "500m" + }, + "requests": { + "cpu": "50m", + "memory": "20Mi" + } + }, + "extraArgs": [], + "config": { + "destinations": { + "in-zone": [ + "127.0.0.0/8", + "169.254.0.0/16", + "10.0.0.0/8", + "172.16.0.0/12", + "192.168.0.0/16" + ], + "in-region": [], + "cross-region": [], + "internet": [], + "direct-classification": [] + }, + "services": { + "google-cloud-services": false, + "amazon-web-services": false, + "azure-cloud-services": false + } + }, + "tolerations": [], + "affinity": {}, + "service": { + "annotations": {}, + "labels": {} + }, + "priorityClassName": "", + "podMonitor": { + "enabled": false, + "additionalLabels": {} + }, + "additionalLabels": {}, + "nodeSelector": {}, + "annotations": {}, + "healthCheckProbes": {}, + "additionalSecurityContext": {} + }, + "kubecostDeployment": { + "statefulSet": { + "enabled": false + }, + "replicas": 1, + "labels": {}, + "annotations": {} + }, + "forecasting": { + "enabled": true, + "fullImageName": "gcr.io/kubecost1/kubecost-modeling:v0.1.3", + "resources": { + "requests": { + "cpu": "200m", + "memory": "300Mi" + }, + "limits": { + "cpu": "1500m", + "memory": "1Gi" + } + }, + "env": { + "GUNICORN_CMD_ARGS": "--log-level info -t 1200" + }, + "priority": { + "enabled": false, + "name": "" + }, + "nodeSelector": {}, + "tolerations": {}, + "affinity": {}, + "readinessProbe": { + "enabled": true, + "initialDelaySeconds": 10, + "periodSeconds": 10, + "failureThreshold": 200 + }, + "livenessProbe": { + "enabled": true, + "initialDelaySeconds": 10, + "periodSeconds": 10, + "failureThreshold": 200 + } + }, + "kubecostAggregator": { + "deployMethod": "singlepod", + "enabled": false, + "replicas": 1, + "stagingEmptyDirSizeLimit": "2Gi", + "numDBCopyPartitions": 25, + "resources": {}, + "env": { + "LOG_LEVEL": "info", + "DB_READ_THREADS": "1", + "DB_WRITE_THREADS": "1", + "DB_CONCURRENT_INGESTION_COUNT": "3" + }, + "persistentConfigsStorage": { + "storageClass": "", + "storageRequest": "1Gi" + }, + "aggregatorDbStorage": { + "storageClass": "", + "storageRequest": "128Gi" + }, + "readinessProbe": { + "enabled": true, + "initialDelaySeconds": 10, + "periodSeconds": 10, + "failureThreshold": 200 + }, + "extraPorts": [], + "securityContext": {}, + "cloudCost": { + "enabled": false, + "resources": {}, + "readinessProbe": { + "enabled": true, + "initialDelaySeconds": 10, + "periodSeconds": 10, + "failureThreshold": 200 + } + }, + "jaeger": { + "enabled": false, + "image": "jaegertracing/all-in-one", + "imageVersion": "latest" + } + }, + "diagnostics": { + "enabled": true, + "primary": { + "enabled": false, + "retention": "7d", + "readonly": false + }, + "pollingInterval": "300s", + "keepDiagnosticHistory": false, + "collectHelmValues": false, + "deployment": { + "enabled": false, + "resources": { + "requests": { + "cpu": "10m", + "memory": "20Mi" + } + }, + "env": {}, + "labels": {}, + "securityContext": {}, + "containerSecurityContext": {}, + "nodeSelector": {}, + "tolerations": {}, + "affinity": {} + } + }, + "clusterController": { + "enabled": false, + "image": { + "repository": "gcr.io/kubecost1/cluster-controller", + "tag": "v0.15.2" + }, + "imagePullPolicy": "Always", + "priorityClassName": "", + "tolerations": [], + "actionConfigs": { + "namespaceTurndown": null, + "clusterRightsize": null, + "containerRightsize": null + }, + "kubescaler": { + "defaultResizeAll": false + }, + "namespaceTurndown": { + "rbac": { + "enabled": true + } + } + }, + "reporting": { + "logCollection": true, + "productAnalytics": true, + "errorReporting": true, + "valuesReporting": true + }, + "serviceMonitor": { + "enabled": false, + "additionalLabels": {}, + "metricRelabelings": [], + "relabelings": [], + "networkCosts": { + "enabled": false, + "scrapeTimeout": "10s", + "additionalLabels": {}, + "metricRelabelings": [], + "relabelings": [] + } + }, + "prometheusRule": { + "enabled": false, + "additionalLabels": {} + }, + "supportNFS": false, + "initChownDataImage": "busybox", + "initChownData": { + "resources": {} + }, + "grafana": { + "rbac": { + "create": true + }, + "replicas": 1, + "deploymentStrategy": "RollingUpdate", + "readinessProbe": { + "httpGet": { + "path": "/api/health", + "port": 3000 + } + }, + "livenessProbe": { + "httpGet": { + "path": "/api/health", + "port": 3000 + }, + "initialDelaySeconds": 60, + "timeoutSeconds": 30, + "failureThreshold": 10 + }, + "image": { + "repository": "grafana/grafana", + "tag": "10.3.1", + "pullPolicy": "IfNotPresent" + }, + "securityContext": {}, + "priorityClassName": "", + "downloadDashboardsImage": { + "repository": "curlimages/curl", + "tag": "latest", + "pullPolicy": "IfNotPresent" + }, + "podAnnotations": {}, + "annotations": {}, + "service": { + "type": "ClusterIP", + "port": 80, + "annotations": {}, + "labels": {} + }, + "ingress": { + "enabled": false, + "annotations": {}, + "labels": {}, + "path": "/", + "pathType": "Prefix", + "hosts": [ + "chart-example.local" + ], + "tls": [] + }, + "resources": {}, + "nodeSelector": {}, + "tolerations": [], + "affinity": {}, + "persistence": { + "enabled": false + }, + "adminUser": "admin", + "adminPassword": "strongpassword", + "env": {}, + "envFromSecret": "", + "extraSecretMounts": [], + "plugins": [], + "dashboardProviders": {}, + "dashboards": {}, + "dashboardsConfigMaps": {}, + "ldap": { + "existingSecret": "", + "config": "" + }, + "smtp": { + "existingSecret": "" + }, + "sidecar": { + "image": { + "repository": "kiwigrid/k8s-sidecar", + "tag": "1.25.4", + "pullPolicy": "IfNotPresent" + }, + "resources": {}, + "dashboards": { + "enabled": true, + "label": "grafana_dashboard", + "labelValue": "1", + "annotations": {}, + "error_throttle_sleep": 0, + "folder": "/tmp/dashboards" + }, + "datasources": { + "enabled": false, + "error_throttle_sleep": 0, + "label": "grafana_datasource" + } + }, + "grafana.ini": { + "server": { + "serve_from_sub_path": false, + "root_url": "%(protocol)s://%(domain)s:%(http_port)s/grafana" + }, + "paths": { + "data": "/var/lib/grafana/data", + "logs": "/var/log/grafana", + "plugins": "/var/lib/grafana/plugins", + "provisioning": "/etc/grafana/provisioning" + }, + "analytics": { + "check_for_updates": true + }, + "log": { + "mode": "console" + }, + "grafana_net": { + "url": "https://grafana.net" + }, + "auth.anonymous": { + "enabled": true, + "org_role": "Editor", + "org_name": "Main Org." + } + } + }, + "serviceAccount": { + "create": true, + "annotations": {} + }, + "awsstore": { + "useAwsStore": false, + "imageNameAndVersion": "gcr.io/kubecost1/awsstore:latest", + "createServiceAccount": false, + "priorityClassName": "", + "nodeSelector": {} + }, + "federatedETL": { + "agentOnly": false, + "federatedCluster": false, + "redirectS3Backup": false, + "useMultiClusterDB": false + }, + "kubecostAdmissionController": { + "enabled": false, + "secretName": "webhook-server-tls", + "caBundle": "${CA_BUNDLE}" + }, + "costEventsAudit": { + "enabled": false + }, + "extraObjects": [] + } + } + ] + capabilities: Basic Install + categories: Monitoring + containerImage: gcr.io/kubecost1/operator/kubecost-operator-controller:v2.1.0 + support: Stackwatch + createdAt: "2024-02-25T11:44:34Z" + operators.operatorframework.io/builder: operator-sdk-v1.32.0 + operators.operatorframework.io/project_layout: helm.sdk.operatorframework.io/v1 + description: |- + An operator that deploys Kubecost 2.1.0 via the Helm chart. + name: kubecost-operator.v2.1.0 + namespace: placeholder +spec: + apiservicedefinitions: {} + customresourcedefinitions: + owned: + - kind: CostAnalyzer + name: costanalyzers.charts.kubecost.com + version: v1alpha1 + displayName: CostAnalyzer + description: The CostAnalyzer API describes a deployment of Kubecost and its dependencies. + description: |- + Kubecost provides real-time cost visibility and insights for teams using Kubernetes, helping you continuously reduce your cloud costs. + + This OpenShift operator deploys Kubecost from the official Helm chart. + + Kubecost allows you to: + + * See allocated spend across all native Kubernetes concepts, so you can provide your teams with transparent, accurate cost data reconciled with your actual cloud bill. + * Join in-cluster costs like CPU and memory with out-of-cluster spend from cloud infrastructure services for complete cost visibility—all services from AWS, GCP, and Microsoft Azure are supported. + * Gain insights you can use to save 30-50% or more on your infrastructure spend, without exposing your private information—your data never gets shared externally, even with us. + * Have real-time alerts and recurring reports, empowering teams to take control of their Kubernetes-enabled infrastructure, stay within budgeted limits, and address monitoring interruptions immediately. + + Visit the Kubecost website for more details including features, pricing, documentation, and more at www.kubecost.com. + displayName: Kubecost + icon: + - base64data: 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 + mediatype: image/png + install: + spec: + clusterPermissions: + - rules: + - apiGroups: + - "" + resources: + - namespaces + - nodes + - persistentvolumes + verbs: + - get + - list + - watch + - apiGroups: + - "" + resources: + - secrets + verbs: + - '*' + - apiGroups: + - "" + resources: + - events + verbs: + - create + - apiGroups: + - charts.kubecost.com + resources: + - costanalyzers + - costanalyzers/status + - costanalyzers/finalizers + verbs: + - create + - delete + - get + - list + - patch + - update + - watch + - apiGroups: + - rbac.authorization.k8s.io + resources: + - clusterrolebindings + - clusterroles + verbs: + - '*' + - apiGroups: + - rbac.authorization.k8s.io + resources: + - rolebindings + - roles + verbs: + - '*' + - apiGroups: + - apps + resources: + - deployments + - daemonsets + - statefulsets + verbs: + - '*' + - apiGroups: + - networking.k8s.io + resources: + - ingresses + verbs: + - '*' + - apiGroups: + - "" + resources: + - configmaps + - persistentvolumeclaims + - secrets + - serviceaccounts + - services + verbs: + - '*' + - apiGroups: + - authentication.k8s.io + resources: + - tokenreviews + verbs: + - create + - apiGroups: + - authorization.k8s.io + resources: + - subjectaccessreviews + verbs: + - create + serviceAccountName: kubecost-operator-controller-manager + deployments: + - label: + app.kubernetes.io/component: manager + app.kubernetes.io/created-by: kubecost-operator + app.kubernetes.io/instance: controller-manager + app.kubernetes.io/managed-by: kustomize + app.kubernetes.io/name: deployment + app.kubernetes.io/part-of: kubecost-operator + control-plane: controller-manager + name: kubecost-operator-controller-manager + spec: + replicas: 1 + selector: + matchLabels: + control-plane: controller-manager + strategy: {} + template: + metadata: + annotations: + kubectl.kubernetes.io/default-container: manager + labels: + control-plane: controller-manager + spec: + affinity: + nodeAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + nodeSelectorTerms: + - matchExpressions: + - key: kubernetes.io/arch + operator: In + values: + - amd64 + - arm64 + - ppc64le + - s390x + - key: kubernetes.io/os + operator: In + values: + - linux + containers: + - args: + - --secure-listen-address=0.0.0.0:8443 + - --upstream=http://127.0.0.1:8080/ + - --logtostderr=true + - --v=0 + image: gcr.io/kubebuilder/kube-rbac-proxy:v0.13.1 + name: kube-rbac-proxy + ports: + - containerPort: 8443 + name: https + protocol: TCP + resources: + limits: + cpu: 500m + memory: 128Mi + requests: + cpu: 5m + memory: 64Mi + securityContext: + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL + - args: + - --health-probe-bind-address=:8081 + - --metrics-bind-address=127.0.0.1:8080 + - --leader-elect + - --leader-election-id=kubecost-operator + image: gcr.io/kubecost1/operator/kubecost-operator-controller:v2.1.0 + livenessProbe: + httpGet: + path: /healthz + port: 8081 + initialDelaySeconds: 15 + periodSeconds: 20 + name: manager + readinessProbe: + httpGet: + path: /readyz + port: 8081 + initialDelaySeconds: 5 + periodSeconds: 10 + resources: + limits: + cpu: 500m + memory: 512Mi + requests: + cpu: 10m + memory: 64Mi + securityContext: + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL + securityContext: + runAsNonRoot: true + serviceAccountName: kubecost-operator-controller-manager + terminationGracePeriodSeconds: 10 + permissions: + - rules: + - apiGroups: + - "" + resources: + - configmaps + verbs: + - get + - list + - watch + - create + - update + - patch + - delete + - apiGroups: + - coordination.k8s.io + resources: + - leases + verbs: + - get + - list + - watch + - create + - update + - patch + - delete + - apiGroups: + - "" + resources: + - events + verbs: + - create + - patch + serviceAccountName: kubecost-operator-controller-manager + strategy: deployment + installModes: + - supported: false + type: OwnNamespace + - supported: false + type: SingleNamespace + - supported: false + type: MultiNamespace + - supported: true + type: AllNamespaces + keywords: + - kubecost + - cost + - kubernetes + links: + - name: Kubecost + url: https://www.kubecost.com + maintainers: + - email: czoller@kubecost.com + name: Chip Zoller + maturity: alpha + provider: + name: Stackwatch + url: www.kubecost.com + version: 2.1.0 diff --git a/operators/kubecost/2.1.0/metadata/annotations.yaml b/operators/kubecost/2.1.0/metadata/annotations.yaml new file mode 100644 index 00000000000..4c8498b764a --- /dev/null +++ b/operators/kubecost/2.1.0/metadata/annotations.yaml @@ -0,0 +1,14 @@ +annotations: + # Core bundle annotations. + operators.operatorframework.io.bundle.mediatype.v1: registry+v1 + operators.operatorframework.io.bundle.manifests.v1: manifests/ + operators.operatorframework.io.bundle.metadata.v1: metadata/ + operators.operatorframework.io.bundle.package.v1: kubecost + operators.operatorframework.io.bundle.channels.v1: alpha + operators.operatorframework.io.metrics.builder: operator-sdk-v1.32.0 + operators.operatorframework.io.metrics.mediatype.v1: metrics+v1 + operators.operatorframework.io.metrics.project_layout: helm.sdk.operatorframework.io/v1 + + # Annotations for testing. + operators.operatorframework.io.test.mediatype.v1: scorecard+v1 + operators.operatorframework.io.test.config.v1: tests/scorecard/ diff --git a/operators/kubecost/2.1.0/tests/scorecard/config.yaml b/operators/kubecost/2.1.0/tests/scorecard/config.yaml new file mode 100644 index 00000000000..0c0690cc479 --- /dev/null +++ b/operators/kubecost/2.1.0/tests/scorecard/config.yaml @@ -0,0 +1,70 @@ +apiVersion: scorecard.operatorframework.io/v1alpha3 +kind: Configuration +metadata: + name: config +stages: +- parallel: true + tests: + - entrypoint: + - scorecard-test + - basic-check-spec + image: quay.io/operator-framework/scorecard-test:v1.31.0 + labels: + suite: basic + test: basic-check-spec-test + storage: + spec: + mountPath: {} + - entrypoint: + - scorecard-test + - olm-bundle-validation + image: quay.io/operator-framework/scorecard-test:v1.31.0 + labels: + suite: olm + test: olm-bundle-validation-test + storage: + spec: + mountPath: {} + - entrypoint: + - scorecard-test + - olm-crds-have-validation + image: quay.io/operator-framework/scorecard-test:v1.31.0 + labels: + suite: olm + test: olm-crds-have-validation-test + storage: + spec: + mountPath: {} + - entrypoint: + - scorecard-test + - olm-crds-have-resources + image: quay.io/operator-framework/scorecard-test:v1.31.0 + labels: + suite: olm + test: olm-crds-have-resources-test + storage: + spec: + mountPath: {} + - entrypoint: + - scorecard-test + - olm-spec-descriptors + image: quay.io/operator-framework/scorecard-test:v1.31.0 + labels: + suite: olm + test: olm-spec-descriptors-test + storage: + spec: + mountPath: {} + - entrypoint: + - scorecard-test + - olm-status-descriptors + image: quay.io/operator-framework/scorecard-test:v1.31.0 + labels: + suite: olm + test: olm-status-descriptors-test + storage: + spec: + mountPath: {} +storage: + spec: + mountPath: {} From 3a47cfff5fddf75cd93ad15f67aa41515d4077f4 Mon Sep 17 00:00:00 2001 From: chipzoller Date: Sun, 25 Feb 2024 09:56:37 -0500 Subject: [PATCH 2/6] remove old Signed-off-by: chipzoller --- operators/kubecost/1.97.0/bundle.Dockerfile | 20 - .../charts.kubecost.com_costanalyzers.yaml | 50 - ...er-manager-metrics-service_v1_service.yaml | 17 - .../kubecost-manager-config_v1_configmap.yaml | 26 - ...c.authorization.k8s.io_v1_clusterrole.yaml | 10 - .../kubecost.clusterserviceversion.yaml | 1894 ----------------- .../kubecost/1.97.0/metadata/annotations.yaml | 17 - .../1.97.0/tests/scorecard/config.yaml | 70 - operators/kubecost/1.99.0/bundle.Dockerfile | 20 - .../charts.kubecost.com_costanalyzers.yaml | 50 - ...er-manager-metrics-service_v1_service.yaml | 17 - .../kubecost-manager-config_v1_configmap.yaml | 26 - ...c.authorization.k8s.io_v1_clusterrole.yaml | 10 - .../kubecost.clusterserviceversion.yaml | 506 ----- .../kubecost/1.99.0/metadata/annotations.yaml | 17 - .../1.99.0/tests/scorecard/config.yaml | 70 - 16 files changed, 2820 deletions(-) delete mode 100644 operators/kubecost/1.97.0/bundle.Dockerfile delete mode 100644 operators/kubecost/1.97.0/manifests/charts.kubecost.com_costanalyzers.yaml delete mode 100644 operators/kubecost/1.97.0/manifests/kubecost-controller-manager-metrics-service_v1_service.yaml delete mode 100644 operators/kubecost/1.97.0/manifests/kubecost-manager-config_v1_configmap.yaml delete mode 100644 operators/kubecost/1.97.0/manifests/kubecost-metrics-reader_rbac.authorization.k8s.io_v1_clusterrole.yaml delete mode 100644 operators/kubecost/1.97.0/manifests/kubecost.clusterserviceversion.yaml delete mode 100644 operators/kubecost/1.97.0/metadata/annotations.yaml delete mode 100644 operators/kubecost/1.97.0/tests/scorecard/config.yaml delete mode 100644 operators/kubecost/1.99.0/bundle.Dockerfile delete mode 100644 operators/kubecost/1.99.0/manifests/charts.kubecost.com_costanalyzers.yaml delete mode 100644 operators/kubecost/1.99.0/manifests/kubecost-controller-manager-metrics-service_v1_service.yaml delete mode 100644 operators/kubecost/1.99.0/manifests/kubecost-manager-config_v1_configmap.yaml delete mode 100644 operators/kubecost/1.99.0/manifests/kubecost-metrics-reader_rbac.authorization.k8s.io_v1_clusterrole.yaml delete mode 100644 operators/kubecost/1.99.0/manifests/kubecost.clusterserviceversion.yaml delete mode 100644 operators/kubecost/1.99.0/metadata/annotations.yaml delete mode 100644 operators/kubecost/1.99.0/tests/scorecard/config.yaml diff --git a/operators/kubecost/1.97.0/bundle.Dockerfile b/operators/kubecost/1.97.0/bundle.Dockerfile deleted file mode 100644 index d8ea6815584..00000000000 --- a/operators/kubecost/1.97.0/bundle.Dockerfile +++ /dev/null @@ -1,20 +0,0 @@ -FROM scratch - -# Core bundle labels. -LABEL operators.operatorframework.io.bundle.mediatype.v1=registry+v1 -LABEL operators.operatorframework.io.bundle.manifests.v1=manifests/ -LABEL operators.operatorframework.io.bundle.metadata.v1=metadata/ -LABEL operators.operatorframework.io.bundle.package.v1=kubecost -LABEL operators.operatorframework.io.bundle.channels.v1=1.97.0 -LABEL operators.operatorframework.io.metrics.builder=operator-sdk-v1.24.0 -LABEL operators.operatorframework.io.metrics.mediatype.v1=metrics+v1 -LABEL operators.operatorframework.io.metrics.project_layout=helm.sdk.operatorframework.io/v1 - -# Labels for testing. -LABEL operators.operatorframework.io.test.mediatype.v1=scorecard+v1 -LABEL operators.operatorframework.io.test.config.v1=tests/scorecard/ - -# Copy files to locations specified by labels. -COPY manifests /manifests/ -COPY metadata /metadata/ -COPY tests/scorecard /tests/scorecard/ diff --git a/operators/kubecost/1.97.0/manifests/charts.kubecost.com_costanalyzers.yaml b/operators/kubecost/1.97.0/manifests/charts.kubecost.com_costanalyzers.yaml deleted file mode 100644 index 60a6a7653ae..00000000000 --- a/operators/kubecost/1.97.0/manifests/charts.kubecost.com_costanalyzers.yaml +++ /dev/null @@ -1,50 +0,0 @@ -apiVersion: apiextensions.k8s.io/v1 -kind: CustomResourceDefinition -metadata: - creationTimestamp: null - name: costanalyzers.charts.kubecost.com -spec: - group: charts.kubecost.com - names: - kind: CostAnalyzer - listKind: CostAnalyzerList - plural: costanalyzers - singular: costanalyzer - scope: Namespaced - versions: - - name: v1alpha1 - schema: - openAPIV3Schema: - description: CostAnalyzer is the Schema for the costanalyzers API - properties: - apiVersion: - description: 'APIVersion defines the versioned schema of this representation - of an object. Servers should convert recognized schemas to the latest - internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' - type: string - kind: - description: 'Kind is a string value representing the REST resource this - object represents. Servers may infer this from the endpoint the client - submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' - type: string - metadata: - type: object - spec: - description: Spec defines the desired state of CostAnalyzer - type: object - x-kubernetes-preserve-unknown-fields: true - status: - description: Status defines the observed state of CostAnalyzer - type: object - x-kubernetes-preserve-unknown-fields: true - type: object - served: true - storage: true - subresources: - status: {} -status: - acceptedNames: - kind: "" - plural: "" - conditions: null - storedVersions: null diff --git a/operators/kubecost/1.97.0/manifests/kubecost-controller-manager-metrics-service_v1_service.yaml b/operators/kubecost/1.97.0/manifests/kubecost-controller-manager-metrics-service_v1_service.yaml deleted file mode 100644 index 260a2e2aca5..00000000000 --- a/operators/kubecost/1.97.0/manifests/kubecost-controller-manager-metrics-service_v1_service.yaml +++ /dev/null @@ -1,17 +0,0 @@ -apiVersion: v1 -kind: Service -metadata: - creationTimestamp: null - labels: - control-plane: controller-manager - name: kubecost-controller-manager-metrics-service -spec: - ports: - - name: https - port: 8443 - protocol: TCP - targetPort: https - selector: - control-plane: controller-manager -status: - loadBalancer: {} diff --git a/operators/kubecost/1.97.0/manifests/kubecost-manager-config_v1_configmap.yaml b/operators/kubecost/1.97.0/manifests/kubecost-manager-config_v1_configmap.yaml deleted file mode 100644 index cdd7c868656..00000000000 --- a/operators/kubecost/1.97.0/manifests/kubecost-manager-config_v1_configmap.yaml +++ /dev/null @@ -1,26 +0,0 @@ -apiVersion: v1 -data: - controller_manager_config.yaml: | - apiVersion: controller-runtime.sigs.k8s.io/v1alpha1 - kind: ControllerManagerConfig - health: - healthProbeBindAddress: :8081 - metrics: - bindAddress: 127.0.0.1:8080 - - leaderElection: - leaderElect: true - resourceName: 811c9dc5.kubecost.com - # leaderElectionReleaseOnCancel defines if the leader should step down volume - # when the Manager ends. This requires the binary to immediately end when the - # Manager is stopped, otherwise, this setting is unsafe. Setting this significantly - # speeds up voluntary leader transitions as the new leader don't have to wait - # LeaseDuration time first. - # In the default scaffold provided, the program ends immediately after - # the manager stops, so would be fine to enable this option. However, - # if you are doing or is intended to do any operation such as perform cleanups - # after the manager stops then its usage might be unsafe. - # leaderElectionReleaseOnCancel: true -kind: ConfigMap -metadata: - name: kubecost-manager-config diff --git a/operators/kubecost/1.97.0/manifests/kubecost-metrics-reader_rbac.authorization.k8s.io_v1_clusterrole.yaml b/operators/kubecost/1.97.0/manifests/kubecost-metrics-reader_rbac.authorization.k8s.io_v1_clusterrole.yaml deleted file mode 100644 index f8c33bb3211..00000000000 --- a/operators/kubecost/1.97.0/manifests/kubecost-metrics-reader_rbac.authorization.k8s.io_v1_clusterrole.yaml +++ /dev/null @@ -1,10 +0,0 @@ -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - creationTimestamp: null - name: kubecost-metrics-reader -rules: -- nonResourceURLs: - - /metrics - verbs: - - get diff --git a/operators/kubecost/1.97.0/manifests/kubecost.clusterserviceversion.yaml b/operators/kubecost/1.97.0/manifests/kubecost.clusterserviceversion.yaml deleted file mode 100644 index bd4981b8a78..00000000000 --- a/operators/kubecost/1.97.0/manifests/kubecost.clusterserviceversion.yaml +++ /dev/null @@ -1,1894 +0,0 @@ -apiVersion: operators.coreos.com/v1alpha1 -kind: ClusterServiceVersion -metadata: - annotations: - alm-examples: |- - [ - { - "apiVersion": "charts.kubecost.com/v1alpha1", - "kind": "CostAnalyzer", - "metadata": { - "name": "costanalyzer-sample" - }, - "spec": { - "openshiftDeployment": true, - "affinity": {}, - "awsstore": { - "createServiceAccount": false, - "useAwsStore": false - }, - "clusterController": { - "enabled": false, - "image": "gcr.io/kubecost1/cluster-controller:v0.1.0", - "imagePullPolicy": "Always" - }, - "extraVolumeMounts": [], - "extraVolumes": [], - "global": { - "additionalLabels": {}, - "amp": { - "enabled": false, - "prometheusServerEndpoint": "https://localhost:8085/\u003cworkspaceId\u003e/", - "remoteWriteService": "https://aps-workspaces.us-west-2.amazonaws.com/workspaces/\u003cworkspaceId\u003e/api/v1/remote_write", - "sigv4": { - "region": "us-west-2" - } - }, - "assetReports": { - "enabled": false, - "reports": [ - { - "accumulate": false, - "aggregateBy": "type", - "filters": [ - { - "property": "cluster", - "value": "cluster-one" - } - ], - "title": "Example Asset Report 0", - "window": "today" - } - ] - }, - "grafana": { - "domainName": "cost-analyzer-grafana.default.svc", - "enabled": true, - "proxy": true, - "scheme": "http" - }, - "notifications": { - "alertmanager": { - "enabled": false, - "fqdn": "http://cost-analyzer-prometheus-server.default.svc" - } - }, - "podAnnotations": {}, - "prometheus": { - "enabled": true, - "fqdn": "http://cost-analyzer-prometheus-server.default.svc" - }, - "savedReports": { - "enabled": false, - "reports": [ - { - "accumulate": false, - "aggregateBy": "namespace", - "filters": [ - { - "property": "cluster", - "value": "cluster-one,cluster*" - }, - { - "property": "namespace", - "value": "kubecost" - } - ], - "idle": "separate", - "title": "Example Saved Report 0", - "window": "today" - }, - { - "accumulate": false, - "aggregateBy": "controllerKind", - "filters": [ - { - "property": "label", - "value": "app:cost*,environment:kube*" - }, - { - "property": "namespace", - "value": "kubecost" - } - ], - "idle": "share", - "title": "Example Saved Report 1", - "window": "month" - }, - { - "accumulate": true, - "aggregateBy": "service", - "filters": [], - "idle": "hide", - "title": "Example Saved Report 2", - "window": "2020-11-11T00:00:00Z,2020-12-09T23:59:59Z" - } - ] - }, - "thanos": { - "enabled": false - } - }, - "grafana": { - "adminPassword": "strongpassword", - "adminUser": "admin", - "affinity": {}, - "dashboardProviders": {}, - "dashboards": {}, - "dashboardsConfigMaps": {}, - "datasources": { - "datasources.yaml": { - "apiVersion": 1, - "datasources": [ - { - "access": "proxy", - "isDefault": false, - "name": "prometheus-kubecost", - "type": "prometheus", - "url": "http://kubecost-prometheus-server.kubecost.svc.cluster.local" - } - ] - } - }, - "deploymentStrategy": "RollingUpdate", - "downloadDashboardsImage": { - "pullPolicy": "IfNotPresent", - "repository": "curlimages/curl", - "tag": "latest" - }, - "env": {}, - "envFromSecret": "", - "extraSecretMounts": [], - "global": { - "additionalLabels": {}, - "amp": { - "enabled": false, - "prometheusServerEndpoint": "https://localhost:8085/\u003cworkspaceId\u003e/", - "remoteWriteService": "https://aps-workspaces.us-west-2.amazonaws.com/workspaces/\u003cworkspaceId\u003e/api/v1/remote_write", - "sigv4": { - "region": "us-west-2" - } - }, - "assetReports": { - "enabled": false, - "reports": [ - { - "accumulate": false, - "aggregateBy": "type", - "filters": [ - { - "property": "cluster", - "value": "cluster-one" - } - ], - "title": "Example Asset Report 0", - "window": "today" - } - ] - }, - "grafana": { - "domainName": "cost-analyzer-grafana.default.svc", - "enabled": true, - "proxy": true, - "scheme": "http" - }, - "notifications": { - "alertmanager": { - "enabled": false, - "fqdn": "http://cost-analyzer-prometheus-server.default.svc" - } - }, - "podAnnotations": {}, - "prometheus": { - "enabled": true, - "fqdn": "http://cost-analyzer-prometheus-server.default.svc" - }, - "savedReports": { - "enabled": false, - "reports": [ - { - "accumulate": false, - "aggregateBy": "namespace", - "filters": [ - { - "property": "cluster", - "value": "cluster-one,cluster*" - }, - { - "property": "namespace", - "value": "kubecost" - } - ], - "idle": "separate", - "title": "Example Saved Report 0", - "window": "today" - }, - { - "accumulate": false, - "aggregateBy": "controllerKind", - "filters": [ - { - "property": "label", - "value": "app:cost*,environment:kube*" - }, - { - "property": "namespace", - "value": "kubecost" - } - ], - "idle": "share", - "title": "Example Saved Report 1", - "window": "month" - }, - { - "accumulate": true, - "aggregateBy": "service", - "filters": [], - "idle": "hide", - "title": "Example Saved Report 2", - "window": "2020-11-11T00:00:00Z,2020-12-09T23:59:59Z" - } - ] - }, - "thanos": { - "enabled": false - } - }, - "grafana.ini": { - "analytics": { - "check_for_updates": true - }, - "auth.anonymous": { - "enabled": true, - "org_name": "Main Org.", - "org_role": "Editor" - }, - "grafana_net": { - "url": "https://grafana.net" - }, - "log": { - "mode": "console" - }, - "paths": { - "data": "/var/lib/grafana/data", - "logs": "/var/log/grafana", - "plugins": "/var/lib/grafana/plugins", - "provisioning": "/etc/grafana/provisioning" - }, - "server": { - "root_url": "%(protocol)s://%(domain)s:%(http_port)s/grafana" - } - }, - "image": { - "pullPolicy": "IfNotPresent", - "repository": "grafana/grafana", - "tag": "9.0.2" - }, - "ingress": { - "annotations": {}, - "enabled": false, - "hosts": [ - "chart-example.local" - ], - "labels": {}, - "path": "/", - "tls": [] - }, - "ldap": { - "config": "", - "existingSecret": "" - }, - "livenessProbe": { - "failureThreshold": 10, - "httpGet": { - "path": "/api/health", - "port": 3000 - }, - "initialDelaySeconds": 60, - "timeoutSeconds": 30 - }, - "nodeSelector": {}, - "persistence": { - "enabled": false - }, - "plugins": [], - "rbac": { - "create": true, - "pspEnabled": true, - "pspUseAppArmor": true - }, - "readinessProbe": { - "httpGet": { - "path": "/api/health", - "port": 3000 - } - }, - "replicas": 1, - "resources": {}, - "securityContext": { - "fsGroup": 472, - "runAsUser": 472 - }, - "service": { - "annotations": {}, - "labels": {}, - "port": 80, - "type": "ClusterIP" - }, - "serviceAccount": { - "create": true, - "name": null - }, - "sidecar": { - "dashboards": { - "annotations": {}, - "enabled": true, - "error_throttle_sleep": 0, - "folder": "/tmp/dashboards", - "label": "grafana_dashboard" - }, - "datasources": { - "enabled": false, - "error_throttle_sleep": 0, - "label": "grafana_datasource" - }, - "image": "kiwigrid/k8s-sidecar:1.19.2", - "imagePullPolicy": "IfNotPresent", - "resources": null - }, - "smtp": { - "existingSecret": "" - }, - "tolerations": [] - }, - "ingress": { - "annotations": null, - "enabled": false, - "hosts": [ - "cost-analyzer.local" - ], - "pathType": "ImplementationSpecific", - "paths": [ - "/" - ], - "tls": [] - }, - "initChownData": { - "resources": {} - }, - "initChownDataImage": "busybox", - "kubecostDeployment": { - "leaderFollower": { - "enabled": false - }, - "replicas": 1 - }, - "kubecostFrontend": { - "image": "gcr.io/kubecost1/frontend", - "imagePullPolicy": "Always", - "ipv6": { - "enabled": true - }, - "resources": { - "requests": { - "cpu": "10m", - "memory": "55Mi" - } - } - }, - "kubecostMetrics": { - "exporter": { - "additionalLabels": {}, - "affinity": {}, - "enabled": false, - "extraArgs": [], - "nodeSelector": {}, - "port": 9005, - "priorityClassName": [], - "prometheusScrape": true, - "resources": {}, - "service": { - "annotations": {} - }, - "serviceMonitor": { - "additionalLabels": {}, - "enabled": false - }, - "tolerations": [] - } - }, - "kubecostModel": { - "etl": true, - "etlDailyStoreDurationDays": 91, - "etlFileStoreEnabled": true, - "etlHourlyStoreDurationHours": 49, - "etlReadOnlyMode": false, - "extraArgs": [], - "image": "gcr.io/kubecost1/cost-model", - "imagePullPolicy": "Always", - "maxQueryConcurrency": 5, - "outOfClusterPromMetricsEnabled": false, - "resources": { - "requests": { - "cpu": "200m", - "memory": "55Mi" - } - }, - "warmCache": false, - "warmSavingsCache": true - }, - "kubecostToken": null, - "networkCosts": { - "additionalLabels": {}, - "affinity": {}, - "annotations": {}, - "config": { - "destinations": { - "cross-region": [], - "direct-classification": [], - "in-region": [], - "in-zone": [ - "127.0.0.1", - "169.254.0.0/16", - "10.0.0.0/8", - "172.16.0.0/12", - "192.168.0.0/16" - ] - }, - "services": { - "amazon-web-services": false, - "azure-cloud-services": false, - "google-cloud-services": false - } - }, - "enabled": false, - "extraArgs": [], - "image": "gcr.io/kubecost1/kubecost-network-costs:v16.0", - "imagePullPolicy": "Always", - "nodeSelector": {}, - "podMonitor": { - "additionalLabels": {}, - "enabled": false - }, - "podSecurityPolicy": { - "enabled": false - }, - "port": 3001, - "priorityClassName": [], - "prometheusScrape": false, - "resources": {}, - "service": { - "annotations": {} - }, - "tolerations": [], - "trafficLogging": true, - "updateStrategy": { - "type": "RollingUpdate" - } - }, - "networkPolicy": { - "costAnalyzer": { - "additionalLabels": {}, - "annotations": {}, - "enabled": false - }, - "denyEgress": true, - "enabled": false, - "sameNamespace": true - }, - "nodeSelector": {}, - "oidc": { - "authURL": "https://my.auth.server/authorize", - "clientID": "", - "clientSecret": "", - "discoveryURL": "https://my.auth.server/.well-known/openid-configuration", - "enabled": false, - "loginRedirectURL": "http://my.kubecost.url/model/oidc/authorize", - "secretName": "kubecost-oidc-secret" - }, - "persistentVolume": { - "dbSize": "32.0Gi", - "enabled": true, - "size": "32Gi" - }, - "podSecurityPolicy": { - "enabled": true - }, - "pricingCsv": { - "enabled": false, - "location": { - "URI": "s3://kc-csv-test/pricing_schema.csv", - "csvAccessCredentials": "pricing-schema-access-secret", - "provider": "AWS", - "region": "us-east-1" - } - }, - "priority": { - "enabled": false, - "name": "" - }, - "prometheus": { - "alertRelabelConfigs": null, - "alertmanager": { - "affinity": {}, - "baseURL": "http://localhost:9093", - "configFileName": "alertmanager.yml", - "configFromSecret": "", - "configMapOverrideName": "", - "enabled": false, - "extraArgs": {}, - "extraEnv": {}, - "extraSecretMounts": [], - "image": { - "pullPolicy": "IfNotPresent", - "repository": "quay.io/prometheus/alertmanager", - "tag": "v0.23.0" - }, - "ingress": { - "annotations": {}, - "enabled": false, - "extraLabels": {}, - "extraPaths": [], - "hosts": [], - "tls": [] - }, - "name": "alertmanager", - "nodeSelector": {}, - "persistentVolume": { - "accessModes": [ - "ReadWriteOnce" - ], - "annotations": {}, - "enabled": true, - "existingClaim": "", - "mountPath": "/data", - "size": "2Gi", - "subPath": "" - }, - "podAnnotations": {}, - "podDisruptionBudget": { - "enabled": false, - "maxUnavailable": 1 - }, - "podLabels": {}, - "podSecurityPolicy": { - "annotations": {} - }, - "prefixURL": "", - "priorityClassName": "", - "replicaCount": 1, - "resources": {}, - "securityContext": {}, - "service": { - "annotations": {}, - "clusterIP": "", - "externalIPs": [], - "labels": {}, - "loadBalancerIP": "", - "loadBalancerSourceRanges": [], - "servicePort": 80, - "sessionAffinity": "None", - "type": "ClusterIP" - }, - "statefulSet": { - "enabled": false, - "headless": { - "annotations": {}, - "labels": {}, - "servicePort": 80 - }, - "podManagementPolicy": "OrderedReady" - }, - "strategy": { - "rollingUpdate": null, - "type": "Recreate" - }, - "tolerations": [] - }, - "alertmanagerFiles": { - "alertmanager.yml": { - "global": {}, - "receivers": [ - { - "name": "default-receiver" - } - ], - "route": { - "group_interval": "5m", - "group_wait": "10s", - "receiver": "default-receiver", - "repeat_interval": "3h" - } - } - }, - "configmapReload": { - "alertmanager": { - "enabled": true, - "extraArgs": {}, - "extraConfigmapMounts": [], - "extraVolumeDirs": [], - "image": { - "pullPolicy": "IfNotPresent", - "repository": "jimmidyson/configmap-reload", - "tag": "v0.7.1" - }, - "name": "configmap-reload", - "resources": {} - }, - "prometheus": { - "enabled": true, - "extraArgs": {}, - "extraConfigmapMounts": [], - "extraVolumeDirs": [], - "image": { - "pullPolicy": "IfNotPresent", - "repository": "jimmidyson/configmap-reload", - "tag": "v0.7.1" - }, - "name": "configmap-reload", - "resources": {} - } - }, - "extraScrapeConfigs": "- job_name: kubecost\n honor_labels: true\n scrape_interval: 1m\n scrape_timeout: 60s\n metrics_path: /metrics\n scheme: http\n dns_sd_configs:\n - names:\n - {{ template \"cost-analyzer.serviceName\" . }}\n type: 'A'\n port: 9003\n- job_name: kubecost-networking\n kubernetes_sd_configs:\n - role: pod\n relabel_configs:\n # Scrape only the the targets matching the following metadata\n - source_labels: [__meta_kubernetes_pod_label_app]\n action: keep\n regex: {{ template \"cost-analyzer.networkCostsName\" . }}\n", - "global": { - "additionalLabels": {}, - "amp": { - "enabled": false, - "prometheusServerEndpoint": "https://localhost:8085/\u003cworkspaceId\u003e/", - "remoteWriteService": "https://aps-workspaces.us-west-2.amazonaws.com/workspaces/\u003cworkspaceId\u003e/api/v1/remote_write", - "sigv4": { - "region": "us-west-2" - } - }, - "assetReports": { - "enabled": false, - "reports": [ - { - "accumulate": false, - "aggregateBy": "type", - "filters": [ - { - "property": "cluster", - "value": "cluster-one" - } - ], - "title": "Example Asset Report 0", - "window": "today" - } - ] - }, - "grafana": { - "domainName": "cost-analyzer-grafana.default.svc", - "enabled": true, - "proxy": true, - "scheme": "http" - }, - "notifications": { - "alertmanager": { - "enabled": false, - "fqdn": "http://cost-analyzer-prometheus-server.default.svc" - } - }, - "podAnnotations": {}, - "prometheus": { - "enabled": true, - "fqdn": "http://cost-analyzer-prometheus-server.default.svc" - }, - "savedReports": { - "enabled": false, - "reports": [ - { - "accumulate": false, - "aggregateBy": "namespace", - "filters": [ - { - "property": "cluster", - "value": "cluster-one,cluster*" - }, - { - "property": "namespace", - "value": "kubecost" - } - ], - "idle": "separate", - "title": "Example Saved Report 0", - "window": "today" - }, - { - "accumulate": false, - "aggregateBy": "controllerKind", - "filters": [ - { - "property": "label", - "value": "app:cost*,environment:kube*" - }, - { - "property": "namespace", - "value": "kubecost" - } - ], - "idle": "share", - "title": "Example Saved Report 1", - "window": "month" - }, - { - "accumulate": true, - "aggregateBy": "service", - "filters": [], - "idle": "hide", - "title": "Example Saved Report 2", - "window": "2020-11-11T00:00:00Z,2020-12-09T23:59:59Z" - } - ] - }, - "thanos": { - "enabled": false - } - }, - "imagePullSecrets": null, - "kube-state-metrics": { - "affinity": {}, - "autosharding": { - "enabled": false - }, - "collectors": { - "certificatesigningrequests": true, - "configmaps": true, - "cronjobs": true, - "daemonsets": true, - "deployments": true, - "endpoints": true, - "horizontalpodautoscalers": true, - "ingresses": true, - "jobs": true, - "limitranges": true, - "mutatingwebhookconfigurations": false, - "namespaces": true, - "networkpolicies": false, - "nodes": true, - "persistentvolumeclaims": true, - "persistentvolumes": true, - "poddisruptionbudgets": true, - "pods": true, - "replicasets": true, - "replicationcontrollers": true, - "resourcequotas": true, - "secrets": false, - "services": true, - "statefulsets": true, - "storageclasses": true, - "validatingwebhookconfigurations": false, - "verticalpodautoscalers": false, - "volumeattachments": false - }, - "customLabels": {}, - "disabled": false, - "enabled": true, - "global": { - "additionalLabels": {}, - "amp": { - "enabled": false, - "prometheusServerEndpoint": "https://localhost:8085/\u003cworkspaceId\u003e/", - "remoteWriteService": "https://aps-workspaces.us-west-2.amazonaws.com/workspaces/\u003cworkspaceId\u003e/api/v1/remote_write", - "sigv4": { - "region": "us-west-2" - } - }, - "assetReports": { - "enabled": false, - "reports": [ - { - "accumulate": false, - "aggregateBy": "type", - "filters": [ - { - "property": "cluster", - "value": "cluster-one" - } - ], - "title": "Example Asset Report 0", - "window": "today" - } - ] - }, - "grafana": { - "domainName": "cost-analyzer-grafana.default.svc", - "enabled": true, - "proxy": true, - "scheme": "http" - }, - "notifications": { - "alertmanager": { - "enabled": false, - "fqdn": "http://cost-analyzer-prometheus-server.default.svc" - } - }, - "podAnnotations": {}, - "prometheus": { - "enabled": true, - "fqdn": "http://cost-analyzer-prometheus-server.default.svc" - }, - "savedReports": { - "enabled": false, - "reports": [ - { - "accumulate": false, - "aggregateBy": "namespace", - "filters": [ - { - "property": "cluster", - "value": "cluster-one,cluster*" - }, - { - "property": "namespace", - "value": "kubecost" - } - ], - "idle": "separate", - "title": "Example Saved Report 0", - "window": "today" - }, - { - "accumulate": false, - "aggregateBy": "controllerKind", - "filters": [ - { - "property": "label", - "value": "app:cost*,environment:kube*" - }, - { - "property": "namespace", - "value": "kubecost" - } - ], - "idle": "share", - "title": "Example Saved Report 1", - "window": "month" - }, - { - "accumulate": true, - "aggregateBy": "service", - "filters": [], - "idle": "hide", - "title": "Example Saved Report 2", - "window": "2020-11-11T00:00:00Z,2020-12-09T23:59:59Z" - } - ] - }, - "thanos": { - "enabled": false - } - }, - "hostNetwork": false, - "image": { - "pullPolicy": "IfNotPresent", - "repository": "k8s.gcr.io/kube-state-metrics/kube-state-metrics", - "tag": "v1.9.8" - }, - "namespaceOverride": "", - "nodeSelector": {}, - "podAnnotations": {}, - "podSecurityPolicy": { - "annotations": {}, - "enabled": false - }, - "prometheus": { - "monitor": { - "additionalLabels": {}, - "enabled": false, - "honorLabels": false, - "namespace": "" - } - }, - "prometheusScrape": true, - "rbac": { - "create": true - }, - "replicas": 1, - "securityContext": { - "enabled": true, - "fsGroup": 65534, - "runAsUser": 65534 - }, - "service": { - "annotations": {}, - "loadBalancerIP": "", - "nodePort": 0, - "port": 8080, - "type": "ClusterIP" - }, - "serviceAccount": { - "create": true, - "imagePullSecrets": [] - }, - "tolerations": [] - }, - "kubeStateMetrics": { - "enabled": true - }, - "networkPolicy": { - "enabled": false - }, - "nodeExporter": { - "enabled": true, - "extraArgs": {}, - "extraConfigmapMounts": [], - "extraHostPathMounts": [], - "hostNetwork": true, - "hostPID": true, - "image": { - "pullPolicy": "IfNotPresent", - "repository": "prom/node-exporter", - "tag": "v1.3.0" - }, - "name": "node-exporter", - "nodeSelector": {}, - "pod": { - "labels": {} - }, - "podAnnotations": {}, - "podDisruptionBudget": { - "enabled": false, - "maxUnavailable": 1 - }, - "podSecurityPolicy": { - "annotations": {} - }, - "priorityClassName": "", - "resources": {}, - "securityContext": {}, - "service": { - "annotations": { - "prometheus.io/scrape": "true" - }, - "clusterIP": "None", - "externalIPs": [], - "hostPort": 9100, - "labels": {}, - "loadBalancerIP": "", - "loadBalancerSourceRanges": [], - "servicePort": 9100, - "type": "ClusterIP" - }, - "tolerations": [], - "updateStrategy": { - "type": "RollingUpdate" - } - }, - "podSecurityPolicy": { - "enabled": false - }, - "pushgateway": { - "enabled": false, - "extraArgs": {}, - "image": { - "pullPolicy": "IfNotPresent", - "repository": "prom/pushgateway", - "tag": "v1.4.2" - }, - "ingress": { - "annotations": {}, - "enabled": false, - "extraPaths": [], - "hosts": [], - "tls": [] - }, - "name": "pushgateway", - "nodeSelector": {}, - "persistentVolume": { - "accessModes": [ - "ReadWriteOnce" - ], - "annotations": {}, - "enabled": true, - "existingClaim": "", - "mountPath": "/data", - "size": "2Gi", - "subPath": "" - }, - "podAnnotations": {}, - "podDisruptionBudget": { - "enabled": false, - "maxUnavailable": 1 - }, - "podSecurityPolicy": { - "annotations": {} - }, - "priorityClassName": "", - "replicaCount": 1, - "resources": {}, - "securityContext": {}, - "service": { - "annotations": { - "prometheus.io/probe": "pushgateway" - }, - "clusterIP": "", - "externalIPs": [], - "labels": {}, - "loadBalancerIP": "", - "loadBalancerSourceRanges": [], - "servicePort": 9091, - "strategy": { - "rollingUpdate": null, - "type": "Recreate" - }, - "type": "ClusterIP" - }, - "tolerations": [] - }, - "rbac": { - "create": true - }, - "server": { - "affinity": {}, - "alertmanagers": [], - "baseURL": "", - "configMapOverrideName": "", - "configPath": "/etc/config/prometheus.yml", - "emptyDir": { - "sizeLimit": "" - }, - "enabled": true, - "env": [], - "extraArgs": { - "query.max-concurrency": 1, - "query.max-samples": 100000000 - }, - "extraConfigmapMounts": [], - "extraFlags": [ - "web.enable-lifecycle" - ], - "extraHostPathMounts": [], - "extraInitContainers": [], - "extraSecretMounts": [], - "extraVolumeMounts": [], - "extraVolumes": [], - "global": { - "evaluation_interval": "1m", - "external_labels": { - "cluster_id": "cluster-one" - }, - "scrape_interval": "1m", - "scrape_timeout": "10s" - }, - "image": { - "pullPolicy": "IfNotPresent", - "repository": "quay.io/prometheus/prometheus", - "tag": "v2.35.0" - }, - "ingress": { - "annotations": {}, - "enabled": false, - "extraLabels": {}, - "extraPaths": [], - "hosts": [], - "pathType": "Prefix", - "tls": [] - }, - "livenessProbeFailureThreshold": 3, - "livenessProbeInitialDelay": 30, - "livenessProbeSuccessThreshold": 1, - "livenessProbeTimeout": 30, - "name": "server", - "nodeSelector": {}, - "persistentVolume": { - "accessModes": [ - "ReadWriteOnce" - ], - "annotations": {}, - "enabled": true, - "existingClaim": "", - "mountPath": "/data", - "size": "32Gi", - "subPath": "" - }, - "podAnnotations": {}, - "podDisruptionBudget": { - "enabled": false, - "maxUnavailable": 1 - }, - "podLabels": {}, - "podSecurityPolicy": { - "annotations": {} - }, - "prefixURL": "", - "priorityClassName": "", - "readinessProbeFailureThreshold": 3, - "readinessProbeInitialDelay": 30, - "readinessProbeSuccessThreshold": 1, - "readinessProbeTimeout": 30, - "remoteRead": {}, - "remoteWrite": {}, - "replicaCount": 1, - "resources": {}, - "retention": "15d", - "securityContext": {}, - "service": { - "annotations": {}, - "clusterIP": "", - "externalIPs": [], - "gRPC": { - "enabled": false, - "servicePort": 10901 - }, - "labels": {}, - "loadBalancerIP": "", - "loadBalancerSourceRanges": [], - "servicePort": 80, - "sessionAffinity": "None", - "statefulsetReplica": { - "enabled": false, - "replica": 0 - }, - "type": "ClusterIP" - }, - "sidecarContainers": null, - "statefulSet": { - "annotations": {}, - "enabled": false, - "headless": { - "annotations": {}, - "labels": {}, - "servicePort": 80 - }, - "labels": {}, - "podManagementPolicy": "OrderedReady" - }, - "strategy": { - "rollingUpdate": null, - "type": "Recreate" - }, - "terminationGracePeriodSeconds": 300, - "tolerations": [], - "verticalAutoscaler": { - "enabled": false - } - }, - "serverFiles": { - "alerting_rules.yml": {}, - "alerts": {}, - "prometheus.yml": { - "rule_files": [ - "/etc/config/recording_rules.yml", - "/etc/config/alerting_rules.yml", - "/etc/config/rules", - "/etc/config/alerts" - ], - "scrape_configs": [ - { - "job_name": "prometheus", - "static_configs": [ - { - "targets": [ - "localhost:9090" - ] - } - ] - }, - { - "bearer_token_file": "/var/run/secrets/kubernetes.io/serviceaccount/token", - "job_name": "kubernetes-nodes-cadvisor", - "kubernetes_sd_configs": [ - { - "role": "node" - } - ], - "metric_relabel_configs": [ - { - "action": "keep", - "regex": "(container_cpu_usage_seconds_total|container_memory_working_set_bytes|container_network_receive_errors_total|container_network_transmit_errors_total|container_network_receive_packets_dropped_total|container_network_transmit_packets_dropped_total|container_memory_usage_bytes|container_cpu_cfs_throttled_periods_total|container_cpu_cfs_periods_total|container_fs_usage_bytes|container_fs_limit_bytes|container_cpu_cfs_periods_total|container_fs_inodes_free|container_fs_inodes_total|container_fs_usage_bytes|container_fs_limit_bytes|container_cpu_cfs_throttled_periods_total|container_cpu_cfs_periods_total|container_network_receive_bytes_total|container_network_transmit_bytes_total|container_fs_inodes_free|container_fs_inodes_total|container_fs_usage_bytes|container_fs_limit_bytes|container_spec_cpu_shares|container_spec_memory_limit_bytes|container_network_receive_bytes_total|container_network_transmit_bytes_total|container_fs_reads_bytes_total|container_network_receive_bytes_total|container_fs_writes_bytes_total|container_fs_reads_bytes_total|cadvisor_version_info|kubecost_pv_info)", - "source_labels": [ - "__name__" - ] - }, - { - "action": "replace", - "regex": "(.+)", - "source_labels": [ - "container" - ], - "target_label": "container_name" - }, - { - "action": "replace", - "regex": "(.+)", - "source_labels": [ - "pod" - ], - "target_label": "pod_name" - } - ], - "relabel_configs": [ - { - "action": "labelmap", - "regex": "__meta_kubernetes_node_label_(.+)" - }, - { - "replacement": "kubernetes.default.svc:443", - "target_label": "__address__" - }, - { - "regex": "(.+)", - "replacement": "/api/v1/nodes/$1/proxy/metrics/cadvisor", - "source_labels": [ - "__meta_kubernetes_node_name" - ], - "target_label": "__metrics_path__" - } - ], - "scheme": "https", - "tls_config": { - "ca_file": "/var/run/secrets/kubernetes.io/serviceaccount/ca.crt", - "insecure_skip_verify": true - } - }, - { - "job_name": "kubernetes-service-endpoints", - "kubernetes_sd_configs": [ - { - "role": "endpoints" - } - ], - "metric_relabel_configs": [ - { - "action": "keep", - "regex": "(container_cpu_allocation|container_cpu_usage_seconds_total|container_fs_limit_bytes|container_fs_writes_bytes_total|container_gpu_allocation|container_memory_allocation_bytes|container_memory_usage_bytes|container_memory_working_set_bytes|container_network_receive_bytes_total|container_network_transmit_bytes_total|DCGM_FI_DEV_GPU_UTIL|deployment_match_labels|kube_daemonset_status_desired_number_scheduled|kube_daemonset_status_number_ready|kube_deployment_spec_replicas|kube_deployment_status_replicas|kube_deployment_status_replicas_available|kube_job_status_failed|kube_namespace_annotations|kube_namespace_labels|kube_node_info|kube_node_labels|kube_node_status_allocatable|kube_node_status_allocatable_cpu_cores|kube_node_status_allocatable_memory_bytes|kube_node_status_capacity|kube_node_status_capacity_cpu_cores|kube_node_status_capacity_memory_bytes|kube_node_status_condition|kube_persistentvolume_capacity_bytes|kube_persistentvolume_status_phase|kube_persistentvolumeclaim_info|kube_persistentvolumeclaim_resource_requests_storage_bytes|kube_pod_container_info|kube_pod_container_resource_limits|kube_pod_container_resource_limits_cpu_cores|kube_pod_container_resource_limits_memory_bytes|kube_pod_container_resource_requests|kube_pod_container_resource_requests_cpu_cores|kube_pod_container_resource_requests_memory_bytes|kube_pod_container_status_restarts_total|kube_pod_container_status_running|kube_pod_container_status_terminated_reason|kube_pod_labels|kube_pod_owner|kube_pod_status_phase|kube_replicaset_owner|kube_statefulset_replicas|kube_statefulset_status_replicas|kubecost_cluster_info|kubecost_cluster_management_cost|kubecost_cluster_memory_working_set_bytes|kubecost_load_balancer_cost|kubecost_network_internet_egress_cost|kubecost_network_region_egress_cost|kubecost_network_zone_egress_cost|kubecost_node_is_spot|kubecost_pod_network_egress_bytes_total|node_cpu_hourly_cost|node_cpu_seconds_total|node_disk_reads_completed|node_disk_reads_completed_total|node_disk_writes_completed|node_disk_writes_completed_total|node_filesystem_device_error|node_gpu_count|node_gpu_hourly_cost|node_memory_Buffers_bytes|node_memory_Cached_bytes|node_memory_MemAvailable_bytes|node_memory_MemFree_bytes|node_memory_MemTotal_bytes|node_network_transmit_bytes_total|node_ram_hourly_cost|node_total_hourly_cost|pod_pvc_allocation|pv_hourly_cost|service_selector_labels|statefulSet_match_labels|kubecost_pv_info|up)", - "source_labels": [ - "__name__" - ] - } - ], - "relabel_configs": [ - { - "action": "keep", - "regex": true, - "source_labels": [ - "__meta_kubernetes_service_annotation_prometheus_io_scrape" - ] - }, - { - "action": "replace", - "regex": "(https?)", - "source_labels": [ - "__meta_kubernetes_service_annotation_prometheus_io_scheme" - ], - "target_label": "__scheme__" - }, - { - "action": "replace", - "regex": "(.+)", - "source_labels": [ - "__meta_kubernetes_service_annotation_prometheus_io_path" - ], - "target_label": "__metrics_path__" - }, - { - "action": "replace", - "regex": "([^:]+)(?::\\d+)?;(\\d+)", - "replacement": "$1:$2", - "source_labels": [ - "__address__", - "__meta_kubernetes_service_annotation_prometheus_io_port" - ], - "target_label": "__address__" - }, - { - "action": "labelmap", - "regex": "__meta_kubernetes_service_label_(.+)" - }, - { - "action": "replace", - "source_labels": [ - "__meta_kubernetes_namespace" - ], - "target_label": "kubernetes_namespace" - }, - { - "action": "replace", - "source_labels": [ - "__meta_kubernetes_service_name" - ], - "target_label": "kubernetes_name" - }, - { - "action": "replace", - "source_labels": [ - "__meta_kubernetes_pod_node_name" - ], - "target_label": "kubernetes_node" - } - ] - }, - { - "job_name": "kubernetes-service-endpoints-slow", - "kubernetes_sd_configs": [ - { - "role": "endpoints" - } - ], - "relabel_configs": [ - { - "action": "keep", - "regex": true, - "source_labels": [ - "__meta_kubernetes_service_annotation_prometheus_io_scrape_slow" - ] - }, - { - "action": "replace", - "regex": "(https?)", - "source_labels": [ - "__meta_kubernetes_service_annotation_prometheus_io_scheme" - ], - "target_label": "__scheme__" - }, - { - "action": "replace", - "regex": "(.+)", - "source_labels": [ - "__meta_kubernetes_service_annotation_prometheus_io_path" - ], - "target_label": "__metrics_path__" - }, - { - "action": "replace", - "regex": "([^:]+)(?::\\d+)?;(\\d+)", - "replacement": "$1:$2", - "source_labels": [ - "__address__", - "__meta_kubernetes_service_annotation_prometheus_io_port" - ], - "target_label": "__address__" - }, - { - "action": "labelmap", - "regex": "__meta_kubernetes_service_label_(.+)" - }, - { - "action": "replace", - "source_labels": [ - "__meta_kubernetes_namespace" - ], - "target_label": "kubernetes_namespace" - }, - { - "action": "replace", - "source_labels": [ - "__meta_kubernetes_service_name" - ], - "target_label": "kubernetes_name" - }, - { - "action": "replace", - "source_labels": [ - "__meta_kubernetes_pod_node_name" - ], - "target_label": "kubernetes_node" - } - ], - "scrape_interval": "5m", - "scrape_timeout": "30s" - }, - { - "honor_labels": true, - "job_name": "prometheus-pushgateway", - "kubernetes_sd_configs": [ - { - "role": "service" - } - ], - "relabel_configs": [ - { - "action": "keep", - "regex": "pushgateway", - "source_labels": [ - "__meta_kubernetes_service_annotation_prometheus_io_probe" - ] - } - ] - }, - { - "job_name": "kubernetes-services", - "kubernetes_sd_configs": [ - { - "role": "service" - } - ], - "metrics_path": "/probe", - "params": { - "module": [ - "http_2xx" - ] - }, - "relabel_configs": [ - { - "action": "keep", - "regex": true, - "source_labels": [ - "__meta_kubernetes_service_annotation_prometheus_io_probe" - ] - }, - { - "source_labels": [ - "__address__" - ], - "target_label": "__param_target" - }, - { - "replacement": "blackbox", - "target_label": "__address__" - }, - { - "source_labels": [ - "__param_target" - ], - "target_label": "instance" - }, - { - "action": "labelmap", - "regex": "__meta_kubernetes_service_label_(.+)" - }, - { - "source_labels": [ - "__meta_kubernetes_namespace" - ], - "target_label": "kubernetes_namespace" - }, - { - "source_labels": [ - "__meta_kubernetes_service_name" - ], - "target_label": "kubernetes_name" - } - ] - } - ] - }, - "recording_rules.yml": {}, - "rules": { - "groups": [ - { - "name": "CPU", - "rules": [ - { - "expr": "sum(rate(container_cpu_usage_seconds_total{container_name!=\"\"}[5m]))", - "record": "cluster:cpu_usage:rate5m" - }, - { - "expr": "rate(container_cpu_usage_seconds_total{container_name!=\"\"}[5m])", - "record": "cluster:cpu_usage_nosum:rate5m" - }, - { - "expr": "avg(irate(container_cpu_usage_seconds_total{container_name!=\"POD\", container_name!=\"\"}[5m])) by (container_name,pod_name,namespace)", - "record": "kubecost_container_cpu_usage_irate" - }, - { - "expr": "sum(container_memory_working_set_bytes{container_name!=\"POD\",container_name!=\"\"}) by (container_name,pod_name,namespace)", - "record": "kubecost_container_memory_working_set_bytes" - }, - { - "expr": "sum(container_memory_working_set_bytes{container_name!=\"POD\",container_name!=\"\"})", - "record": "kubecost_cluster_memory_working_set_bytes" - } - ] - }, - { - "name": "Savings", - "rules": [ - { - "expr": "sum(avg(kube_pod_owner{owner_kind!=\"DaemonSet\"}) by (pod) * sum(container_cpu_allocation) by (pod))", - "labels": { - "daemonset": "false" - }, - "record": "kubecost_savings_cpu_allocation" - }, - { - "expr": "sum(avg(kube_pod_owner{owner_kind=\"DaemonSet\"}) by (pod) * sum(container_cpu_allocation) by (pod)) / sum(kube_node_info)", - "labels": { - "daemonset": "true" - }, - "record": "kubecost_savings_cpu_allocation" - }, - { - "expr": "sum(avg(kube_pod_owner{owner_kind!=\"DaemonSet\"}) by (pod) * sum(container_memory_allocation_bytes) by (pod))", - "labels": { - "daemonset": "false" - }, - "record": "kubecost_savings_memory_allocation_bytes" - }, - { - "expr": "sum(avg(kube_pod_owner{owner_kind=\"DaemonSet\"}) by (pod) * sum(container_memory_allocation_bytes) by (pod)) / sum(kube_node_info)", - "labels": { - "daemonset": "true" - }, - "record": "kubecost_savings_memory_allocation_bytes" - } - ] - } - ] - } - }, - "serviceAccounts": { - "alertmanager": { - "create": true, - "name": null - }, - "nodeExporter": { - "create": true, - "name": null - }, - "pushgateway": { - "create": true, - "name": null - }, - "server": { - "create": true, - "name": null - } - } - }, - "prometheusRule": { - "additionalLabels": {}, - "enabled": false - }, - "remoteWrite": { - "postgres": { - "auth": { - "password": "admin" - }, - "enabled": false, - "initImage": "gcr.io/kubecost1/sql-init", - "initImagePullPolicy": "Always", - "installLocal": true, - "persistentVolume": { - "size": "200Gi" - }, - "remotePostgresAddress": "" - } - }, - "reporting": { - "errorReporting": true, - "logCollection": true, - "productAnalytics": true, - "valuesReporting": true - }, - "saml": { - "appRootURL": "http://localhost:9090", - "authTimeout": 1440, - "enabled": false, - "idpMetadataURL": "https://dev-elu2z98r.auth0.com/samlp/metadata/c6nY4M37rBP0qSO1IYIqBPPyIPxLS8v2", - "rbac": { - "enabled": false, - "groups": [ - { - "assertionName": "http://schemas.auth0.com/userType", - "assertionValues": [ - "admin", - "superusers" - ], - "enabled": false, - "name": "admin" - }, - { - "assertionName": "http://schemas.auth0.com/userType", - "assertionvalues": [ - "readonly" - ], - "enabled": false, - "name": "readonly" - }, - { - "assertionName": "http://schemas.auth0.com/userType", - "assertionValues": [ - "editor" - ], - "enabled": true, - "name": "editor" - } - ] - }, - "redirectURL": "https://dev-elu2z98r.auth0.com/v2/logout", - "secretName": "kubecost-authzero" - }, - "service": { - "annotations": {}, - "labels": {}, - "port": 9090, - "targetPort": 9090, - "type": "ClusterIP" - }, - "serviceAccount": { - "annotations": {}, - "create": true - }, - "serviceMonitor": { - "additionalLabels": {}, - "enabled": false - }, - "sigV4Proxy": { - "extraEnv": null, - "host": "aps-workspaces.us-west-2.amazonaws.com", - "image": "public.ecr.aws/aws-observability/aws-sigv4-proxy:latest", - "imagePullPolicy": "Always", - "name": "aps", - "port": 8005, - "region": "us-west-2" - }, - "supportNFS": false, - "systemProxy": { - "enabled": false, - "httpProxyUrl": "", - "httpsProxyUrl": "", - "noProxy": "" - }, - "tolerations": [] - } - } - ] - capabilities: Basic Install - categories: Monitoring - containerImage: gcr.io/kubecost1/operator/controller:latest - createdAt: 2022-10-10T08:00:00Z - support: Kubecost - description: |- - The Kubecost Operator runs within a Openshift cluster and provides a means to deploy and manage Kubecost and components to monitor cloud costs. - operators.operatorframework.io/builder: operator-sdk-v1.24.0 - operators.operatorframework.io/project_layout: helm.sdk.operatorframework.io/v1 - name: kubecost.v1.97.0 - namespace: kubecost -spec: - apiservicedefinitions: {} - customresourcedefinitions: - owned: - - kind: CostAnalyzer - name: costanalyzers.charts.kubecost.com - version: v1alpha1 - displayName: Kubecost - description: The Kubecost Operator runs within a Openshift cluster and provides a means to deploy and manage Kubecost and components to monitor cloud costs. - description: |- - The Kubecost Operator runs within a Openshift cluster and provides a means to deploy and manage Kubecost and components to monitor cloud costs. - - ## Prerequisites - To start using the Kubecost Operator, you need to create a namespace for the deployment: - ``` - kubectl create namespace kubecost - ``` - Refer to the [Kubecost documentation](https://guide.kubecost.com/hc/en-us/search?utf8=%E2%9C%93&query=openshift) for more details. - - displayName: Kubecost - icon: - - base64data: "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" - mediatype: "image/png" - install: - spec: - clusterPermissions: - - rules: - - apiGroups: - - "" - resources: - - namespaces - verbs: - - get - - apiGroups: - - "" - resources: - - secrets - verbs: - - '*' - - apiGroups: - - "" - resources: - - events - verbs: - - create - - apiGroups: - - charts.kubecost.com - resources: - - costanalyzers - - costanalyzers/status - - costanalyzers/finalizers - verbs: - - create - - delete - - get - - list - - patch - - update - - watch - - apiGroups: - - policy - resources: - - podsecuritypolicies - verbs: - - '*' - - apiGroups: - - rbac.authorization.k8s.io - resources: - - clusterrolebindings - - clusterroles - verbs: - - '*' - - apiGroups: - - apps - resources: - - daemonsets - - deployments - verbs: - - '*' - - apiGroups: - - "" - resources: - - configmaps - - persistentvolumeclaims - - secrets - - serviceaccounts - - services - verbs: - - '*' - - apiGroups: - - rbac.authorization.k8s.io - resources: - - rolebindings - - roles - verbs: - - '*' - - apiGroups: - - authentication.k8s.io - resources: - - tokenreviews - verbs: - - create - - apiGroups: - - authorization.k8s.io - resources: - - subjectaccessreviews - verbs: - - create - serviceAccountName: kubecost-controller-manager - deployments: - - label: - control-plane: controller-manager - name: kubecost-controller-manager - spec: - replicas: 1 - selector: - matchLabels: - control-plane: controller-manager - strategy: {} - template: - metadata: - annotations: - kubectl.kubernetes.io/default-container: manager - labels: - control-plane: controller-manager - spec: - containers: - - args: - - --secure-listen-address=0.0.0.0:8443 - - --upstream=http://127.0.0.1:8080/ - - --logtostderr=true - - --v=0 - image: gcr.io/kubebuilder/kube-rbac-proxy:v0.13.0 - name: kube-rbac-proxy - ports: - - containerPort: 8443 - name: https - protocol: TCP - resources: - limits: - cpu: 500m - memory: 128Mi - requests: - cpu: 5m - memory: 64Mi - securityContext: - allowPrivilegeEscalation: false - capabilities: - drop: - - ALL - - args: - - --health-probe-bind-address=:8081 - - --metrics-bind-address=127.0.0.1:8080 - - --leader-elect - - --leader-election-id=kubecost - image: gcr.io/kubecost1/operator/controller:latest - livenessProbe: - httpGet: - path: /healthz - port: 8081 - initialDelaySeconds: 15 - periodSeconds: 20 - name: manager - readinessProbe: - httpGet: - path: /readyz - port: 8081 - initialDelaySeconds: 5 - periodSeconds: 10 - resources: - limits: - cpu: 500m - memory: 512Mi - requests: - cpu: 10m - memory: 64Mi - securityContext: - allowPrivilegeEscalation: false - capabilities: - drop: - - ALL - securityContext: - runAsNonRoot: true - serviceAccountName: kubecost-controller-manager - terminationGracePeriodSeconds: 10 - permissions: - - rules: - - apiGroups: - - "" - resources: - - configmaps - verbs: - - get - - list - - watch - - create - - update - - patch - - delete - - apiGroups: - - coordination.k8s.io - resources: - - leases - verbs: - - get - - list - - watch - - create - - update - - patch - - delete - - apiGroups: - - "" - resources: - - events - verbs: - - create - - patch - serviceAccountName: kubecost-controller-manager - strategy: deployment - installModes: - - supported: false - type: OwnNamespace - - supported: false - type: SingleNamespace - - supported: false - type: MultiNamespace - - supported: true - type: AllNamespaces - keywords: - - cost - - cost saving - - recommendation - - kubecost - - openshift - links: - - name: Kubecost - url: https://kubecost.domain - maturity: alpha - provider: - name: Kubecost - url: kubecost.com - maintainers: - - name: Kubecost - email: linh@kubecost.com - version: 1.97.0 \ No newline at end of file diff --git a/operators/kubecost/1.97.0/metadata/annotations.yaml b/operators/kubecost/1.97.0/metadata/annotations.yaml deleted file mode 100644 index ccb54454990..00000000000 --- a/operators/kubecost/1.97.0/metadata/annotations.yaml +++ /dev/null @@ -1,17 +0,0 @@ -annotations: - # Core bundle annotations. - operators.operatorframework.io.bundle.mediatype.v1: registry+v1 - operators.operatorframework.io.bundle.manifests.v1: manifests/ - operators.operatorframework.io.bundle.metadata.v1: metadata/ - operators.operatorframework.io.bundle.package.v1: kubecost - operators.operatorframework.io.bundle.channels.v1: alpha - operators.operatorframework.io.metrics.builder: operator-sdk-v1.24.0 - operators.operatorframework.io.metrics.mediatype.v1: metrics+v1 - operators.operatorframework.io.metrics.project_layout: helm.sdk.operatorframework.io/v1 - - # Annotations for testing. - operators.operatorframework.io.test.mediatype.v1: scorecard+v1 - operators.operatorframework.io.test.config.v1: tests/scorecard/ - - # Annotations to specify OCP versions compatibility. - com.redhat.openshift.versions: v4.9 \ No newline at end of file diff --git a/operators/kubecost/1.97.0/tests/scorecard/config.yaml b/operators/kubecost/1.97.0/tests/scorecard/config.yaml deleted file mode 100644 index 3c01e456ba6..00000000000 --- a/operators/kubecost/1.97.0/tests/scorecard/config.yaml +++ /dev/null @@ -1,70 +0,0 @@ -apiVersion: scorecard.operatorframework.io/v1alpha3 -kind: Configuration -metadata: - name: config -stages: -- parallel: true - tests: - - entrypoint: - - scorecard-test - - basic-check-spec - image: quay.io/operator-framework/scorecard-test:v1.24.0 - labels: - suite: basic - test: basic-check-spec-test - storage: - spec: - mountPath: {} - - entrypoint: - - scorecard-test - - olm-bundle-validation - image: quay.io/operator-framework/scorecard-test:v1.24.0 - labels: - suite: olm - test: olm-bundle-validation-test - storage: - spec: - mountPath: {} - - entrypoint: - - scorecard-test - - olm-crds-have-validation - image: quay.io/operator-framework/scorecard-test:v1.24.0 - labels: - suite: olm - test: olm-crds-have-validation-test - storage: - spec: - mountPath: {} - - entrypoint: - - scorecard-test - - olm-crds-have-resources - image: quay.io/operator-framework/scorecard-test:v1.24.0 - labels: - suite: olm - test: olm-crds-have-resources-test - storage: - spec: - mountPath: {} - - entrypoint: - - scorecard-test - - olm-spec-descriptors - image: quay.io/operator-framework/scorecard-test:v1.24.0 - labels: - suite: olm - test: olm-spec-descriptors-test - storage: - spec: - mountPath: {} - - entrypoint: - - scorecard-test - - olm-status-descriptors - image: quay.io/operator-framework/scorecard-test:v1.24.0 - labels: - suite: olm - test: olm-status-descriptors-test - storage: - spec: - mountPath: {} -storage: - spec: - mountPath: {} diff --git a/operators/kubecost/1.99.0/bundle.Dockerfile b/operators/kubecost/1.99.0/bundle.Dockerfile deleted file mode 100644 index 7d746810165..00000000000 --- a/operators/kubecost/1.99.0/bundle.Dockerfile +++ /dev/null @@ -1,20 +0,0 @@ -FROM scratch - -# Core bundle labels. -LABEL operators.operatorframework.io.bundle.mediatype.v1=registry+v1 -LABEL operators.operatorframework.io.bundle.manifests.v1=manifests/ -LABEL operators.operatorframework.io.bundle.metadata.v1=metadata/ -LABEL operators.operatorframework.io.bundle.package.v1=kubecost -LABEL operators.operatorframework.io.bundle.channels.v1=1.99.0 -LABEL operators.operatorframework.io.metrics.builder=operator-sdk-v1.24.0 -LABEL operators.operatorframework.io.metrics.mediatype.v1=metrics+v1 -LABEL operators.operatorframework.io.metrics.project_layout=helm.sdk.operatorframework.io/v1 - -# Labels for testing. -LABEL operators.operatorframework.io.test.mediatype.v1=scorecard+v1 -LABEL operators.operatorframework.io.test.config.v1=tests/scorecard/ - -# Copy files to locations specified by labels. -COPY bundle/manifests /manifests/ -COPY bundle/metadata /metadata/ -COPY bundle/tests/scorecard /tests/scorecard/ diff --git a/operators/kubecost/1.99.0/manifests/charts.kubecost.com_costanalyzers.yaml b/operators/kubecost/1.99.0/manifests/charts.kubecost.com_costanalyzers.yaml deleted file mode 100644 index 60a6a7653ae..00000000000 --- a/operators/kubecost/1.99.0/manifests/charts.kubecost.com_costanalyzers.yaml +++ /dev/null @@ -1,50 +0,0 @@ -apiVersion: apiextensions.k8s.io/v1 -kind: CustomResourceDefinition -metadata: - creationTimestamp: null - name: costanalyzers.charts.kubecost.com -spec: - group: charts.kubecost.com - names: - kind: CostAnalyzer - listKind: CostAnalyzerList - plural: costanalyzers - singular: costanalyzer - scope: Namespaced - versions: - - name: v1alpha1 - schema: - openAPIV3Schema: - description: CostAnalyzer is the Schema for the costanalyzers API - properties: - apiVersion: - description: 'APIVersion defines the versioned schema of this representation - of an object. Servers should convert recognized schemas to the latest - internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' - type: string - kind: - description: 'Kind is a string value representing the REST resource this - object represents. Servers may infer this from the endpoint the client - submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' - type: string - metadata: - type: object - spec: - description: Spec defines the desired state of CostAnalyzer - type: object - x-kubernetes-preserve-unknown-fields: true - status: - description: Status defines the observed state of CostAnalyzer - type: object - x-kubernetes-preserve-unknown-fields: true - type: object - served: true - storage: true - subresources: - status: {} -status: - acceptedNames: - kind: "" - plural: "" - conditions: null - storedVersions: null diff --git a/operators/kubecost/1.99.0/manifests/kubecost-controller-manager-metrics-service_v1_service.yaml b/operators/kubecost/1.99.0/manifests/kubecost-controller-manager-metrics-service_v1_service.yaml deleted file mode 100644 index 260a2e2aca5..00000000000 --- a/operators/kubecost/1.99.0/manifests/kubecost-controller-manager-metrics-service_v1_service.yaml +++ /dev/null @@ -1,17 +0,0 @@ -apiVersion: v1 -kind: Service -metadata: - creationTimestamp: null - labels: - control-plane: controller-manager - name: kubecost-controller-manager-metrics-service -spec: - ports: - - name: https - port: 8443 - protocol: TCP - targetPort: https - selector: - control-plane: controller-manager -status: - loadBalancer: {} diff --git a/operators/kubecost/1.99.0/manifests/kubecost-manager-config_v1_configmap.yaml b/operators/kubecost/1.99.0/manifests/kubecost-manager-config_v1_configmap.yaml deleted file mode 100644 index cdd7c868656..00000000000 --- a/operators/kubecost/1.99.0/manifests/kubecost-manager-config_v1_configmap.yaml +++ /dev/null @@ -1,26 +0,0 @@ -apiVersion: v1 -data: - controller_manager_config.yaml: | - apiVersion: controller-runtime.sigs.k8s.io/v1alpha1 - kind: ControllerManagerConfig - health: - healthProbeBindAddress: :8081 - metrics: - bindAddress: 127.0.0.1:8080 - - leaderElection: - leaderElect: true - resourceName: 811c9dc5.kubecost.com - # leaderElectionReleaseOnCancel defines if the leader should step down volume - # when the Manager ends. This requires the binary to immediately end when the - # Manager is stopped, otherwise, this setting is unsafe. Setting this significantly - # speeds up voluntary leader transitions as the new leader don't have to wait - # LeaseDuration time first. - # In the default scaffold provided, the program ends immediately after - # the manager stops, so would be fine to enable this option. However, - # if you are doing or is intended to do any operation such as perform cleanups - # after the manager stops then its usage might be unsafe. - # leaderElectionReleaseOnCancel: true -kind: ConfigMap -metadata: - name: kubecost-manager-config diff --git a/operators/kubecost/1.99.0/manifests/kubecost-metrics-reader_rbac.authorization.k8s.io_v1_clusterrole.yaml b/operators/kubecost/1.99.0/manifests/kubecost-metrics-reader_rbac.authorization.k8s.io_v1_clusterrole.yaml deleted file mode 100644 index f8c33bb3211..00000000000 --- a/operators/kubecost/1.99.0/manifests/kubecost-metrics-reader_rbac.authorization.k8s.io_v1_clusterrole.yaml +++ /dev/null @@ -1,10 +0,0 @@ -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - creationTimestamp: null - name: kubecost-metrics-reader -rules: -- nonResourceURLs: - - /metrics - verbs: - - get diff --git a/operators/kubecost/1.99.0/manifests/kubecost.clusterserviceversion.yaml b/operators/kubecost/1.99.0/manifests/kubecost.clusterserviceversion.yaml deleted file mode 100644 index 91b41ef7df4..00000000000 --- a/operators/kubecost/1.99.0/manifests/kubecost.clusterserviceversion.yaml +++ /dev/null @@ -1,506 +0,0 @@ -apiVersion: operators.coreos.com/v1alpha1 -kind: ClusterServiceVersion -metadata: - annotations: - alm-examples: |- - [ - { - "apiVersion": "charts.kubecost.com/v1alpha1", - "kind": "CostAnalyzer", - "metadata": { - "name": "cost-analyzer-ocp-sample" - }, - "spec": { - "affinity": {}, - "global": { - "grafana": { - "enabled": false, - "proxy": false - } - }, - "grafana": { - "grafana": { - "containerSecurityContext": { - "securityContext": { - "allowPrivilegeEscalation": false, - "capabilities": { - "drop": [ - "ALL" - ] - }, - "readOnlyRootFilesystem": true, - "runAsNonRoot": true - } - } - }, - "initContainers": { - "containerSecurityContext": { - "securityContext": { - "allowPrivilegeEscalation": false, - "capabilities": { - "drop": [ - "ALL" - ] - }, - "readOnlyRootFilesystem": true, - "runAsNonRoot": true - } - } - }, - "rbac": { - "pspEnabled": false - }, - "sidecar": { - "containerSecurityContext": { - "securityContext": { - "allowPrivilegeEscalation": false, - "capabilities": { - "drop": [ - "ALL" - ] - }, - "readOnlyRootFilesystem": true, - "runAsNonRoot": true - } - } - } - }, - "kubecostDeployment": { - "podSecurityContext": { - "runAsNonRoot": true - } - }, - "kubecostFrontend": { - "containerSecurityContext": { - "allowPrivilegeEscalation": false, - "capabilities": { - "drop": [ - "ALL" - ] - }, - "readOnlyRootFilesystem": true, - "runAsNonRoot": true - } - }, - "kubecostModel": { - "containerSecurityContext": { - "allowPrivilegeEscalation": false, - "capabilities": { - "drop": [ - "ALL" - ] - }, - "readOnlyRootFilesystem": true, - "runAsNonRoot": true - }, - "containerStatsEnabled": true, - "etlCloudAsset": true - }, - "kubecostNetworkCosts": { - "containerSecurityContext": {}, - "securityContext": {} - }, - "kubecostProductConfigs": { - "clusterName": "YOUR_CLUSTER_NAME" - }, - "networkCosts": { - "config": { - "services": { - "amazon-web-services": false, - "azure-cloud-services": false, - "google-cloud-services": false - } - }, - "enabled": false, - "podSecurityPolicy": { - "enabled": false - } - }, - "podSecurityPolicy": { - "enabled": false - }, - "prometheus": { - "configmapReload": { - "containerSecurityContext": { - "securityContext": { - "allowPrivilegeEscalation": false, - "capabilities": { - "drop": [ - "ALL" - ] - }, - "readOnlyRootFilesystem": true, - "runAsNonRoot": true - } - } - }, - "kube-state-metrics": { - "disabled": true - }, - "kubeStateMetrics": { - "enabled": false - }, - "nodeExporter": { - "enabled": false - }, - "podSecurityPolicy": { - "enabled": false - }, - "server": { - "containerSecurityContext": { - "securityContext": { - "allowPrivilegeEscalation": false, - "capabilities": { - "drop": [ - "ALL" - ] - }, - "readOnlyRootFilesystem": true, - "runAsNonRoot": true - } - }, - "global": { - "external_labels": { - "cluster_id": "YOUR_CLUSTER_NAME" - } - } - }, - "sidecarContainers": { - "containerSecurityContext": { - "securityContext": { - "allowPrivilegeEscalation": false, - "capabilities": { - "drop": [ - "ALL" - ] - }, - "readOnlyRootFilesystem": true, - "runAsNonRoot": true - } - } - } - }, - "thanos": { - "thanoscompact": { - "containerSecurityContext": { - "securityContext": { - "allowPrivilegeEscalation": false, - "capabilities": { - "drop": [ - "ALL" - ] - }, - "readOnlyRootFilesystem": true, - "runAsNonRoot": true - } - } - }, - "thanosquery": { - "containerSecurityContext": { - "securityContext": { - "allowPrivilegeEscalation": false, - "capabilities": { - "drop": [ - "ALL" - ] - }, - "readOnlyRootFilesystem": true, - "runAsNonRoot": true - } - } - }, - "thanosqueryfrontend": { - "containerSecurityContext": { - "securityContext": { - "allowPrivilegeEscalation": false, - "capabilities": { - "drop": [ - "ALL" - ] - }, - "readOnlyRootFilesystem": true, - "runAsNonRoot": true - } - } - }, - "thanosstore": { - "containerSecurityContext": { - "securityContext": { - "allowPrivilegeEscalation": false, - "capabilities": { - "drop": [ - "ALL" - ] - }, - "readOnlyRootFilesystem": true, - "runAsNonRoot": true - } - } - } - } - } - } - ] - capabilities: Basic Install - categories: Monitoring - containerImage: gcr.io/kubecost1/operator/controller:latest - createdAt: 2023-01-24T08:00:00Z - support: Kubecost - description: |- - The Kubecost Operator runs within a Openshift cluster and provides a means to deploy and manage Kubecost and components to monitor cloud costs. - operators.operatorframework.io/builder: operator-sdk-v1.24.0 - operators.operatorframework.io/project_layout: helm.sdk.operatorframework.io/v1 - name: kubecost.v1.99.0 - namespace: kubecost -spec: - apiservicedefinitions: {} - customresourcedefinitions: - owned: - - kind: CostAnalyzer - name: costanalyzers.charts.kubecost.com - version: v1alpha1 - description: |- - The Kubecost Operator runs within a Openshift cluster and provides a means to deploy and manage Kubecost and components to monitor cloud costs. - - ## Prerequisites - To start using the Kubecost Operator, you need to create a namespace for the deployment: - ``` - kubectl create namespace kubecost - ``` - Refer to the [Kubecost documentation](https://docs.kubecost.com/install-and-configure/install/provider-installations/openshift-operatorhub-kubecost-install) for more details. - displayName: Kubecost - icon: - - base64data: "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" - mediatype: "image/png" - install: - spec: - clusterPermissions: - - rules: - - apiGroups: - - security.openshift.io - resourceNames: - - privileged - resources: - - securitycontextconstraints - verbs: - - use - - apiGroups: - - "" - resources: - - namespaces - verbs: - - get - - apiGroups: - - "" - resources: - - secrets - verbs: - - '*' - - apiGroups: - - "" - resources: - - events - verbs: - - create - - apiGroups: - - charts.kubecost.com - resources: - - costanalyzers - - costanalyzers/status - - costanalyzers/finalizers - verbs: - - create - - delete - - get - - list - - patch - - update - - watch - - apiGroups: - - policy - resources: - - podsecuritypolicies - verbs: - - '*' - - apiGroups: - - rbac.authorization.k8s.io - resources: - - clusterrolebindings - - clusterroles - verbs: - - '*' - - apiGroups: - - apps - resources: - - daemonsets - - deployments - verbs: - - '*' - - apiGroups: - - "" - resources: - - configmaps - - persistentvolumeclaims - - secrets - - serviceaccounts - - services - verbs: - - '*' - - apiGroups: - - rbac.authorization.k8s.io - resources: - - rolebindings - - roles - verbs: - - '*' - - apiGroups: - - authentication.k8s.io - resources: - - tokenreviews - verbs: - - create - - apiGroups: - - authorization.k8s.io - resources: - - subjectaccessreviews - verbs: - - create - serviceAccountName: kubecost-controller-manager - deployments: - - label: - control-plane: controller-manager - name: kubecost-controller-manager - spec: - replicas: 1 - selector: - matchLabels: - control-plane: controller-manager - strategy: {} - template: - metadata: - annotations: - kubectl.kubernetes.io/default-container: manager - labels: - control-plane: controller-manager - spec: - containers: - - args: - - --secure-listen-address=0.0.0.0:8443 - - --upstream=http://127.0.0.1:8080/ - - --logtostderr=true - - --v=0 - image: gcr.io/kubebuilder/kube-rbac-proxy:v0.13.0 - name: kube-rbac-proxy - ports: - - containerPort: 8443 - name: https - protocol: TCP - resources: - limits: - cpu: 500m - memory: 128Mi - requests: - cpu: 5m - memory: 64Mi - securityContext: - allowPrivilegeEscalation: false - capabilities: - drop: - - ALL - - args: - - --health-probe-bind-address=:8081 - - --metrics-bind-address=127.0.0.1:8080 - - --leader-elect - - --leader-election-id=kubecost - image: gcr.io/kubecost1/operator/controller:latest - livenessProbe: - httpGet: - path: /healthz - port: 8081 - initialDelaySeconds: 15 - periodSeconds: 20 - name: manager - readinessProbe: - httpGet: - path: /readyz - port: 8081 - initialDelaySeconds: 5 - periodSeconds: 10 - resources: - limits: - cpu: 500m - memory: 512Mi - requests: - cpu: 10m - memory: 64Mi - securityContext: - allowPrivilegeEscalation: false - capabilities: - drop: - - ALL - securityContext: - runAsNonRoot: true - serviceAccountName: kubecost-controller-manager - terminationGracePeriodSeconds: 10 - permissions: - - rules: - - apiGroups: - - "" - resources: - - configmaps - verbs: - - get - - list - - watch - - create - - update - - patch - - delete - - apiGroups: - - coordination.k8s.io - resources: - - leases - verbs: - - get - - list - - watch - - create - - update - - patch - - delete - - apiGroups: - - "" - resources: - - events - verbs: - - create - - patch - serviceAccountName: kubecost-controller-manager - strategy: deployment - installModes: - - supported: false - type: OwnNamespace - - supported: false - type: SingleNamespace - - supported: false - type: MultiNamespace - - supported: true - type: AllNamespaces - keywords: - - cost - - cost saving - - recommendation - - kubecost - - cost management - - openshift - links: - - name: Kubecost - url: https://kubecost.domain - maturity: alpha - provider: - name: Kubecost - url: kubecost.com - maintainers: - - name: Kubecost - email: linh@kubecost.com - version: 1.99.0 diff --git a/operators/kubecost/1.99.0/metadata/annotations.yaml b/operators/kubecost/1.99.0/metadata/annotations.yaml deleted file mode 100644 index ccb54454990..00000000000 --- a/operators/kubecost/1.99.0/metadata/annotations.yaml +++ /dev/null @@ -1,17 +0,0 @@ -annotations: - # Core bundle annotations. - operators.operatorframework.io.bundle.mediatype.v1: registry+v1 - operators.operatorframework.io.bundle.manifests.v1: manifests/ - operators.operatorframework.io.bundle.metadata.v1: metadata/ - operators.operatorframework.io.bundle.package.v1: kubecost - operators.operatorframework.io.bundle.channels.v1: alpha - operators.operatorframework.io.metrics.builder: operator-sdk-v1.24.0 - operators.operatorframework.io.metrics.mediatype.v1: metrics+v1 - operators.operatorframework.io.metrics.project_layout: helm.sdk.operatorframework.io/v1 - - # Annotations for testing. - operators.operatorframework.io.test.mediatype.v1: scorecard+v1 - operators.operatorframework.io.test.config.v1: tests/scorecard/ - - # Annotations to specify OCP versions compatibility. - com.redhat.openshift.versions: v4.9 \ No newline at end of file diff --git a/operators/kubecost/1.99.0/tests/scorecard/config.yaml b/operators/kubecost/1.99.0/tests/scorecard/config.yaml deleted file mode 100644 index 3c01e456ba6..00000000000 --- a/operators/kubecost/1.99.0/tests/scorecard/config.yaml +++ /dev/null @@ -1,70 +0,0 @@ -apiVersion: scorecard.operatorframework.io/v1alpha3 -kind: Configuration -metadata: - name: config -stages: -- parallel: true - tests: - - entrypoint: - - scorecard-test - - basic-check-spec - image: quay.io/operator-framework/scorecard-test:v1.24.0 - labels: - suite: basic - test: basic-check-spec-test - storage: - spec: - mountPath: {} - - entrypoint: - - scorecard-test - - olm-bundle-validation - image: quay.io/operator-framework/scorecard-test:v1.24.0 - labels: - suite: olm - test: olm-bundle-validation-test - storage: - spec: - mountPath: {} - - entrypoint: - - scorecard-test - - olm-crds-have-validation - image: quay.io/operator-framework/scorecard-test:v1.24.0 - labels: - suite: olm - test: olm-crds-have-validation-test - storage: - spec: - mountPath: {} - - entrypoint: - - scorecard-test - - olm-crds-have-resources - image: quay.io/operator-framework/scorecard-test:v1.24.0 - labels: - suite: olm - test: olm-crds-have-resources-test - storage: - spec: - mountPath: {} - - entrypoint: - - scorecard-test - - olm-spec-descriptors - image: quay.io/operator-framework/scorecard-test:v1.24.0 - labels: - suite: olm - test: olm-spec-descriptors-test - storage: - spec: - mountPath: {} - - entrypoint: - - scorecard-test - - olm-status-descriptors - image: quay.io/operator-framework/scorecard-test:v1.24.0 - labels: - suite: olm - test: olm-status-descriptors-test - storage: - spec: - mountPath: {} -storage: - spec: - mountPath: {} From 75627fcce8e1d7b0c07dcc2622cb6cd2ade08ec1 Mon Sep 17 00:00:00 2001 From: chipzoller Date: Sun, 25 Feb 2024 10:15:47 -0500 Subject: [PATCH 3/6] Revert "remove old" This reverts commit 3a47cfff5fddf75cd93ad15f67aa41515d4077f4. --- operators/kubecost/1.97.0/bundle.Dockerfile | 20 + .../charts.kubecost.com_costanalyzers.yaml | 50 + ...er-manager-metrics-service_v1_service.yaml | 17 + .../kubecost-manager-config_v1_configmap.yaml | 26 + ...c.authorization.k8s.io_v1_clusterrole.yaml | 10 + .../kubecost.clusterserviceversion.yaml | 1894 +++++++++++++++++ .../kubecost/1.97.0/metadata/annotations.yaml | 17 + .../1.97.0/tests/scorecard/config.yaml | 70 + operators/kubecost/1.99.0/bundle.Dockerfile | 20 + .../charts.kubecost.com_costanalyzers.yaml | 50 + ...er-manager-metrics-service_v1_service.yaml | 17 + .../kubecost-manager-config_v1_configmap.yaml | 26 + ...c.authorization.k8s.io_v1_clusterrole.yaml | 10 + .../kubecost.clusterserviceversion.yaml | 506 +++++ .../kubecost/1.99.0/metadata/annotations.yaml | 17 + .../1.99.0/tests/scorecard/config.yaml | 70 + 16 files changed, 2820 insertions(+) create mode 100644 operators/kubecost/1.97.0/bundle.Dockerfile create mode 100644 operators/kubecost/1.97.0/manifests/charts.kubecost.com_costanalyzers.yaml create mode 100644 operators/kubecost/1.97.0/manifests/kubecost-controller-manager-metrics-service_v1_service.yaml create mode 100644 operators/kubecost/1.97.0/manifests/kubecost-manager-config_v1_configmap.yaml create mode 100644 operators/kubecost/1.97.0/manifests/kubecost-metrics-reader_rbac.authorization.k8s.io_v1_clusterrole.yaml create mode 100644 operators/kubecost/1.97.0/manifests/kubecost.clusterserviceversion.yaml create mode 100644 operators/kubecost/1.97.0/metadata/annotations.yaml create mode 100644 operators/kubecost/1.97.0/tests/scorecard/config.yaml create mode 100644 operators/kubecost/1.99.0/bundle.Dockerfile create mode 100644 operators/kubecost/1.99.0/manifests/charts.kubecost.com_costanalyzers.yaml create mode 100644 operators/kubecost/1.99.0/manifests/kubecost-controller-manager-metrics-service_v1_service.yaml create mode 100644 operators/kubecost/1.99.0/manifests/kubecost-manager-config_v1_configmap.yaml create mode 100644 operators/kubecost/1.99.0/manifests/kubecost-metrics-reader_rbac.authorization.k8s.io_v1_clusterrole.yaml create mode 100644 operators/kubecost/1.99.0/manifests/kubecost.clusterserviceversion.yaml create mode 100644 operators/kubecost/1.99.0/metadata/annotations.yaml create mode 100644 operators/kubecost/1.99.0/tests/scorecard/config.yaml diff --git a/operators/kubecost/1.97.0/bundle.Dockerfile b/operators/kubecost/1.97.0/bundle.Dockerfile new file mode 100644 index 00000000000..d8ea6815584 --- /dev/null +++ b/operators/kubecost/1.97.0/bundle.Dockerfile @@ -0,0 +1,20 @@ +FROM scratch + +# Core bundle labels. +LABEL operators.operatorframework.io.bundle.mediatype.v1=registry+v1 +LABEL operators.operatorframework.io.bundle.manifests.v1=manifests/ +LABEL operators.operatorframework.io.bundle.metadata.v1=metadata/ +LABEL operators.operatorframework.io.bundle.package.v1=kubecost +LABEL operators.operatorframework.io.bundle.channels.v1=1.97.0 +LABEL operators.operatorframework.io.metrics.builder=operator-sdk-v1.24.0 +LABEL operators.operatorframework.io.metrics.mediatype.v1=metrics+v1 +LABEL operators.operatorframework.io.metrics.project_layout=helm.sdk.operatorframework.io/v1 + +# Labels for testing. +LABEL operators.operatorframework.io.test.mediatype.v1=scorecard+v1 +LABEL operators.operatorframework.io.test.config.v1=tests/scorecard/ + +# Copy files to locations specified by labels. +COPY manifests /manifests/ +COPY metadata /metadata/ +COPY tests/scorecard /tests/scorecard/ diff --git a/operators/kubecost/1.97.0/manifests/charts.kubecost.com_costanalyzers.yaml b/operators/kubecost/1.97.0/manifests/charts.kubecost.com_costanalyzers.yaml new file mode 100644 index 00000000000..60a6a7653ae --- /dev/null +++ b/operators/kubecost/1.97.0/manifests/charts.kubecost.com_costanalyzers.yaml @@ -0,0 +1,50 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + creationTimestamp: null + name: costanalyzers.charts.kubecost.com +spec: + group: charts.kubecost.com + names: + kind: CostAnalyzer + listKind: CostAnalyzerList + plural: costanalyzers + singular: costanalyzer + scope: Namespaced + versions: + - name: v1alpha1 + schema: + openAPIV3Schema: + description: CostAnalyzer is the Schema for the costanalyzers API + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: Spec defines the desired state of CostAnalyzer + type: object + x-kubernetes-preserve-unknown-fields: true + status: + description: Status defines the observed state of CostAnalyzer + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + served: true + storage: true + subresources: + status: {} +status: + acceptedNames: + kind: "" + plural: "" + conditions: null + storedVersions: null diff --git a/operators/kubecost/1.97.0/manifests/kubecost-controller-manager-metrics-service_v1_service.yaml b/operators/kubecost/1.97.0/manifests/kubecost-controller-manager-metrics-service_v1_service.yaml new file mode 100644 index 00000000000..260a2e2aca5 --- /dev/null +++ b/operators/kubecost/1.97.0/manifests/kubecost-controller-manager-metrics-service_v1_service.yaml @@ -0,0 +1,17 @@ +apiVersion: v1 +kind: Service +metadata: + creationTimestamp: null + labels: + control-plane: controller-manager + name: kubecost-controller-manager-metrics-service +spec: + ports: + - name: https + port: 8443 + protocol: TCP + targetPort: https + selector: + control-plane: controller-manager +status: + loadBalancer: {} diff --git a/operators/kubecost/1.97.0/manifests/kubecost-manager-config_v1_configmap.yaml b/operators/kubecost/1.97.0/manifests/kubecost-manager-config_v1_configmap.yaml new file mode 100644 index 00000000000..cdd7c868656 --- /dev/null +++ b/operators/kubecost/1.97.0/manifests/kubecost-manager-config_v1_configmap.yaml @@ -0,0 +1,26 @@ +apiVersion: v1 +data: + controller_manager_config.yaml: | + apiVersion: controller-runtime.sigs.k8s.io/v1alpha1 + kind: ControllerManagerConfig + health: + healthProbeBindAddress: :8081 + metrics: + bindAddress: 127.0.0.1:8080 + + leaderElection: + leaderElect: true + resourceName: 811c9dc5.kubecost.com + # leaderElectionReleaseOnCancel defines if the leader should step down volume + # when the Manager ends. This requires the binary to immediately end when the + # Manager is stopped, otherwise, this setting is unsafe. Setting this significantly + # speeds up voluntary leader transitions as the new leader don't have to wait + # LeaseDuration time first. + # In the default scaffold provided, the program ends immediately after + # the manager stops, so would be fine to enable this option. However, + # if you are doing or is intended to do any operation such as perform cleanups + # after the manager stops then its usage might be unsafe. + # leaderElectionReleaseOnCancel: true +kind: ConfigMap +metadata: + name: kubecost-manager-config diff --git a/operators/kubecost/1.97.0/manifests/kubecost-metrics-reader_rbac.authorization.k8s.io_v1_clusterrole.yaml b/operators/kubecost/1.97.0/manifests/kubecost-metrics-reader_rbac.authorization.k8s.io_v1_clusterrole.yaml new file mode 100644 index 00000000000..f8c33bb3211 --- /dev/null +++ b/operators/kubecost/1.97.0/manifests/kubecost-metrics-reader_rbac.authorization.k8s.io_v1_clusterrole.yaml @@ -0,0 +1,10 @@ +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + creationTimestamp: null + name: kubecost-metrics-reader +rules: +- nonResourceURLs: + - /metrics + verbs: + - get diff --git a/operators/kubecost/1.97.0/manifests/kubecost.clusterserviceversion.yaml b/operators/kubecost/1.97.0/manifests/kubecost.clusterserviceversion.yaml new file mode 100644 index 00000000000..bd4981b8a78 --- /dev/null +++ b/operators/kubecost/1.97.0/manifests/kubecost.clusterserviceversion.yaml @@ -0,0 +1,1894 @@ +apiVersion: operators.coreos.com/v1alpha1 +kind: ClusterServiceVersion +metadata: + annotations: + alm-examples: |- + [ + { + "apiVersion": "charts.kubecost.com/v1alpha1", + "kind": "CostAnalyzer", + "metadata": { + "name": "costanalyzer-sample" + }, + "spec": { + "openshiftDeployment": true, + "affinity": {}, + "awsstore": { + "createServiceAccount": false, + "useAwsStore": false + }, + "clusterController": { + "enabled": false, + "image": "gcr.io/kubecost1/cluster-controller:v0.1.0", + "imagePullPolicy": "Always" + }, + "extraVolumeMounts": [], + "extraVolumes": [], + "global": { + "additionalLabels": {}, + "amp": { + "enabled": false, + "prometheusServerEndpoint": "https://localhost:8085/\u003cworkspaceId\u003e/", + "remoteWriteService": "https://aps-workspaces.us-west-2.amazonaws.com/workspaces/\u003cworkspaceId\u003e/api/v1/remote_write", + "sigv4": { + "region": "us-west-2" + } + }, + "assetReports": { + "enabled": false, + "reports": [ + { + "accumulate": false, + "aggregateBy": "type", + "filters": [ + { + "property": "cluster", + "value": "cluster-one" + } + ], + "title": "Example Asset Report 0", + "window": "today" + } + ] + }, + "grafana": { + "domainName": "cost-analyzer-grafana.default.svc", + "enabled": true, + "proxy": true, + "scheme": "http" + }, + "notifications": { + "alertmanager": { + "enabled": false, + "fqdn": "http://cost-analyzer-prometheus-server.default.svc" + } + }, + "podAnnotations": {}, + "prometheus": { + "enabled": true, + "fqdn": "http://cost-analyzer-prometheus-server.default.svc" + }, + "savedReports": { + "enabled": false, + "reports": [ + { + "accumulate": false, + "aggregateBy": "namespace", + "filters": [ + { + "property": "cluster", + "value": "cluster-one,cluster*" + }, + { + "property": "namespace", + "value": "kubecost" + } + ], + "idle": "separate", + "title": "Example Saved Report 0", + "window": "today" + }, + { + "accumulate": false, + "aggregateBy": "controllerKind", + "filters": [ + { + "property": "label", + "value": "app:cost*,environment:kube*" + }, + { + "property": "namespace", + "value": "kubecost" + } + ], + "idle": "share", + "title": "Example Saved Report 1", + "window": "month" + }, + { + "accumulate": true, + "aggregateBy": "service", + "filters": [], + "idle": "hide", + "title": "Example Saved Report 2", + "window": "2020-11-11T00:00:00Z,2020-12-09T23:59:59Z" + } + ] + }, + "thanos": { + "enabled": false + } + }, + "grafana": { + "adminPassword": "strongpassword", + "adminUser": "admin", + "affinity": {}, + "dashboardProviders": {}, + "dashboards": {}, + "dashboardsConfigMaps": {}, + "datasources": { + "datasources.yaml": { + "apiVersion": 1, + "datasources": [ + { + "access": "proxy", + "isDefault": false, + "name": "prometheus-kubecost", + "type": "prometheus", + "url": "http://kubecost-prometheus-server.kubecost.svc.cluster.local" + } + ] + } + }, + "deploymentStrategy": "RollingUpdate", + "downloadDashboardsImage": { + "pullPolicy": "IfNotPresent", + "repository": "curlimages/curl", + "tag": "latest" + }, + "env": {}, + "envFromSecret": "", + "extraSecretMounts": [], + "global": { + "additionalLabels": {}, + "amp": { + "enabled": false, + "prometheusServerEndpoint": "https://localhost:8085/\u003cworkspaceId\u003e/", + "remoteWriteService": "https://aps-workspaces.us-west-2.amazonaws.com/workspaces/\u003cworkspaceId\u003e/api/v1/remote_write", + "sigv4": { + "region": "us-west-2" + } + }, + "assetReports": { + "enabled": false, + "reports": [ + { + "accumulate": false, + "aggregateBy": "type", + "filters": [ + { + "property": "cluster", + "value": "cluster-one" + } + ], + "title": "Example Asset Report 0", + "window": "today" + } + ] + }, + "grafana": { + "domainName": "cost-analyzer-grafana.default.svc", + "enabled": true, + "proxy": true, + "scheme": "http" + }, + "notifications": { + "alertmanager": { + "enabled": false, + "fqdn": "http://cost-analyzer-prometheus-server.default.svc" + } + }, + "podAnnotations": {}, + "prometheus": { + "enabled": true, + "fqdn": "http://cost-analyzer-prometheus-server.default.svc" + }, + "savedReports": { + "enabled": false, + "reports": [ + { + "accumulate": false, + "aggregateBy": "namespace", + "filters": [ + { + "property": "cluster", + "value": "cluster-one,cluster*" + }, + { + "property": "namespace", + "value": "kubecost" + } + ], + "idle": "separate", + "title": "Example Saved Report 0", + "window": "today" + }, + { + "accumulate": false, + "aggregateBy": "controllerKind", + "filters": [ + { + "property": "label", + "value": "app:cost*,environment:kube*" + }, + { + "property": "namespace", + "value": "kubecost" + } + ], + "idle": "share", + "title": "Example Saved Report 1", + "window": "month" + }, + { + "accumulate": true, + "aggregateBy": "service", + "filters": [], + "idle": "hide", + "title": "Example Saved Report 2", + "window": "2020-11-11T00:00:00Z,2020-12-09T23:59:59Z" + } + ] + }, + "thanos": { + "enabled": false + } + }, + "grafana.ini": { + "analytics": { + "check_for_updates": true + }, + "auth.anonymous": { + "enabled": true, + "org_name": "Main Org.", + "org_role": "Editor" + }, + "grafana_net": { + "url": "https://grafana.net" + }, + "log": { + "mode": "console" + }, + "paths": { + "data": "/var/lib/grafana/data", + "logs": "/var/log/grafana", + "plugins": "/var/lib/grafana/plugins", + "provisioning": "/etc/grafana/provisioning" + }, + "server": { + "root_url": "%(protocol)s://%(domain)s:%(http_port)s/grafana" + } + }, + "image": { + "pullPolicy": "IfNotPresent", + "repository": "grafana/grafana", + "tag": "9.0.2" + }, + "ingress": { + "annotations": {}, + "enabled": false, + "hosts": [ + "chart-example.local" + ], + "labels": {}, + "path": "/", + "tls": [] + }, + "ldap": { + "config": "", + "existingSecret": "" + }, + "livenessProbe": { + "failureThreshold": 10, + "httpGet": { + "path": "/api/health", + "port": 3000 + }, + "initialDelaySeconds": 60, + "timeoutSeconds": 30 + }, + "nodeSelector": {}, + "persistence": { + "enabled": false + }, + "plugins": [], + "rbac": { + "create": true, + "pspEnabled": true, + "pspUseAppArmor": true + }, + "readinessProbe": { + "httpGet": { + "path": "/api/health", + "port": 3000 + } + }, + "replicas": 1, + "resources": {}, + "securityContext": { + "fsGroup": 472, + "runAsUser": 472 + }, + "service": { + "annotations": {}, + "labels": {}, + "port": 80, + "type": "ClusterIP" + }, + "serviceAccount": { + "create": true, + "name": null + }, + "sidecar": { + "dashboards": { + "annotations": {}, + "enabled": true, + "error_throttle_sleep": 0, + "folder": "/tmp/dashboards", + "label": "grafana_dashboard" + }, + "datasources": { + "enabled": false, + "error_throttle_sleep": 0, + "label": "grafana_datasource" + }, + "image": "kiwigrid/k8s-sidecar:1.19.2", + "imagePullPolicy": "IfNotPresent", + "resources": null + }, + "smtp": { + "existingSecret": "" + }, + "tolerations": [] + }, + "ingress": { + "annotations": null, + "enabled": false, + "hosts": [ + "cost-analyzer.local" + ], + "pathType": "ImplementationSpecific", + "paths": [ + "/" + ], + "tls": [] + }, + "initChownData": { + "resources": {} + }, + "initChownDataImage": "busybox", + "kubecostDeployment": { + "leaderFollower": { + "enabled": false + }, + "replicas": 1 + }, + "kubecostFrontend": { + "image": "gcr.io/kubecost1/frontend", + "imagePullPolicy": "Always", + "ipv6": { + "enabled": true + }, + "resources": { + "requests": { + "cpu": "10m", + "memory": "55Mi" + } + } + }, + "kubecostMetrics": { + "exporter": { + "additionalLabels": {}, + "affinity": {}, + "enabled": false, + "extraArgs": [], + "nodeSelector": {}, + "port": 9005, + "priorityClassName": [], + "prometheusScrape": true, + "resources": {}, + "service": { + "annotations": {} + }, + "serviceMonitor": { + "additionalLabels": {}, + "enabled": false + }, + "tolerations": [] + } + }, + "kubecostModel": { + "etl": true, + "etlDailyStoreDurationDays": 91, + "etlFileStoreEnabled": true, + "etlHourlyStoreDurationHours": 49, + "etlReadOnlyMode": false, + "extraArgs": [], + "image": "gcr.io/kubecost1/cost-model", + "imagePullPolicy": "Always", + "maxQueryConcurrency": 5, + "outOfClusterPromMetricsEnabled": false, + "resources": { + "requests": { + "cpu": "200m", + "memory": "55Mi" + } + }, + "warmCache": false, + "warmSavingsCache": true + }, + "kubecostToken": null, + "networkCosts": { + "additionalLabels": {}, + "affinity": {}, + "annotations": {}, + "config": { + "destinations": { + "cross-region": [], + "direct-classification": [], + "in-region": [], + "in-zone": [ + "127.0.0.1", + "169.254.0.0/16", + "10.0.0.0/8", + "172.16.0.0/12", + "192.168.0.0/16" + ] + }, + "services": { + "amazon-web-services": false, + "azure-cloud-services": false, + "google-cloud-services": false + } + }, + "enabled": false, + "extraArgs": [], + "image": "gcr.io/kubecost1/kubecost-network-costs:v16.0", + "imagePullPolicy": "Always", + "nodeSelector": {}, + "podMonitor": { + "additionalLabels": {}, + "enabled": false + }, + "podSecurityPolicy": { + "enabled": false + }, + "port": 3001, + "priorityClassName": [], + "prometheusScrape": false, + "resources": {}, + "service": { + "annotations": {} + }, + "tolerations": [], + "trafficLogging": true, + "updateStrategy": { + "type": "RollingUpdate" + } + }, + "networkPolicy": { + "costAnalyzer": { + "additionalLabels": {}, + "annotations": {}, + "enabled": false + }, + "denyEgress": true, + "enabled": false, + "sameNamespace": true + }, + "nodeSelector": {}, + "oidc": { + "authURL": "https://my.auth.server/authorize", + "clientID": "", + "clientSecret": "", + "discoveryURL": "https://my.auth.server/.well-known/openid-configuration", + "enabled": false, + "loginRedirectURL": "http://my.kubecost.url/model/oidc/authorize", + "secretName": "kubecost-oidc-secret" + }, + "persistentVolume": { + "dbSize": "32.0Gi", + "enabled": true, + "size": "32Gi" + }, + "podSecurityPolicy": { + "enabled": true + }, + "pricingCsv": { + "enabled": false, + "location": { + "URI": "s3://kc-csv-test/pricing_schema.csv", + "csvAccessCredentials": "pricing-schema-access-secret", + "provider": "AWS", + "region": "us-east-1" + } + }, + "priority": { + "enabled": false, + "name": "" + }, + "prometheus": { + "alertRelabelConfigs": null, + "alertmanager": { + "affinity": {}, + "baseURL": "http://localhost:9093", + "configFileName": "alertmanager.yml", + "configFromSecret": "", + "configMapOverrideName": "", + "enabled": false, + "extraArgs": {}, + "extraEnv": {}, + "extraSecretMounts": [], + "image": { + "pullPolicy": "IfNotPresent", + "repository": "quay.io/prometheus/alertmanager", + "tag": "v0.23.0" + }, + "ingress": { + "annotations": {}, + "enabled": false, + "extraLabels": {}, + "extraPaths": [], + "hosts": [], + "tls": [] + }, + "name": "alertmanager", + "nodeSelector": {}, + "persistentVolume": { + "accessModes": [ + "ReadWriteOnce" + ], + "annotations": {}, + "enabled": true, + "existingClaim": "", + "mountPath": "/data", + "size": "2Gi", + "subPath": "" + }, + "podAnnotations": {}, + "podDisruptionBudget": { + "enabled": false, + "maxUnavailable": 1 + }, + "podLabels": {}, + "podSecurityPolicy": { + "annotations": {} + }, + "prefixURL": "", + "priorityClassName": "", + "replicaCount": 1, + "resources": {}, + "securityContext": {}, + "service": { + "annotations": {}, + "clusterIP": "", + "externalIPs": [], + "labels": {}, + "loadBalancerIP": "", + "loadBalancerSourceRanges": [], + "servicePort": 80, + "sessionAffinity": "None", + "type": "ClusterIP" + }, + "statefulSet": { + "enabled": false, + "headless": { + "annotations": {}, + "labels": {}, + "servicePort": 80 + }, + "podManagementPolicy": "OrderedReady" + }, + "strategy": { + "rollingUpdate": null, + "type": "Recreate" + }, + "tolerations": [] + }, + "alertmanagerFiles": { + "alertmanager.yml": { + "global": {}, + "receivers": [ + { + "name": "default-receiver" + } + ], + "route": { + "group_interval": "5m", + "group_wait": "10s", + "receiver": "default-receiver", + "repeat_interval": "3h" + } + } + }, + "configmapReload": { + "alertmanager": { + "enabled": true, + "extraArgs": {}, + "extraConfigmapMounts": [], + "extraVolumeDirs": [], + "image": { + "pullPolicy": "IfNotPresent", + "repository": "jimmidyson/configmap-reload", + "tag": "v0.7.1" + }, + "name": "configmap-reload", + "resources": {} + }, + "prometheus": { + "enabled": true, + "extraArgs": {}, + "extraConfigmapMounts": [], + "extraVolumeDirs": [], + "image": { + "pullPolicy": "IfNotPresent", + "repository": "jimmidyson/configmap-reload", + "tag": "v0.7.1" + }, + "name": "configmap-reload", + "resources": {} + } + }, + "extraScrapeConfigs": "- job_name: kubecost\n honor_labels: true\n scrape_interval: 1m\n scrape_timeout: 60s\n metrics_path: /metrics\n scheme: http\n dns_sd_configs:\n - names:\n - {{ template \"cost-analyzer.serviceName\" . }}\n type: 'A'\n port: 9003\n- job_name: kubecost-networking\n kubernetes_sd_configs:\n - role: pod\n relabel_configs:\n # Scrape only the the targets matching the following metadata\n - source_labels: [__meta_kubernetes_pod_label_app]\n action: keep\n regex: {{ template \"cost-analyzer.networkCostsName\" . }}\n", + "global": { + "additionalLabels": {}, + "amp": { + "enabled": false, + "prometheusServerEndpoint": "https://localhost:8085/\u003cworkspaceId\u003e/", + "remoteWriteService": "https://aps-workspaces.us-west-2.amazonaws.com/workspaces/\u003cworkspaceId\u003e/api/v1/remote_write", + "sigv4": { + "region": "us-west-2" + } + }, + "assetReports": { + "enabled": false, + "reports": [ + { + "accumulate": false, + "aggregateBy": "type", + "filters": [ + { + "property": "cluster", + "value": "cluster-one" + } + ], + "title": "Example Asset Report 0", + "window": "today" + } + ] + }, + "grafana": { + "domainName": "cost-analyzer-grafana.default.svc", + "enabled": true, + "proxy": true, + "scheme": "http" + }, + "notifications": { + "alertmanager": { + "enabled": false, + "fqdn": "http://cost-analyzer-prometheus-server.default.svc" + } + }, + "podAnnotations": {}, + "prometheus": { + "enabled": true, + "fqdn": "http://cost-analyzer-prometheus-server.default.svc" + }, + "savedReports": { + "enabled": false, + "reports": [ + { + "accumulate": false, + "aggregateBy": "namespace", + "filters": [ + { + "property": "cluster", + "value": "cluster-one,cluster*" + }, + { + "property": "namespace", + "value": "kubecost" + } + ], + "idle": "separate", + "title": "Example Saved Report 0", + "window": "today" + }, + { + "accumulate": false, + "aggregateBy": "controllerKind", + "filters": [ + { + "property": "label", + "value": "app:cost*,environment:kube*" + }, + { + "property": "namespace", + "value": "kubecost" + } + ], + "idle": "share", + "title": "Example Saved Report 1", + "window": "month" + }, + { + "accumulate": true, + "aggregateBy": "service", + "filters": [], + "idle": "hide", + "title": "Example Saved Report 2", + "window": "2020-11-11T00:00:00Z,2020-12-09T23:59:59Z" + } + ] + }, + "thanos": { + "enabled": false + } + }, + "imagePullSecrets": null, + "kube-state-metrics": { + "affinity": {}, + "autosharding": { + "enabled": false + }, + "collectors": { + "certificatesigningrequests": true, + "configmaps": true, + "cronjobs": true, + "daemonsets": true, + "deployments": true, + "endpoints": true, + "horizontalpodautoscalers": true, + "ingresses": true, + "jobs": true, + "limitranges": true, + "mutatingwebhookconfigurations": false, + "namespaces": true, + "networkpolicies": false, + "nodes": true, + "persistentvolumeclaims": true, + "persistentvolumes": true, + "poddisruptionbudgets": true, + "pods": true, + "replicasets": true, + "replicationcontrollers": true, + "resourcequotas": true, + "secrets": false, + "services": true, + "statefulsets": true, + "storageclasses": true, + "validatingwebhookconfigurations": false, + "verticalpodautoscalers": false, + "volumeattachments": false + }, + "customLabels": {}, + "disabled": false, + "enabled": true, + "global": { + "additionalLabels": {}, + "amp": { + "enabled": false, + "prometheusServerEndpoint": "https://localhost:8085/\u003cworkspaceId\u003e/", + "remoteWriteService": "https://aps-workspaces.us-west-2.amazonaws.com/workspaces/\u003cworkspaceId\u003e/api/v1/remote_write", + "sigv4": { + "region": "us-west-2" + } + }, + "assetReports": { + "enabled": false, + "reports": [ + { + "accumulate": false, + "aggregateBy": "type", + "filters": [ + { + "property": "cluster", + "value": "cluster-one" + } + ], + "title": "Example Asset Report 0", + "window": "today" + } + ] + }, + "grafana": { + "domainName": "cost-analyzer-grafana.default.svc", + "enabled": true, + "proxy": true, + "scheme": "http" + }, + "notifications": { + "alertmanager": { + "enabled": false, + "fqdn": "http://cost-analyzer-prometheus-server.default.svc" + } + }, + "podAnnotations": {}, + "prometheus": { + "enabled": true, + "fqdn": "http://cost-analyzer-prometheus-server.default.svc" + }, + "savedReports": { + "enabled": false, + "reports": [ + { + "accumulate": false, + "aggregateBy": "namespace", + "filters": [ + { + "property": "cluster", + "value": "cluster-one,cluster*" + }, + { + "property": "namespace", + "value": "kubecost" + } + ], + "idle": "separate", + "title": "Example Saved Report 0", + "window": "today" + }, + { + "accumulate": false, + "aggregateBy": "controllerKind", + "filters": [ + { + "property": "label", + "value": "app:cost*,environment:kube*" + }, + { + "property": "namespace", + "value": "kubecost" + } + ], + "idle": "share", + "title": "Example Saved Report 1", + "window": "month" + }, + { + "accumulate": true, + "aggregateBy": "service", + "filters": [], + "idle": "hide", + "title": "Example Saved Report 2", + "window": "2020-11-11T00:00:00Z,2020-12-09T23:59:59Z" + } + ] + }, + "thanos": { + "enabled": false + } + }, + "hostNetwork": false, + "image": { + "pullPolicy": "IfNotPresent", + "repository": "k8s.gcr.io/kube-state-metrics/kube-state-metrics", + "tag": "v1.9.8" + }, + "namespaceOverride": "", + "nodeSelector": {}, + "podAnnotations": {}, + "podSecurityPolicy": { + "annotations": {}, + "enabled": false + }, + "prometheus": { + "monitor": { + "additionalLabels": {}, + "enabled": false, + "honorLabels": false, + "namespace": "" + } + }, + "prometheusScrape": true, + "rbac": { + "create": true + }, + "replicas": 1, + "securityContext": { + "enabled": true, + "fsGroup": 65534, + "runAsUser": 65534 + }, + "service": { + "annotations": {}, + "loadBalancerIP": "", + "nodePort": 0, + "port": 8080, + "type": "ClusterIP" + }, + "serviceAccount": { + "create": true, + "imagePullSecrets": [] + }, + "tolerations": [] + }, + "kubeStateMetrics": { + "enabled": true + }, + "networkPolicy": { + "enabled": false + }, + "nodeExporter": { + "enabled": true, + "extraArgs": {}, + "extraConfigmapMounts": [], + "extraHostPathMounts": [], + "hostNetwork": true, + "hostPID": true, + "image": { + "pullPolicy": "IfNotPresent", + "repository": "prom/node-exporter", + "tag": "v1.3.0" + }, + "name": "node-exporter", + "nodeSelector": {}, + "pod": { + "labels": {} + }, + "podAnnotations": {}, + "podDisruptionBudget": { + "enabled": false, + "maxUnavailable": 1 + }, + "podSecurityPolicy": { + "annotations": {} + }, + "priorityClassName": "", + "resources": {}, + "securityContext": {}, + "service": { + "annotations": { + "prometheus.io/scrape": "true" + }, + "clusterIP": "None", + "externalIPs": [], + "hostPort": 9100, + "labels": {}, + "loadBalancerIP": "", + "loadBalancerSourceRanges": [], + "servicePort": 9100, + "type": "ClusterIP" + }, + "tolerations": [], + "updateStrategy": { + "type": "RollingUpdate" + } + }, + "podSecurityPolicy": { + "enabled": false + }, + "pushgateway": { + "enabled": false, + "extraArgs": {}, + "image": { + "pullPolicy": "IfNotPresent", + "repository": "prom/pushgateway", + "tag": "v1.4.2" + }, + "ingress": { + "annotations": {}, + "enabled": false, + "extraPaths": [], + "hosts": [], + "tls": [] + }, + "name": "pushgateway", + "nodeSelector": {}, + "persistentVolume": { + "accessModes": [ + "ReadWriteOnce" + ], + "annotations": {}, + "enabled": true, + "existingClaim": "", + "mountPath": "/data", + "size": "2Gi", + "subPath": "" + }, + "podAnnotations": {}, + "podDisruptionBudget": { + "enabled": false, + "maxUnavailable": 1 + }, + "podSecurityPolicy": { + "annotations": {} + }, + "priorityClassName": "", + "replicaCount": 1, + "resources": {}, + "securityContext": {}, + "service": { + "annotations": { + "prometheus.io/probe": "pushgateway" + }, + "clusterIP": "", + "externalIPs": [], + "labels": {}, + "loadBalancerIP": "", + "loadBalancerSourceRanges": [], + "servicePort": 9091, + "strategy": { + "rollingUpdate": null, + "type": "Recreate" + }, + "type": "ClusterIP" + }, + "tolerations": [] + }, + "rbac": { + "create": true + }, + "server": { + "affinity": {}, + "alertmanagers": [], + "baseURL": "", + "configMapOverrideName": "", + "configPath": "/etc/config/prometheus.yml", + "emptyDir": { + "sizeLimit": "" + }, + "enabled": true, + "env": [], + "extraArgs": { + "query.max-concurrency": 1, + "query.max-samples": 100000000 + }, + "extraConfigmapMounts": [], + "extraFlags": [ + "web.enable-lifecycle" + ], + "extraHostPathMounts": [], + "extraInitContainers": [], + "extraSecretMounts": [], + "extraVolumeMounts": [], + "extraVolumes": [], + "global": { + "evaluation_interval": "1m", + "external_labels": { + "cluster_id": "cluster-one" + }, + "scrape_interval": "1m", + "scrape_timeout": "10s" + }, + "image": { + "pullPolicy": "IfNotPresent", + "repository": "quay.io/prometheus/prometheus", + "tag": "v2.35.0" + }, + "ingress": { + "annotations": {}, + "enabled": false, + "extraLabels": {}, + "extraPaths": [], + "hosts": [], + "pathType": "Prefix", + "tls": [] + }, + "livenessProbeFailureThreshold": 3, + "livenessProbeInitialDelay": 30, + "livenessProbeSuccessThreshold": 1, + "livenessProbeTimeout": 30, + "name": "server", + "nodeSelector": {}, + "persistentVolume": { + "accessModes": [ + "ReadWriteOnce" + ], + "annotations": {}, + "enabled": true, + "existingClaim": "", + "mountPath": "/data", + "size": "32Gi", + "subPath": "" + }, + "podAnnotations": {}, + "podDisruptionBudget": { + "enabled": false, + "maxUnavailable": 1 + }, + "podLabels": {}, + "podSecurityPolicy": { + "annotations": {} + }, + "prefixURL": "", + "priorityClassName": "", + "readinessProbeFailureThreshold": 3, + "readinessProbeInitialDelay": 30, + "readinessProbeSuccessThreshold": 1, + "readinessProbeTimeout": 30, + "remoteRead": {}, + "remoteWrite": {}, + "replicaCount": 1, + "resources": {}, + "retention": "15d", + "securityContext": {}, + "service": { + "annotations": {}, + "clusterIP": "", + "externalIPs": [], + "gRPC": { + "enabled": false, + "servicePort": 10901 + }, + "labels": {}, + "loadBalancerIP": "", + "loadBalancerSourceRanges": [], + "servicePort": 80, + "sessionAffinity": "None", + "statefulsetReplica": { + "enabled": false, + "replica": 0 + }, + "type": "ClusterIP" + }, + "sidecarContainers": null, + "statefulSet": { + "annotations": {}, + "enabled": false, + "headless": { + "annotations": {}, + "labels": {}, + "servicePort": 80 + }, + "labels": {}, + "podManagementPolicy": "OrderedReady" + }, + "strategy": { + "rollingUpdate": null, + "type": "Recreate" + }, + "terminationGracePeriodSeconds": 300, + "tolerations": [], + "verticalAutoscaler": { + "enabled": false + } + }, + "serverFiles": { + "alerting_rules.yml": {}, + "alerts": {}, + "prometheus.yml": { + "rule_files": [ + "/etc/config/recording_rules.yml", + "/etc/config/alerting_rules.yml", + "/etc/config/rules", + "/etc/config/alerts" + ], + "scrape_configs": [ + { + "job_name": "prometheus", + "static_configs": [ + { + "targets": [ + "localhost:9090" + ] + } + ] + }, + { + "bearer_token_file": "/var/run/secrets/kubernetes.io/serviceaccount/token", + "job_name": "kubernetes-nodes-cadvisor", + "kubernetes_sd_configs": [ + { + "role": "node" + } + ], + "metric_relabel_configs": [ + { + "action": "keep", + "regex": "(container_cpu_usage_seconds_total|container_memory_working_set_bytes|container_network_receive_errors_total|container_network_transmit_errors_total|container_network_receive_packets_dropped_total|container_network_transmit_packets_dropped_total|container_memory_usage_bytes|container_cpu_cfs_throttled_periods_total|container_cpu_cfs_periods_total|container_fs_usage_bytes|container_fs_limit_bytes|container_cpu_cfs_periods_total|container_fs_inodes_free|container_fs_inodes_total|container_fs_usage_bytes|container_fs_limit_bytes|container_cpu_cfs_throttled_periods_total|container_cpu_cfs_periods_total|container_network_receive_bytes_total|container_network_transmit_bytes_total|container_fs_inodes_free|container_fs_inodes_total|container_fs_usage_bytes|container_fs_limit_bytes|container_spec_cpu_shares|container_spec_memory_limit_bytes|container_network_receive_bytes_total|container_network_transmit_bytes_total|container_fs_reads_bytes_total|container_network_receive_bytes_total|container_fs_writes_bytes_total|container_fs_reads_bytes_total|cadvisor_version_info|kubecost_pv_info)", + "source_labels": [ + "__name__" + ] + }, + { + "action": "replace", + "regex": "(.+)", + "source_labels": [ + "container" + ], + "target_label": "container_name" + }, + { + "action": "replace", + "regex": "(.+)", + "source_labels": [ + "pod" + ], + "target_label": "pod_name" + } + ], + "relabel_configs": [ + { + "action": "labelmap", + "regex": "__meta_kubernetes_node_label_(.+)" + }, + { + "replacement": "kubernetes.default.svc:443", + "target_label": "__address__" + }, + { + "regex": "(.+)", + "replacement": "/api/v1/nodes/$1/proxy/metrics/cadvisor", + "source_labels": [ + "__meta_kubernetes_node_name" + ], + "target_label": "__metrics_path__" + } + ], + "scheme": "https", + "tls_config": { + "ca_file": "/var/run/secrets/kubernetes.io/serviceaccount/ca.crt", + "insecure_skip_verify": true + } + }, + { + "job_name": "kubernetes-service-endpoints", + "kubernetes_sd_configs": [ + { + "role": "endpoints" + } + ], + "metric_relabel_configs": [ + { + "action": "keep", + "regex": "(container_cpu_allocation|container_cpu_usage_seconds_total|container_fs_limit_bytes|container_fs_writes_bytes_total|container_gpu_allocation|container_memory_allocation_bytes|container_memory_usage_bytes|container_memory_working_set_bytes|container_network_receive_bytes_total|container_network_transmit_bytes_total|DCGM_FI_DEV_GPU_UTIL|deployment_match_labels|kube_daemonset_status_desired_number_scheduled|kube_daemonset_status_number_ready|kube_deployment_spec_replicas|kube_deployment_status_replicas|kube_deployment_status_replicas_available|kube_job_status_failed|kube_namespace_annotations|kube_namespace_labels|kube_node_info|kube_node_labels|kube_node_status_allocatable|kube_node_status_allocatable_cpu_cores|kube_node_status_allocatable_memory_bytes|kube_node_status_capacity|kube_node_status_capacity_cpu_cores|kube_node_status_capacity_memory_bytes|kube_node_status_condition|kube_persistentvolume_capacity_bytes|kube_persistentvolume_status_phase|kube_persistentvolumeclaim_info|kube_persistentvolumeclaim_resource_requests_storage_bytes|kube_pod_container_info|kube_pod_container_resource_limits|kube_pod_container_resource_limits_cpu_cores|kube_pod_container_resource_limits_memory_bytes|kube_pod_container_resource_requests|kube_pod_container_resource_requests_cpu_cores|kube_pod_container_resource_requests_memory_bytes|kube_pod_container_status_restarts_total|kube_pod_container_status_running|kube_pod_container_status_terminated_reason|kube_pod_labels|kube_pod_owner|kube_pod_status_phase|kube_replicaset_owner|kube_statefulset_replicas|kube_statefulset_status_replicas|kubecost_cluster_info|kubecost_cluster_management_cost|kubecost_cluster_memory_working_set_bytes|kubecost_load_balancer_cost|kubecost_network_internet_egress_cost|kubecost_network_region_egress_cost|kubecost_network_zone_egress_cost|kubecost_node_is_spot|kubecost_pod_network_egress_bytes_total|node_cpu_hourly_cost|node_cpu_seconds_total|node_disk_reads_completed|node_disk_reads_completed_total|node_disk_writes_completed|node_disk_writes_completed_total|node_filesystem_device_error|node_gpu_count|node_gpu_hourly_cost|node_memory_Buffers_bytes|node_memory_Cached_bytes|node_memory_MemAvailable_bytes|node_memory_MemFree_bytes|node_memory_MemTotal_bytes|node_network_transmit_bytes_total|node_ram_hourly_cost|node_total_hourly_cost|pod_pvc_allocation|pv_hourly_cost|service_selector_labels|statefulSet_match_labels|kubecost_pv_info|up)", + "source_labels": [ + "__name__" + ] + } + ], + "relabel_configs": [ + { + "action": "keep", + "regex": true, + "source_labels": [ + "__meta_kubernetes_service_annotation_prometheus_io_scrape" + ] + }, + { + "action": "replace", + "regex": "(https?)", + "source_labels": [ + "__meta_kubernetes_service_annotation_prometheus_io_scheme" + ], + "target_label": "__scheme__" + }, + { + "action": "replace", + "regex": "(.+)", + "source_labels": [ + "__meta_kubernetes_service_annotation_prometheus_io_path" + ], + "target_label": "__metrics_path__" + }, + { + "action": "replace", + "regex": "([^:]+)(?::\\d+)?;(\\d+)", + "replacement": "$1:$2", + "source_labels": [ + "__address__", + "__meta_kubernetes_service_annotation_prometheus_io_port" + ], + "target_label": "__address__" + }, + { + "action": "labelmap", + "regex": "__meta_kubernetes_service_label_(.+)" + }, + { + "action": "replace", + "source_labels": [ + "__meta_kubernetes_namespace" + ], + "target_label": "kubernetes_namespace" + }, + { + "action": "replace", + "source_labels": [ + "__meta_kubernetes_service_name" + ], + "target_label": "kubernetes_name" + }, + { + "action": "replace", + "source_labels": [ + "__meta_kubernetes_pod_node_name" + ], + "target_label": "kubernetes_node" + } + ] + }, + { + "job_name": "kubernetes-service-endpoints-slow", + "kubernetes_sd_configs": [ + { + "role": "endpoints" + } + ], + "relabel_configs": [ + { + "action": "keep", + "regex": true, + "source_labels": [ + "__meta_kubernetes_service_annotation_prometheus_io_scrape_slow" + ] + }, + { + "action": "replace", + "regex": "(https?)", + "source_labels": [ + "__meta_kubernetes_service_annotation_prometheus_io_scheme" + ], + "target_label": "__scheme__" + }, + { + "action": "replace", + "regex": "(.+)", + "source_labels": [ + "__meta_kubernetes_service_annotation_prometheus_io_path" + ], + "target_label": "__metrics_path__" + }, + { + "action": "replace", + "regex": "([^:]+)(?::\\d+)?;(\\d+)", + "replacement": "$1:$2", + "source_labels": [ + "__address__", + "__meta_kubernetes_service_annotation_prometheus_io_port" + ], + "target_label": "__address__" + }, + { + "action": "labelmap", + "regex": "__meta_kubernetes_service_label_(.+)" + }, + { + "action": "replace", + "source_labels": [ + "__meta_kubernetes_namespace" + ], + "target_label": "kubernetes_namespace" + }, + { + "action": "replace", + "source_labels": [ + "__meta_kubernetes_service_name" + ], + "target_label": "kubernetes_name" + }, + { + "action": "replace", + "source_labels": [ + "__meta_kubernetes_pod_node_name" + ], + "target_label": "kubernetes_node" + } + ], + "scrape_interval": "5m", + "scrape_timeout": "30s" + }, + { + "honor_labels": true, + "job_name": "prometheus-pushgateway", + "kubernetes_sd_configs": [ + { + "role": "service" + } + ], + "relabel_configs": [ + { + "action": "keep", + "regex": "pushgateway", + "source_labels": [ + "__meta_kubernetes_service_annotation_prometheus_io_probe" + ] + } + ] + }, + { + "job_name": "kubernetes-services", + "kubernetes_sd_configs": [ + { + "role": "service" + } + ], + "metrics_path": "/probe", + "params": { + "module": [ + "http_2xx" + ] + }, + "relabel_configs": [ + { + "action": "keep", + "regex": true, + "source_labels": [ + "__meta_kubernetes_service_annotation_prometheus_io_probe" + ] + }, + { + "source_labels": [ + "__address__" + ], + "target_label": "__param_target" + }, + { + "replacement": "blackbox", + "target_label": "__address__" + }, + { + "source_labels": [ + "__param_target" + ], + "target_label": "instance" + }, + { + "action": "labelmap", + "regex": "__meta_kubernetes_service_label_(.+)" + }, + { + "source_labels": [ + "__meta_kubernetes_namespace" + ], + "target_label": "kubernetes_namespace" + }, + { + "source_labels": [ + "__meta_kubernetes_service_name" + ], + "target_label": "kubernetes_name" + } + ] + } + ] + }, + "recording_rules.yml": {}, + "rules": { + "groups": [ + { + "name": "CPU", + "rules": [ + { + "expr": "sum(rate(container_cpu_usage_seconds_total{container_name!=\"\"}[5m]))", + "record": "cluster:cpu_usage:rate5m" + }, + { + "expr": "rate(container_cpu_usage_seconds_total{container_name!=\"\"}[5m])", + "record": "cluster:cpu_usage_nosum:rate5m" + }, + { + "expr": "avg(irate(container_cpu_usage_seconds_total{container_name!=\"POD\", container_name!=\"\"}[5m])) by (container_name,pod_name,namespace)", + "record": "kubecost_container_cpu_usage_irate" + }, + { + "expr": "sum(container_memory_working_set_bytes{container_name!=\"POD\",container_name!=\"\"}) by (container_name,pod_name,namespace)", + "record": "kubecost_container_memory_working_set_bytes" + }, + { + "expr": "sum(container_memory_working_set_bytes{container_name!=\"POD\",container_name!=\"\"})", + "record": "kubecost_cluster_memory_working_set_bytes" + } + ] + }, + { + "name": "Savings", + "rules": [ + { + "expr": "sum(avg(kube_pod_owner{owner_kind!=\"DaemonSet\"}) by (pod) * sum(container_cpu_allocation) by (pod))", + "labels": { + "daemonset": "false" + }, + "record": "kubecost_savings_cpu_allocation" + }, + { + "expr": "sum(avg(kube_pod_owner{owner_kind=\"DaemonSet\"}) by (pod) * sum(container_cpu_allocation) by (pod)) / sum(kube_node_info)", + "labels": { + "daemonset": "true" + }, + "record": "kubecost_savings_cpu_allocation" + }, + { + "expr": "sum(avg(kube_pod_owner{owner_kind!=\"DaemonSet\"}) by (pod) * sum(container_memory_allocation_bytes) by (pod))", + "labels": { + "daemonset": "false" + }, + "record": "kubecost_savings_memory_allocation_bytes" + }, + { + "expr": "sum(avg(kube_pod_owner{owner_kind=\"DaemonSet\"}) by (pod) * sum(container_memory_allocation_bytes) by (pod)) / sum(kube_node_info)", + "labels": { + "daemonset": "true" + }, + "record": "kubecost_savings_memory_allocation_bytes" + } + ] + } + ] + } + }, + "serviceAccounts": { + "alertmanager": { + "create": true, + "name": null + }, + "nodeExporter": { + "create": true, + "name": null + }, + "pushgateway": { + "create": true, + "name": null + }, + "server": { + "create": true, + "name": null + } + } + }, + "prometheusRule": { + "additionalLabels": {}, + "enabled": false + }, + "remoteWrite": { + "postgres": { + "auth": { + "password": "admin" + }, + "enabled": false, + "initImage": "gcr.io/kubecost1/sql-init", + "initImagePullPolicy": "Always", + "installLocal": true, + "persistentVolume": { + "size": "200Gi" + }, + "remotePostgresAddress": "" + } + }, + "reporting": { + "errorReporting": true, + "logCollection": true, + "productAnalytics": true, + "valuesReporting": true + }, + "saml": { + "appRootURL": "http://localhost:9090", + "authTimeout": 1440, + "enabled": false, + "idpMetadataURL": "https://dev-elu2z98r.auth0.com/samlp/metadata/c6nY4M37rBP0qSO1IYIqBPPyIPxLS8v2", + "rbac": { + "enabled": false, + "groups": [ + { + "assertionName": "http://schemas.auth0.com/userType", + "assertionValues": [ + "admin", + "superusers" + ], + "enabled": false, + "name": "admin" + }, + { + "assertionName": "http://schemas.auth0.com/userType", + "assertionvalues": [ + "readonly" + ], + "enabled": false, + "name": "readonly" + }, + { + "assertionName": "http://schemas.auth0.com/userType", + "assertionValues": [ + "editor" + ], + "enabled": true, + "name": "editor" + } + ] + }, + "redirectURL": "https://dev-elu2z98r.auth0.com/v2/logout", + "secretName": "kubecost-authzero" + }, + "service": { + "annotations": {}, + "labels": {}, + "port": 9090, + "targetPort": 9090, + "type": "ClusterIP" + }, + "serviceAccount": { + "annotations": {}, + "create": true + }, + "serviceMonitor": { + "additionalLabels": {}, + "enabled": false + }, + "sigV4Proxy": { + "extraEnv": null, + "host": "aps-workspaces.us-west-2.amazonaws.com", + "image": "public.ecr.aws/aws-observability/aws-sigv4-proxy:latest", + "imagePullPolicy": "Always", + "name": "aps", + "port": 8005, + "region": "us-west-2" + }, + "supportNFS": false, + "systemProxy": { + "enabled": false, + "httpProxyUrl": "", + "httpsProxyUrl": "", + "noProxy": "" + }, + "tolerations": [] + } + } + ] + capabilities: Basic Install + categories: Monitoring + containerImage: gcr.io/kubecost1/operator/controller:latest + createdAt: 2022-10-10T08:00:00Z + support: Kubecost + description: |- + The Kubecost Operator runs within a Openshift cluster and provides a means to deploy and manage Kubecost and components to monitor cloud costs. + operators.operatorframework.io/builder: operator-sdk-v1.24.0 + operators.operatorframework.io/project_layout: helm.sdk.operatorframework.io/v1 + name: kubecost.v1.97.0 + namespace: kubecost +spec: + apiservicedefinitions: {} + customresourcedefinitions: + owned: + - kind: CostAnalyzer + name: costanalyzers.charts.kubecost.com + version: v1alpha1 + displayName: Kubecost + description: The Kubecost Operator runs within a Openshift cluster and provides a means to deploy and manage Kubecost and components to monitor cloud costs. + description: |- + The Kubecost Operator runs within a Openshift cluster and provides a means to deploy and manage Kubecost and components to monitor cloud costs. + + ## Prerequisites + To start using the Kubecost Operator, you need to create a namespace for the deployment: + ``` + kubectl create namespace kubecost + ``` + Refer to the [Kubecost documentation](https://guide.kubecost.com/hc/en-us/search?utf8=%E2%9C%93&query=openshift) for more details. + + displayName: Kubecost + icon: + - base64data: "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" + mediatype: "image/png" + install: + spec: + clusterPermissions: + - rules: + - apiGroups: + - "" + resources: + - namespaces + verbs: + - get + - apiGroups: + - "" + resources: + - secrets + verbs: + - '*' + - apiGroups: + - "" + resources: + - events + verbs: + - create + - apiGroups: + - charts.kubecost.com + resources: + - costanalyzers + - costanalyzers/status + - costanalyzers/finalizers + verbs: + - create + - delete + - get + - list + - patch + - update + - watch + - apiGroups: + - policy + resources: + - podsecuritypolicies + verbs: + - '*' + - apiGroups: + - rbac.authorization.k8s.io + resources: + - clusterrolebindings + - clusterroles + verbs: + - '*' + - apiGroups: + - apps + resources: + - daemonsets + - deployments + verbs: + - '*' + - apiGroups: + - "" + resources: + - configmaps + - persistentvolumeclaims + - secrets + - serviceaccounts + - services + verbs: + - '*' + - apiGroups: + - rbac.authorization.k8s.io + resources: + - rolebindings + - roles + verbs: + - '*' + - apiGroups: + - authentication.k8s.io + resources: + - tokenreviews + verbs: + - create + - apiGroups: + - authorization.k8s.io + resources: + - subjectaccessreviews + verbs: + - create + serviceAccountName: kubecost-controller-manager + deployments: + - label: + control-plane: controller-manager + name: kubecost-controller-manager + spec: + replicas: 1 + selector: + matchLabels: + control-plane: controller-manager + strategy: {} + template: + metadata: + annotations: + kubectl.kubernetes.io/default-container: manager + labels: + control-plane: controller-manager + spec: + containers: + - args: + - --secure-listen-address=0.0.0.0:8443 + - --upstream=http://127.0.0.1:8080/ + - --logtostderr=true + - --v=0 + image: gcr.io/kubebuilder/kube-rbac-proxy:v0.13.0 + name: kube-rbac-proxy + ports: + - containerPort: 8443 + name: https + protocol: TCP + resources: + limits: + cpu: 500m + memory: 128Mi + requests: + cpu: 5m + memory: 64Mi + securityContext: + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL + - args: + - --health-probe-bind-address=:8081 + - --metrics-bind-address=127.0.0.1:8080 + - --leader-elect + - --leader-election-id=kubecost + image: gcr.io/kubecost1/operator/controller:latest + livenessProbe: + httpGet: + path: /healthz + port: 8081 + initialDelaySeconds: 15 + periodSeconds: 20 + name: manager + readinessProbe: + httpGet: + path: /readyz + port: 8081 + initialDelaySeconds: 5 + periodSeconds: 10 + resources: + limits: + cpu: 500m + memory: 512Mi + requests: + cpu: 10m + memory: 64Mi + securityContext: + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL + securityContext: + runAsNonRoot: true + serviceAccountName: kubecost-controller-manager + terminationGracePeriodSeconds: 10 + permissions: + - rules: + - apiGroups: + - "" + resources: + - configmaps + verbs: + - get + - list + - watch + - create + - update + - patch + - delete + - apiGroups: + - coordination.k8s.io + resources: + - leases + verbs: + - get + - list + - watch + - create + - update + - patch + - delete + - apiGroups: + - "" + resources: + - events + verbs: + - create + - patch + serviceAccountName: kubecost-controller-manager + strategy: deployment + installModes: + - supported: false + type: OwnNamespace + - supported: false + type: SingleNamespace + - supported: false + type: MultiNamespace + - supported: true + type: AllNamespaces + keywords: + - cost + - cost saving + - recommendation + - kubecost + - openshift + links: + - name: Kubecost + url: https://kubecost.domain + maturity: alpha + provider: + name: Kubecost + url: kubecost.com + maintainers: + - name: Kubecost + email: linh@kubecost.com + version: 1.97.0 \ No newline at end of file diff --git a/operators/kubecost/1.97.0/metadata/annotations.yaml b/operators/kubecost/1.97.0/metadata/annotations.yaml new file mode 100644 index 00000000000..ccb54454990 --- /dev/null +++ b/operators/kubecost/1.97.0/metadata/annotations.yaml @@ -0,0 +1,17 @@ +annotations: + # Core bundle annotations. + operators.operatorframework.io.bundle.mediatype.v1: registry+v1 + operators.operatorframework.io.bundle.manifests.v1: manifests/ + operators.operatorframework.io.bundle.metadata.v1: metadata/ + operators.operatorframework.io.bundle.package.v1: kubecost + operators.operatorframework.io.bundle.channels.v1: alpha + operators.operatorframework.io.metrics.builder: operator-sdk-v1.24.0 + operators.operatorframework.io.metrics.mediatype.v1: metrics+v1 + operators.operatorframework.io.metrics.project_layout: helm.sdk.operatorframework.io/v1 + + # Annotations for testing. + operators.operatorframework.io.test.mediatype.v1: scorecard+v1 + operators.operatorframework.io.test.config.v1: tests/scorecard/ + + # Annotations to specify OCP versions compatibility. + com.redhat.openshift.versions: v4.9 \ No newline at end of file diff --git a/operators/kubecost/1.97.0/tests/scorecard/config.yaml b/operators/kubecost/1.97.0/tests/scorecard/config.yaml new file mode 100644 index 00000000000..3c01e456ba6 --- /dev/null +++ b/operators/kubecost/1.97.0/tests/scorecard/config.yaml @@ -0,0 +1,70 @@ +apiVersion: scorecard.operatorframework.io/v1alpha3 +kind: Configuration +metadata: + name: config +stages: +- parallel: true + tests: + - entrypoint: + - scorecard-test + - basic-check-spec + image: quay.io/operator-framework/scorecard-test:v1.24.0 + labels: + suite: basic + test: basic-check-spec-test + storage: + spec: + mountPath: {} + - entrypoint: + - scorecard-test + - olm-bundle-validation + image: quay.io/operator-framework/scorecard-test:v1.24.0 + labels: + suite: olm + test: olm-bundle-validation-test + storage: + spec: + mountPath: {} + - entrypoint: + - scorecard-test + - olm-crds-have-validation + image: quay.io/operator-framework/scorecard-test:v1.24.0 + labels: + suite: olm + test: olm-crds-have-validation-test + storage: + spec: + mountPath: {} + - entrypoint: + - scorecard-test + - olm-crds-have-resources + image: quay.io/operator-framework/scorecard-test:v1.24.0 + labels: + suite: olm + test: olm-crds-have-resources-test + storage: + spec: + mountPath: {} + - entrypoint: + - scorecard-test + - olm-spec-descriptors + image: quay.io/operator-framework/scorecard-test:v1.24.0 + labels: + suite: olm + test: olm-spec-descriptors-test + storage: + spec: + mountPath: {} + - entrypoint: + - scorecard-test + - olm-status-descriptors + image: quay.io/operator-framework/scorecard-test:v1.24.0 + labels: + suite: olm + test: olm-status-descriptors-test + storage: + spec: + mountPath: {} +storage: + spec: + mountPath: {} diff --git a/operators/kubecost/1.99.0/bundle.Dockerfile b/operators/kubecost/1.99.0/bundle.Dockerfile new file mode 100644 index 00000000000..7d746810165 --- /dev/null +++ b/operators/kubecost/1.99.0/bundle.Dockerfile @@ -0,0 +1,20 @@ +FROM scratch + +# Core bundle labels. +LABEL operators.operatorframework.io.bundle.mediatype.v1=registry+v1 +LABEL operators.operatorframework.io.bundle.manifests.v1=manifests/ +LABEL operators.operatorframework.io.bundle.metadata.v1=metadata/ +LABEL operators.operatorframework.io.bundle.package.v1=kubecost +LABEL operators.operatorframework.io.bundle.channels.v1=1.99.0 +LABEL operators.operatorframework.io.metrics.builder=operator-sdk-v1.24.0 +LABEL operators.operatorframework.io.metrics.mediatype.v1=metrics+v1 +LABEL operators.operatorframework.io.metrics.project_layout=helm.sdk.operatorframework.io/v1 + +# Labels for testing. +LABEL operators.operatorframework.io.test.mediatype.v1=scorecard+v1 +LABEL operators.operatorframework.io.test.config.v1=tests/scorecard/ + +# Copy files to locations specified by labels. +COPY bundle/manifests /manifests/ +COPY bundle/metadata /metadata/ +COPY bundle/tests/scorecard /tests/scorecard/ diff --git a/operators/kubecost/1.99.0/manifests/charts.kubecost.com_costanalyzers.yaml b/operators/kubecost/1.99.0/manifests/charts.kubecost.com_costanalyzers.yaml new file mode 100644 index 00000000000..60a6a7653ae --- /dev/null +++ b/operators/kubecost/1.99.0/manifests/charts.kubecost.com_costanalyzers.yaml @@ -0,0 +1,50 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + creationTimestamp: null + name: costanalyzers.charts.kubecost.com +spec: + group: charts.kubecost.com + names: + kind: CostAnalyzer + listKind: CostAnalyzerList + plural: costanalyzers + singular: costanalyzer + scope: Namespaced + versions: + - name: v1alpha1 + schema: + openAPIV3Schema: + description: CostAnalyzer is the Schema for the costanalyzers API + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: Spec defines the desired state of CostAnalyzer + type: object + x-kubernetes-preserve-unknown-fields: true + status: + description: Status defines the observed state of CostAnalyzer + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + served: true + storage: true + subresources: + status: {} +status: + acceptedNames: + kind: "" + plural: "" + conditions: null + storedVersions: null diff --git a/operators/kubecost/1.99.0/manifests/kubecost-controller-manager-metrics-service_v1_service.yaml b/operators/kubecost/1.99.0/manifests/kubecost-controller-manager-metrics-service_v1_service.yaml new file mode 100644 index 00000000000..260a2e2aca5 --- /dev/null +++ b/operators/kubecost/1.99.0/manifests/kubecost-controller-manager-metrics-service_v1_service.yaml @@ -0,0 +1,17 @@ +apiVersion: v1 +kind: Service +metadata: + creationTimestamp: null + labels: + control-plane: controller-manager + name: kubecost-controller-manager-metrics-service +spec: + ports: + - name: https + port: 8443 + protocol: TCP + targetPort: https + selector: + control-plane: controller-manager +status: + loadBalancer: {} diff --git a/operators/kubecost/1.99.0/manifests/kubecost-manager-config_v1_configmap.yaml b/operators/kubecost/1.99.0/manifests/kubecost-manager-config_v1_configmap.yaml new file mode 100644 index 00000000000..cdd7c868656 --- /dev/null +++ b/operators/kubecost/1.99.0/manifests/kubecost-manager-config_v1_configmap.yaml @@ -0,0 +1,26 @@ +apiVersion: v1 +data: + controller_manager_config.yaml: | + apiVersion: controller-runtime.sigs.k8s.io/v1alpha1 + kind: ControllerManagerConfig + health: + healthProbeBindAddress: :8081 + metrics: + bindAddress: 127.0.0.1:8080 + + leaderElection: + leaderElect: true + resourceName: 811c9dc5.kubecost.com + # leaderElectionReleaseOnCancel defines if the leader should step down volume + # when the Manager ends. This requires the binary to immediately end when the + # Manager is stopped, otherwise, this setting is unsafe. Setting this significantly + # speeds up voluntary leader transitions as the new leader don't have to wait + # LeaseDuration time first. + # In the default scaffold provided, the program ends immediately after + # the manager stops, so would be fine to enable this option. However, + # if you are doing or is intended to do any operation such as perform cleanups + # after the manager stops then its usage might be unsafe. + # leaderElectionReleaseOnCancel: true +kind: ConfigMap +metadata: + name: kubecost-manager-config diff --git a/operators/kubecost/1.99.0/manifests/kubecost-metrics-reader_rbac.authorization.k8s.io_v1_clusterrole.yaml b/operators/kubecost/1.99.0/manifests/kubecost-metrics-reader_rbac.authorization.k8s.io_v1_clusterrole.yaml new file mode 100644 index 00000000000..f8c33bb3211 --- /dev/null +++ b/operators/kubecost/1.99.0/manifests/kubecost-metrics-reader_rbac.authorization.k8s.io_v1_clusterrole.yaml @@ -0,0 +1,10 @@ +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + creationTimestamp: null + name: kubecost-metrics-reader +rules: +- nonResourceURLs: + - /metrics + verbs: + - get diff --git a/operators/kubecost/1.99.0/manifests/kubecost.clusterserviceversion.yaml b/operators/kubecost/1.99.0/manifests/kubecost.clusterserviceversion.yaml new file mode 100644 index 00000000000..91b41ef7df4 --- /dev/null +++ b/operators/kubecost/1.99.0/manifests/kubecost.clusterserviceversion.yaml @@ -0,0 +1,506 @@ +apiVersion: operators.coreos.com/v1alpha1 +kind: ClusterServiceVersion +metadata: + annotations: + alm-examples: |- + [ + { + "apiVersion": "charts.kubecost.com/v1alpha1", + "kind": "CostAnalyzer", + "metadata": { + "name": "cost-analyzer-ocp-sample" + }, + "spec": { + "affinity": {}, + "global": { + "grafana": { + "enabled": false, + "proxy": false + } + }, + "grafana": { + "grafana": { + "containerSecurityContext": { + "securityContext": { + "allowPrivilegeEscalation": false, + "capabilities": { + "drop": [ + "ALL" + ] + }, + "readOnlyRootFilesystem": true, + "runAsNonRoot": true + } + } + }, + "initContainers": { + "containerSecurityContext": { + "securityContext": { + "allowPrivilegeEscalation": false, + "capabilities": { + "drop": [ + "ALL" + ] + }, + "readOnlyRootFilesystem": true, + "runAsNonRoot": true + } + } + }, + "rbac": { + "pspEnabled": false + }, + "sidecar": { + "containerSecurityContext": { + "securityContext": { + "allowPrivilegeEscalation": false, + "capabilities": { + "drop": [ + "ALL" + ] + }, + "readOnlyRootFilesystem": true, + "runAsNonRoot": true + } + } + } + }, + "kubecostDeployment": { + "podSecurityContext": { + "runAsNonRoot": true + } + }, + "kubecostFrontend": { + "containerSecurityContext": { + "allowPrivilegeEscalation": false, + "capabilities": { + "drop": [ + "ALL" + ] + }, + "readOnlyRootFilesystem": true, + "runAsNonRoot": true + } + }, + "kubecostModel": { + "containerSecurityContext": { + "allowPrivilegeEscalation": false, + "capabilities": { + "drop": [ + "ALL" + ] + }, + "readOnlyRootFilesystem": true, + "runAsNonRoot": true + }, + "containerStatsEnabled": true, + "etlCloudAsset": true + }, + "kubecostNetworkCosts": { + "containerSecurityContext": {}, + "securityContext": {} + }, + "kubecostProductConfigs": { + "clusterName": "YOUR_CLUSTER_NAME" + }, + "networkCosts": { + "config": { + "services": { + "amazon-web-services": false, + "azure-cloud-services": false, + "google-cloud-services": false + } + }, + "enabled": false, + "podSecurityPolicy": { + "enabled": false + } + }, + "podSecurityPolicy": { + "enabled": false + }, + "prometheus": { + "configmapReload": { + "containerSecurityContext": { + "securityContext": { + "allowPrivilegeEscalation": false, + "capabilities": { + "drop": [ + "ALL" + ] + }, + "readOnlyRootFilesystem": true, + "runAsNonRoot": true + } + } + }, + "kube-state-metrics": { + "disabled": true + }, + "kubeStateMetrics": { + "enabled": false + }, + "nodeExporter": { + "enabled": false + }, + "podSecurityPolicy": { + "enabled": false + }, + "server": { + "containerSecurityContext": { + "securityContext": { + "allowPrivilegeEscalation": false, + "capabilities": { + "drop": [ + "ALL" + ] + }, + "readOnlyRootFilesystem": true, + "runAsNonRoot": true + } + }, + "global": { + "external_labels": { + "cluster_id": "YOUR_CLUSTER_NAME" + } + } + }, + "sidecarContainers": { + "containerSecurityContext": { + "securityContext": { + "allowPrivilegeEscalation": false, + "capabilities": { + "drop": [ + "ALL" + ] + }, + "readOnlyRootFilesystem": true, + "runAsNonRoot": true + } + } + } + }, + "thanos": { + "thanoscompact": { + "containerSecurityContext": { + "securityContext": { + "allowPrivilegeEscalation": false, + "capabilities": { + "drop": [ + "ALL" + ] + }, + "readOnlyRootFilesystem": true, + "runAsNonRoot": true + } + } + }, + "thanosquery": { + "containerSecurityContext": { + "securityContext": { + "allowPrivilegeEscalation": false, + "capabilities": { + "drop": [ + "ALL" + ] + }, + "readOnlyRootFilesystem": true, + "runAsNonRoot": true + } + } + }, + "thanosqueryfrontend": { + "containerSecurityContext": { + "securityContext": { + "allowPrivilegeEscalation": false, + "capabilities": { + "drop": [ + "ALL" + ] + }, + "readOnlyRootFilesystem": true, + "runAsNonRoot": true + } + } + }, + "thanosstore": { + "containerSecurityContext": { + "securityContext": { + "allowPrivilegeEscalation": false, + "capabilities": { + "drop": [ + "ALL" + ] + }, + "readOnlyRootFilesystem": true, + "runAsNonRoot": true + } + } + } + } + } + } + ] + capabilities: Basic Install + categories: Monitoring + containerImage: gcr.io/kubecost1/operator/controller:latest + createdAt: 2023-01-24T08:00:00Z + support: Kubecost + description: |- + The Kubecost Operator runs within a Openshift cluster and provides a means to deploy and manage Kubecost and components to monitor cloud costs. + operators.operatorframework.io/builder: operator-sdk-v1.24.0 + operators.operatorframework.io/project_layout: helm.sdk.operatorframework.io/v1 + name: kubecost.v1.99.0 + namespace: kubecost +spec: + apiservicedefinitions: {} + customresourcedefinitions: + owned: + - kind: CostAnalyzer + name: costanalyzers.charts.kubecost.com + version: v1alpha1 + description: |- + The Kubecost Operator runs within a Openshift cluster and provides a means to deploy and manage Kubecost and components to monitor cloud costs. + + ## Prerequisites + To start using the Kubecost Operator, you need to create a namespace for the deployment: + ``` + kubectl create namespace kubecost + ``` + Refer to the [Kubecost documentation](https://docs.kubecost.com/install-and-configure/install/provider-installations/openshift-operatorhub-kubecost-install) for more details. + displayName: Kubecost + icon: + - base64data: "iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACtWK6eAAAY7UlEQVR4Xu2dCXgb1bXHx5JLl8fWBRoKpYE4mpHlbLjY1mLHoS2v7JCSQgpksyXZTgiQ9oNCaZuWQh9tWSJbchwnLAH6Qdf3tfS1lAIpLZS+GBKyEQohIZstr4mzYJKS+865o5E1V2NLNjzapv/f993PysyZM3fm3jPnnHvvTDQNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAPxvhnsSiaHf8pfoDrS/VJmM/UPcD8G9JbUfjGeHu+IG6vUtFbXuMyhIR6YmLBYfvE+GeeECVB+DfAyEKantip4WTjYfJY4jajuwS6U2Iuv7moHooAP8WRDqbBixjiPYlBBlKR7iraVu0rzltJNeJlSLStvgj6rEAHNVEuhO/DHc3pY2DQqz7699MfLRBxI+NdjfdHCXvYRlJw8HW5+mQAlUHAEclDT3xT9cmG/ekw6lk466remLHpwUWL3bV72/534xw60hNZ/OUDBUAHL3MSy5ZxIk4d/76A8vob+MVqsw1L3/75BvEI2Yu0tUkot2Jh1QZAI5KqMMflIm5WfrV/RaRrvijlJNII7lBPCzU/QAcdUS6m8rnDyyXnZ6HducfWHq+KmNBMhWRbtPTcJ4S7Ytfp8rkRdmpH3dXGBe5g57zZaHfvE0V+0dDdTsvXUcqhQH9HK26ulCVA0cx0d74g5ZXqOmI7Z+XTJypyljM2tn0cZLdKfOQ9iWibl/LOlUmL6pKAq6pxcIV8pqFfvM2VewfjSuQqp9VAkaHVl40mJuBo5vFnHzvW7aBOztPCtLvTZG2yAdUuUwivYmX5QQiG0lX0/b6PYmPqjI5CXorXEHqcH7dLPSbt6li/2iobofTdeQSMLbCQP65+FCFMdYV8s13BY2oWYrrCkOez6tyo6I22frJ2mRjhzlyFRPhjtgqVUYl2t10K08YpkazBsijeFSZnMBAwHuEu8y40FVJ0UjQMAt5eneF/pgqNypqd9/jJcM4ZOUUkd74AlVGJZqMTcrMWa49tHzkw70wEPAe4S7zXiDD33Qb6cId0B9W5Yalbl/zyXX9zRdGuhpbGvYtezjc1bisfm/LBXN7YzOjexLkORrF/EMrxNw3Y8XqsU4sEj82E3XyJNGupoi6PycwEPAe8a4NJNwZuynSHe9mD8HJeLizUf6tp6f/JW9+U/g2XCku3HaLuFH8NO9h23CycUCGZKQn0pNoVffnBAYC3iPelYFEkvFzI6nlI+k8ozNlJOQ1Pr/lBuFZ/yUxbt2lItjRIL538NenqjqcIIN7QeqgEumKP63uz8nRZCBB/Tit2jeG/n5KC4w7mQ+z7R8Zbq2y6CSteuJpWlXJp7Xykk9q1dq7G1b2n/ZhWb+Q73StnPRyHWfMcKtiI6J68oladRHVUT9D6uU6j5Zq37GD9SOdpq6872FhuXGu3UAM4fbrK1U5RxrkrLhpHHL5ekfjgbo9S38c6Wpas0g8IoKv1UsD0ddfLiZsnCkaepYdqe9LfEfVo1K/r/kRNg5K8FnndnV/TkZoIAUB/b8p8fqfjPIbt994obBMP0cKUOcs8Ou/TO/3679z+Y2c+ZQr4L2RZa3jCir0n8lOae0fzkCqiqdQHZ6jxPAN2pekJ1cXnbOdEsaNrgrPSL1qAel4TB7r19tJTy+dq5f+dlDjb3L5PZx05rv2zZTzGwF30HiS7u1rqfr1kb4eqZ91hoxlWmnpiBad0v2qd1cV/4V0bSc9rKvf1Es6q4rX0+/8rzvkC3Eb0v3bQsd3pvSwzt1Uv410/Xeph2jVY0+k/Y8M9gPPb+jvX9lr2NrJr+90+z2P2/uD93qbrkhf80JrtIlDIQqxbrMJEF/cduOrEzZ9RRStu0yUvjJH1CUTon5fC3ua36qymYQ7YkutuZNwMvaOuj8nIzAQuolP8lPBdgPkv42700Ll3vF0kwaU/S0ZahyhxnnEpjug75NPRWu/aiBkDNSpPuAOGGHbU0strLOS53a8VZnnc6CA9DS4qktkaJClZ7BewlXtE+5Q8Vw+RlVig57CVL8/ypEdVY+qk2So89RoOZ7YhUF9Gl37YTlKpOqx6aT9fC1mZ3SuZ/XYD5Fcy7D3z9JF/aLQb/xn+lh6eLnY2FXZXMXUtTyjFuQ9DrY+Z3mPSGfTzjlb7znRJkBEO5tWz+24V5z7xlfF2ZtryEDMWfJU6PSiKm9B+m63ZtQb9i/LO3dJk6eBuIL6D7KMI0T/rtDt68DYQPz6wcEbwn+NpTYZB6jBH1Y65l6t2hib3q8aCHkJ6nzLbHUfrlCH0gLFV2ec0gY95Z7Nur7higwfjF+oetL4i6aQ3KFhjU0tVMeCSt+vtSGMxBXS7x2RPi58TQHvGlUXUVAQ8v4+p6Gpuvyeb8mjpYGQV1VlchWuf8Br924L3l7xkjkBuETMH2h1qiwl8E1r2BiiZBhX7r6jI9rb3CNDp8F8pU09hgknm75lLW689p37/18MhN25q8qXdaEcSmXKSd4vA5G6U4072LG7UyVz22ChJ6oW8kzKOK2pO6A/lCWf1i3DjT1mw6oPCC+XW1V9WumZJ2TdL1OXOT/AhsPX49Q5eVtA/4aq0h30np91fque5nbTazvppOIO6n+2KQzqn3UwNq7Tene1bzWFaS+62ENk69uvBbyf0c72jXFx6Ml9J12yZM268X2yZOTv4vttdZk/sHwNG0cNlQWHVjh6g0hn/CUr2Y72Lf157Z7WM+r3LeuvaY8dMT0Jh1GNMfW4cFfsO5YHId3vvYGEjOqshpFPT/2pDC2DvJ8GYjWAX7+XGq1E83tOlSVY7KPtdzk2WNB4lUOL9InN+r5jk6n0ioIKz8+1cn2iTFi5+IunFHAeoYYjAaonn9OCwj66h2sczmt6nCpjglYx3kvhV7FWWVxGuQnH/nZZOgefL62TcAzTppIRUu6mVVI9g7rO9SV90+naj2TJ0n3K1En/Xqy062Fqd177N+i9Sj2foLr8l61+5kPBDJGm+SZp1SWflaXSexbVpUFGFelz6txPfkuJ/+S0HJeM0Fly7eH72tg4eFlIdE/i1TlbFw82UIpwV/xZy0DCXY3P8ra57bHiuj2J9Gu314kH6e+SSzKPq0nG7rJGxzjPydyXF8MZCN1Q11SOYzNvNF+08ZyiZZD300Dk01NfmKHGToUx28m4+elpibg4TMuUMUOAbK+Qgvbbwxzu+AFjTlog4JucVU/pFYyvpiSy8gEyvF9l11NPr62j4xsdnvb9WuWUIUesSN8rWfUIGBvS+2XOZ9u/gxPvTB0Sv+9jLjNx30ntuE4LGrNTe7KuY9TDvPTkTy9NDycbe2t7Wk9TZer2Ln1MDvuao1GbrO30+xwyrHdkqNUuPUl/Q2d8jLU/0tP0gNTNxyVjfdb2vHEykNCEUnoinEI31KlTOnrANO+XgXCnC+YeHZNJfOYT0AxJbrf2Uyhhv76g9zXN5zsmU4cNDp+oM9mOqdB7rN3UQb5n6+xmPW/JVOGE2rFc8vp9Y7guVKdXbeejOpO3mKbqsDGl6CSqhz1HII+jlRlypTbVOa7c7yPuqnTnt8MeL3XccIzaQKI98cvNoV32IM2irq+5WpWJdCUSdd0JEe1MiEiy6VDmvnB3PF63x3wXnfMNMoj0SaO9iccHPU/T8J3XCdVAqHELAsbPqFO/bbu58smqpw13SN4vA/HrByifGHK1c5oy/QyS3Zd5LD2xzXzOX1zkqrTnCmRQf7GFDmr5XMlECnc22OoybULacxf4DR4eztR5MJ96Use60xXw8FDyy5Tb/ZRCpa/IeRMK31xWXpUuRod6vBMyJMw8jr1dSOfRN02bOsHvFNpRG/xdjjr6vZdqgfGT5ZxSnozaQBj+wII1KnVtb+sq3hbuS1xMHuPu2t2Nf7wk+c2dkzZdLSZvmiXO3lYjvtq38rZwR+PF1vGUZ6y3knaeU6Fjp/J2ylG2s9dh7xPtaRr5wjDVQFIXZm8QWd4Y9slq8b4ZiMNEoRNB/TiWtR1b4ZHD4e5g8Zezr92wL6t3Kvb7Iodoj/FTbqEpnsDUl189WcZpko9yC5eVgFv1C3iyclEn3KHiedne03un3MmeKWDsou0O+YqeCgvlv7vpmtbT33sU9Vm8KwOJdjUum9t5r5ix4zYxcfPVol4sF/X9LUIm2NTBL9/+XTF+3XQ5UTh27UWiprtR1NH+68VDHHL9Nbp36cx5ySXsXfhdkSP1+1o2s94Ff7/f9CxSz5LFymlz42Qgaqny5Z/bjNpAvA+NyECCxmatqOiDGSqckSGKEo9TI/Iu99SSa7KeoqMpoWJReLbnc6zTnHvI2EfnzuvBMhSUzLsyr10m28bXVDEnsjuszJdsc1J0z1+3hYRDFZaha3OHjJmaQ/7BZJ9vBAZyZfv3b5r8t1lpIzjrldm8pN0cxqVy9a4fpGfSebJw+vbFcgmK5XUoLBNnb5535PytN0kjIaM6En7zbp/lmer6l4qGwytC6nlzko+B0IUWhLyrtBla7mURozQQGdaNzEDso1FDwZNhJGs71jKQkHdWloFwR+ARo5EU6ji8zIJ1ypElez03a+flYchD4WAgrorcOQ3jLtcvVz2I2280KmIFWqi4nAynTQ5Nq/dDLdKzeG9UdEhGZSDVYnFhOBn7U8P+FjGFwic2AC5sDORNjtC+fsoddszpumcLGc3hiRuvEiUbZ4rPbbn+SP2epXLm3TKimTvvEGNfvkhUvbZA1HbGRE3nkk2RLnOIl73QvGQsa4w/J04GEip+hS6uP+vGhPS4engWozYQ3d6JcxlIQN+tVXs+kaHCGR6qDOgcSgweW6Hv513uwPgL1GunDvS8Vm6UamVF/iFLeVGFfZun0gqjSLd9yJjOnU+Cy4MiFE5N47xIromyCBSNIz37M/RxB83rIx1kEItUA3EFi4c2rtJPfYQ6+Hxqi2epD6zhe+zoXTJyrkxGZSCUVG8Nd5kLEq/adac4fe0F4oyXLxbVr18rwgMJMbc9dlLN3uUfq9lx98ciffHX5rXfK2bvukvUHoivXyQe9FDnf5gnANmL1CebZY7CXqhsc40o+1utWNCVXuPVGTnQcop6/pyoBiKHeSkZrTCqsxqbbnZBqPinqgobVTIpHjQu9j4B7+OqmErWkzengXCo4TG0Idx9igKWURuZktcn5F4Ov9SQKOTN/eryMAsMyRM+rVxHPvXkHOyHZucyDtDvN9yVxS+wcfCCRpdcE5ahs9L0gLkgHX9Wrk0UBr1fsAn5fMfSdjMvUeGcKGD4qU48SDCYq3CyX5m9KmHEBkLG8bi5iFAO7/Is+YGL2m/dUN/VbIZJ7Zw7NKUbpGGg9VnLW/CXFOdsHRzOretLtJK3GJi+/dvSQLicsvocMav9rtQruks3zvjJ0A03JI4GYs6D0I35utq55BMp6LlZVZMmMJEa1LA3KA9LDgOd4z4lvOIyvIH4eXbY+6cMNY5Q6PBUVv0riq+19rv8nrcUvYd5cWGmDhUXj1QF9B2F1HnUD0fIVQfKPaNO4jypajFx4n9kPSACetJarOmu9LXZ93GYY/xIVWOjQg+SrH0kkod5GR7CDxpNLk7++QFBndrt1+cpGtIUBj2Vto4v+4D3BlUu20AMfqPQ2dvN2bFkvHxXgzt7+xIR7W/pq+lrnrJ440+OqT/Q0j44Q97ISfcyPqauJx6WnxntMF+Amv/2A75MnQ3742Ou3vXDg96NV4iily8Vxz49QVyw9eu8VkvU7RnFuyDMMAbCuCuMsNrgZhw6dLiVNQxKheL9F1Q5hsK2haTL7qnMktNATI/m/UOGOhuOa40C+oBW5R1vyVDnu1INs+jf/VqF57xMXRZ0/BKbMQe9a7TA+MGFkCHPma7MkGiwnk9mqBnEf9qH6f5uU6+NPNHvLRHqZFfZOp55He9QcX7yV3iuoHrZhrbNNkwtKi0zPFmek0NBCrEUTRJ30FNru4/sQSqy50yyDMQvZ9KdHw7RfUun1+015y7kB+B2x6Zb+2p7EhWZ39id//YKEe0xl7anh4P5hapkozScNEIUXLjjG6dO2HTV26e3nSuOfWaCKFt3jVh4+H4xb+co8g8mh4EwdPMeze5oMuHjEY1sgp7Z6o2Snco8z1JeYUr67uBcwLY0wV5yG4hV+FwheqL6PZdplcWX0FP83qzzp0pBpfeZjJrKMMLFM8V2uSNcV/I+qzSeJQ96zqP6LnDxBGHWfaAQKlhke5DRsY9lyXHhOZeg8aBckuH3zqeHw8oszyHlqA2UzkrbOS9Uzi09CSftd1Gb1dD+W8mwXnS89oB+UL7jMajPnpeZurpk2wdKxsnlM2Ts7gB1+qAxmFNyYU/EczQKhRyWV2ad+wjV6QkehJElaPyCZOr5iyMJc4Zbfv1wQFVG26fzVxEtI5G/k40PRPY0f8/aPtTiwwk7Z609/umJ4oRVk4T+0sWiYW/rFlUmb/IwEIa2N2c1umwc3XlEI2A8l9Wggw2ReqKZ2ygp5Hck+L2GTNncBmI2hhkbsz7p+u26bYVHr5xGvvgeTFOeqFYZTid3xKD+XVUdw+Gf4zGZ1z/E/aGQzLacSMKha9DYS/fbYd5imDpy4aTaXyyHodP4PWUupzkQ2caUB5nvg+zLanPzfjTZdGXgeB/lwIJV+Hjvcv4AtWkgsvM3HlYVMZG+xD3WSlwpR79rOmN9s9p/JFf1ysm/7mZbKON/fsaHx7xU/drxz0wSx5OBlGy4XCzsW3FZpsyIyNNAeKiyIOhtc2pUd3Y4UiBHj/z61qwbnF0OaaEJH3VVZuUhe7WKoQ2EQrY2eVyIQgmHOtmK3G/s1/zjijLqaCegn0My+S9PNzv4faqaFAVsiDw0nsf1p/TJv3T+wWUwWZAHoPbpGNIQ1GLKva1VFKvtI6HrvdnF7+7kq49DK16FMMzEpyvguX1YfdJIvK1afX/Lpdbykvr9y0TNrru/oipjyEhmZ36tnQvPkUx7faGo72wWdd2JAbn2SpijIGdtmnXZiX+aQt5jMuUgJWLqtobdN/X+5ARVb96EfCEZj/KaJC5ySbjPeT5FvmBD4Yglmy4+Crc8s1Rx2YGpweWH6awnnFV4/oAT0dRKWOpMP7fpDPL7G0XjLFXyaW07p/cNuYOXYgSMnc5hhXkefpsvryUTId/pFDP/Sup3amRuXFlvo4NXr6qHZ1GtFRaG9C+6ePkG189RpyHvOXnRtXL1cC5KSz9Cx10v6yF1KvosnVO5TfSVWujM01UVNvweo8Cv/8F8Ucyhfhn6qE2+xgMKqgobMzQ3yd0i5dX5IquEvCu1SDI2jkKmt2Sn5y8f7m3eW9fdXKbqY8K7lywib7PfWkpy5Y475LvpXKa9fp2Yseu2w8GesM9Yd1n4pM0BccIzk6WBHP/CZBHpbZ2v6hsRHOvyYrTP6ros/HuIZE2zhip5qbYlz4WSvmNyNC510tkUHlCCaywjb3FLYYVu/ec/qddSyVBKPUZaZzkl0qWlgx/Oyzwfl9KStPEw5MWuoIZ+wj3V10ZlNRc+1wcCvskpkWGHWVOYMhPHnUwd7xscJrqnlkhd7irvauosK+UnT0cDe6iA537qIC9a9ZNL3Sv027RS78iH5zUOY/XLybB+lr7m6pLVBeWeP7p45fBYh1ByOIqKPkjXfCPllasy7mEb3dOnSF961G9ElOln8Giabc6IR/7KzzQHSSi0+qXV6VOrdN+KdMYfVdRIajrjRZGu+E75TayOJnHhtpvNWfcNM8T49V8Sp6ydJk58/qy0cZzw/BQxYeOX81qTA8A/LZRXbOGJQit84rxkoXiAk/LWSH9LiD0N/f1EZHeLfGpTkv59MqqBq3fdKaZsukaM+UulHM6VRiHLJGkon1wbfEp7Bh9vBv/iLH5mcWGkO/5kw8FWW57BhpLKUTi02hXpTbwe7W3eHO2JbyZvc2Dmzu+L8ldrxafaviCOI6M45snxouB3Y8Wn154jpm2Z31Ta1jLsd3sB+JeCJwHDydhufh/ECruyivUh6lThkSxeSiJHw/ri4oa3Htpx055H61XdABwV8NfXw92Jz/OHqReJR+VnfeQLUJyf8Dvru80PO7AB8Xbef714mP+9av7BFf55m+88TtUJwFFLuDdxXrS36Q7yLE9QCNZ2nVi5uuHg8tW1u2O/i3Qnbo92xr+oHgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkOL/AFBgcGoNsCWlAAAAAElFTkSuQmCC" + mediatype: "image/png" + install: + spec: + clusterPermissions: + - rules: + - apiGroups: + - security.openshift.io + resourceNames: + - privileged + resources: + - securitycontextconstraints + verbs: + - use + - apiGroups: + - "" + resources: + - namespaces + verbs: + - get + - apiGroups: + - "" + resources: + - secrets + verbs: + - '*' + - apiGroups: + - "" + resources: + - events + verbs: + - create + - apiGroups: + - charts.kubecost.com + resources: + - costanalyzers + - costanalyzers/status + - costanalyzers/finalizers + verbs: + - create + - delete + - get + - list + - patch + - update + - watch + - apiGroups: + - policy + resources: + - podsecuritypolicies + verbs: + - '*' + - apiGroups: + - rbac.authorization.k8s.io + resources: + - clusterrolebindings + - clusterroles + verbs: + - '*' + - apiGroups: + - apps + resources: + - daemonsets + - deployments + verbs: + - '*' + - apiGroups: + - "" + resources: + - configmaps + - persistentvolumeclaims + - secrets + - serviceaccounts + - services + verbs: + - '*' + - apiGroups: + - rbac.authorization.k8s.io + resources: + - rolebindings + - roles + verbs: + - '*' + - apiGroups: + - authentication.k8s.io + resources: + - tokenreviews + verbs: + - create + - apiGroups: + - authorization.k8s.io + resources: + - subjectaccessreviews + verbs: + - create + serviceAccountName: kubecost-controller-manager + deployments: + - label: + control-plane: controller-manager + name: kubecost-controller-manager + spec: + replicas: 1 + selector: + matchLabels: + control-plane: controller-manager + strategy: {} + template: + metadata: + annotations: + kubectl.kubernetes.io/default-container: manager + labels: + control-plane: controller-manager + spec: + containers: + - args: + - --secure-listen-address=0.0.0.0:8443 + - --upstream=http://127.0.0.1:8080/ + - --logtostderr=true + - --v=0 + image: gcr.io/kubebuilder/kube-rbac-proxy:v0.13.0 + name: kube-rbac-proxy + ports: + - containerPort: 8443 + name: https + protocol: TCP + resources: + limits: + cpu: 500m + memory: 128Mi + requests: + cpu: 5m + memory: 64Mi + securityContext: + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL + - args: + - --health-probe-bind-address=:8081 + - --metrics-bind-address=127.0.0.1:8080 + - --leader-elect + - --leader-election-id=kubecost + image: gcr.io/kubecost1/operator/controller:latest + livenessProbe: + httpGet: + path: /healthz + port: 8081 + initialDelaySeconds: 15 + periodSeconds: 20 + name: manager + readinessProbe: + httpGet: + path: /readyz + port: 8081 + initialDelaySeconds: 5 + periodSeconds: 10 + resources: + limits: + cpu: 500m + memory: 512Mi + requests: + cpu: 10m + memory: 64Mi + securityContext: + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL + securityContext: + runAsNonRoot: true + serviceAccountName: kubecost-controller-manager + terminationGracePeriodSeconds: 10 + permissions: + - rules: + - apiGroups: + - "" + resources: + - configmaps + verbs: + - get + - list + - watch + - create + - update + - patch + - delete + - apiGroups: + - coordination.k8s.io + resources: + - leases + verbs: + - get + - list + - watch + - create + - update + - patch + - delete + - apiGroups: + - "" + resources: + - events + verbs: + - create + - patch + serviceAccountName: kubecost-controller-manager + strategy: deployment + installModes: + - supported: false + type: OwnNamespace + - supported: false + type: SingleNamespace + - supported: false + type: MultiNamespace + - supported: true + type: AllNamespaces + keywords: + - cost + - cost saving + - recommendation + - kubecost + - cost management + - openshift + links: + - name: Kubecost + url: https://kubecost.domain + maturity: alpha + provider: + name: Kubecost + url: kubecost.com + maintainers: + - name: Kubecost + email: linh@kubecost.com + version: 1.99.0 diff --git a/operators/kubecost/1.99.0/metadata/annotations.yaml b/operators/kubecost/1.99.0/metadata/annotations.yaml new file mode 100644 index 00000000000..ccb54454990 --- /dev/null +++ b/operators/kubecost/1.99.0/metadata/annotations.yaml @@ -0,0 +1,17 @@ +annotations: + # Core bundle annotations. + operators.operatorframework.io.bundle.mediatype.v1: registry+v1 + operators.operatorframework.io.bundle.manifests.v1: manifests/ + operators.operatorframework.io.bundle.metadata.v1: metadata/ + operators.operatorframework.io.bundle.package.v1: kubecost + operators.operatorframework.io.bundle.channels.v1: alpha + operators.operatorframework.io.metrics.builder: operator-sdk-v1.24.0 + operators.operatorframework.io.metrics.mediatype.v1: metrics+v1 + operators.operatorframework.io.metrics.project_layout: helm.sdk.operatorframework.io/v1 + + # Annotations for testing. + operators.operatorframework.io.test.mediatype.v1: scorecard+v1 + operators.operatorframework.io.test.config.v1: tests/scorecard/ + + # Annotations to specify OCP versions compatibility. + com.redhat.openshift.versions: v4.9 \ No newline at end of file diff --git a/operators/kubecost/1.99.0/tests/scorecard/config.yaml b/operators/kubecost/1.99.0/tests/scorecard/config.yaml new file mode 100644 index 00000000000..3c01e456ba6 --- /dev/null +++ b/operators/kubecost/1.99.0/tests/scorecard/config.yaml @@ -0,0 +1,70 @@ +apiVersion: scorecard.operatorframework.io/v1alpha3 +kind: Configuration +metadata: + name: config +stages: +- parallel: true + tests: + - entrypoint: + - scorecard-test + - basic-check-spec + image: quay.io/operator-framework/scorecard-test:v1.24.0 + labels: + suite: basic + test: basic-check-spec-test + storage: + spec: + mountPath: {} + - entrypoint: + - scorecard-test + - olm-bundle-validation + image: quay.io/operator-framework/scorecard-test:v1.24.0 + labels: + suite: olm + test: olm-bundle-validation-test + storage: + spec: + mountPath: {} + - entrypoint: + - scorecard-test + - olm-crds-have-validation + image: quay.io/operator-framework/scorecard-test:v1.24.0 + labels: + suite: olm + test: olm-crds-have-validation-test + storage: + spec: + mountPath: {} + - entrypoint: + - scorecard-test + - olm-crds-have-resources + image: quay.io/operator-framework/scorecard-test:v1.24.0 + labels: + suite: olm + test: olm-crds-have-resources-test + storage: + spec: + mountPath: {} + - entrypoint: + - scorecard-test + - olm-spec-descriptors + image: quay.io/operator-framework/scorecard-test:v1.24.0 + labels: + suite: olm + test: olm-spec-descriptors-test + storage: + spec: + mountPath: {} + - entrypoint: + - scorecard-test + - olm-status-descriptors + image: quay.io/operator-framework/scorecard-test:v1.24.0 + labels: + suite: olm + test: olm-status-descriptors-test + storage: + spec: + mountPath: {} +storage: + spec: + mountPath: {} From 47e4a50616cdf4eee624c0da383a36bbd917888a Mon Sep 17 00:00:00 2001 From: chipzoller Date: Sun, 25 Feb 2024 10:17:37 -0500 Subject: [PATCH 4/6] fix bundle package Signed-off-by: chipzoller --- operators/kubecost/1.106.0/bundle.Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/operators/kubecost/1.106.0/bundle.Dockerfile b/operators/kubecost/1.106.0/bundle.Dockerfile index 92cdfbccfd9..010b5368960 100644 --- a/operators/kubecost/1.106.0/bundle.Dockerfile +++ b/operators/kubecost/1.106.0/bundle.Dockerfile @@ -4,7 +4,7 @@ FROM scratch LABEL operators.operatorframework.io.bundle.mediatype.v1=registry+v1 LABEL operators.operatorframework.io.bundle.manifests.v1=manifests/ LABEL operators.operatorframework.io.bundle.metadata.v1=metadata/ -LABEL operators.operatorframework.io.bundle.package.v1=kubecost-operator +LABEL operators.operatorframework.io.bundle.package.v1=kubecost LABEL operators.operatorframework.io.bundle.channels.v1=alpha LABEL operators.operatorframework.io.metrics.builder=operator-sdk-v1.31.0 LABEL operators.operatorframework.io.metrics.mediatype.v1=metrics+v1 From fbb3e19c208efcda587866b6a816d3f8f8cd3687 Mon Sep 17 00:00:00 2001 From: chipzoller Date: Sun, 25 Feb 2024 10:20:59 -0500 Subject: [PATCH 5/6] Revert "fix bundle package" This reverts commit 47e4a50616cdf4eee624c0da383a36bbd917888a. --- operators/kubecost/1.106.0/bundle.Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/operators/kubecost/1.106.0/bundle.Dockerfile b/operators/kubecost/1.106.0/bundle.Dockerfile index 010b5368960..92cdfbccfd9 100644 --- a/operators/kubecost/1.106.0/bundle.Dockerfile +++ b/operators/kubecost/1.106.0/bundle.Dockerfile @@ -4,7 +4,7 @@ FROM scratch LABEL operators.operatorframework.io.bundle.mediatype.v1=registry+v1 LABEL operators.operatorframework.io.bundle.manifests.v1=manifests/ LABEL operators.operatorframework.io.bundle.metadata.v1=metadata/ -LABEL operators.operatorframework.io.bundle.package.v1=kubecost +LABEL operators.operatorframework.io.bundle.package.v1=kubecost-operator LABEL operators.operatorframework.io.bundle.channels.v1=alpha LABEL operators.operatorframework.io.metrics.builder=operator-sdk-v1.31.0 LABEL operators.operatorframework.io.metrics.mediatype.v1=metrics+v1 From d0addb3a07d7c3d306d170d8a48a17f820b8fd3a Mon Sep 17 00:00:00 2001 From: chipzoller Date: Mon, 18 Mar 2024 07:12:11 -0400 Subject: [PATCH 6/6] change CSV name Signed-off-by: chipzoller --- .../manifests/kubecost-operator.clusterserviceversion.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/operators/kubecost/2.1.0/manifests/kubecost-operator.clusterserviceversion.yaml b/operators/kubecost/2.1.0/manifests/kubecost-operator.clusterserviceversion.yaml index 3f00fd618d4..0185f15bf9e 100644 --- a/operators/kubecost/2.1.0/manifests/kubecost-operator.clusterserviceversion.yaml +++ b/operators/kubecost/2.1.0/manifests/kubecost-operator.clusterserviceversion.yaml @@ -1450,7 +1450,7 @@ metadata: operators.operatorframework.io/project_layout: helm.sdk.operatorframework.io/v1 description: |- An operator that deploys Kubecost 2.1.0 via the Helm chart. - name: kubecost-operator.v2.1.0 + name: kubecost.v2.1.0 namespace: placeholder spec: apiservicedefinitions: {}