Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Remove GKE workload metrics #9712

Merged
merged 6 commits into from
Aug 22, 2022
Merged
Show file tree
Hide file tree
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 1 addition & 6 deletions packages/celotool/src/cmds/deploy/destroy/prometheus.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,7 @@ import { DestroyArgv } from 'src/cmds/deploy/destroy'
import { switchToClusterFromEnvOrContext } from 'src/lib/cluster'
import { addContextMiddleware, ContextArgv } from 'src/lib/context-utils'
import { exitIfCelotoolHelmDryRun } from 'src/lib/helm_deploy'
import {
removeGKEWorkloadMetrics,
removeGrafanaHelmRelease,
removePrometheus,
} from 'src/lib/prometheus'
import { removeGrafanaHelmRelease, removePrometheus } from 'src/lib/prometheus'

export const command = 'prometheus'

Expand All @@ -23,6 +19,5 @@ export const handler = async (argv: PrometheusDestroyArgv) => {
await switchToClusterFromEnvOrContext(argv, true)

await removeGrafanaHelmRelease()
await removeGKEWorkloadMetrics()
await removePrometheus()
}
16 changes: 1 addition & 15 deletions packages/celotool/src/cmds/deploy/initial/prometheus.ts
Original file line number Diff line number Diff line change
@@ -1,31 +1,20 @@
import { InitialArgv } from 'src/cmds/deploy/initial'
import { switchToClusterFromEnvOrContext } from 'src/lib/cluster'
import { addContextMiddleware, ContextArgv } from 'src/lib/context-utils'
import {
installGKEWorkloadMetricsIfNotExists,
installGrafanaIfNotExists,
installPrometheusIfNotExists,
} from 'src/lib/prometheus'
import { installGrafanaIfNotExists, installPrometheusIfNotExists } from 'src/lib/prometheus'

export const command = 'prometheus'

export const describe = 'deploy prometheus to a kubernetes cluster using Helm'

export type PrometheusInitialArgv = InitialArgv &
ContextArgv & {
deployGKEWorkloadMetrics: boolean
deployGrafana: boolean
skipClusterSetup: boolean
}

export const builder = (argv: PrometheusInitialArgv) => {
return addContextMiddleware(argv)
.option('deployGKEWorkloadMetrics', {
type: 'boolean',
description:
'Include GKE Workload Metrics, see https://cloud.google.com/stackdriver/docs/solutions/gke/managing-metrics#workload-metrics',
default: false,
})
.option('deploy-grafana', {
type: 'boolean',
description: 'Include the deployment of grafana helm chart',
Expand All @@ -42,9 +31,6 @@ export const handler = async (argv: PrometheusInitialArgv) => {
const clusterConfig = await switchToClusterFromEnvOrContext(argv, argv.skipClusterSetup)

await installPrometheusIfNotExists(argv.context, clusterConfig)
if (argv.deployGKEWorkloadMetrics) {
await installGKEWorkloadMetricsIfNotExists(clusterConfig)
}
if (argv.deployGrafana) {
await installGrafanaIfNotExists(argv.context, clusterConfig)
}
Expand Down
23 changes: 6 additions & 17 deletions packages/celotool/src/cmds/deploy/upgrade/prometheus.ts
Original file line number Diff line number Diff line change
@@ -1,41 +1,30 @@
import { UpgradeArgv } from 'src/cmds/deploy/upgrade'
import { switchToClusterFromEnvOrContext } from 'src/lib/cluster'
import { addContextMiddleware, ContextArgv } from 'src/lib/context-utils'
import { upgradeGKEWorkloadMetrics, upgradeGrafana, upgradePrometheus } from 'src/lib/prometheus'
import { upgradeGrafana, upgradePrometheus } from 'src/lib/prometheus'

export const command = 'prometheus'

export const describe = 'upgrade prometheus to a kubernetes cluster using Helm'

export type PrometheusUpgradeArgv = UpgradeArgv &
ContextArgv & {
deployGKEWorkloadMetrics: boolean
deployGrafana: boolean
}

export const builder = (argv: PrometheusUpgradeArgv) => {
return addContextMiddleware(argv)
.option('deployGKEWorkloadMetrics', {
type: 'boolean',
description:
'Include GKE Workload Metrics, see https://cloud.google.com/stackdriver/docs/solutions/gke/managing-metrics#workload-metrics',
default: false,
})
.option('deploy-grafana', {
type: 'boolean',
description: 'Include the deployment of grafana helm chart',
default: false,
})
return addContextMiddleware(argv).option('deploy-grafana', {
type: 'boolean',
description: 'Include the deployment of grafana helm chart',
default: false,
})
}

export const handler = async (argv: PrometheusUpgradeArgv) => {
const clusterConfig = await switchToClusterFromEnvOrContext(argv, true)

await upgradePrometheus(argv.context, clusterConfig)

if (argv.deployGKEWorkloadMetrics) {
await upgradeGKEWorkloadMetrics(clusterConfig)
}
if (argv.deployGrafana) {
await upgradeGrafana(argv.context, clusterConfig)
}
Expand Down
107 changes: 0 additions & 107 deletions packages/celotool/src/lib/prometheus.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,11 @@ import {
} from './env-utils'
import {
installGenericHelmChart,
isCelotoolHelmDryRun,
removeGenericHelmChart,
setHelmArray,
upgradeGenericHelmChart,
} from './helm_deploy'
import { BaseClusterConfig, CloudProvider } from './k8s-cluster/base'
import { GCPClusterConfig } from './k8s-cluster/gcp'
import {
createServiceAccountIfNotExists,
getServiceAccountEmail,
Expand All @@ -37,9 +35,6 @@ const sidecarImageTag = '0.8.2'
// Prometheus container registry with latest tags: https://hub.docker.com/r/prom/prometheus/tags
const prometheusImageTag = 'v2.27.1'

const GKEWorkloadMetricsHelmChartPath = '../helm-charts/gke-workload-metrics'
const GKEWorkloadMetricsReleaseName = 'gke-workload-metrics'

const grafanaHelmChartPath = '../helm-charts/grafana'
const grafanaReleaseName = 'grafana'

Expand Down Expand Up @@ -400,105 +395,3 @@ async function grafanaHelmParameters(context?: string, clusterConfig?: BaseClust
const params = [`-f ${valuesFile}`]
return params
}

// See https://cloud.google.com/stackdriver/docs/solutions/gke/managing-metrics#enable-workload-metrics
async function enableGKESystemAndWorkloadMetrics(
clusterID: string,
zone: string,
gcloudProjectName: string
) {
const GKEWMEnabled = await outputIncludes(
`gcloud beta container clusters describe ${clusterID} --zone=${zone} --project=${gcloudProjectName} --format="value(monitoringConfig.componentConfig.enableComponents)"`,
'WORKLOADS',
`GKE cluster ${clusterID} in zone ${zone} and project ${gcloudProjectName} has GKE workload metrics enabled, skipping gcloud beta container clusters update`
)

if (!GKEWMEnabled) {
if (isCelotoolHelmDryRun()) {
console.info(
`Skipping enabling GKE workload metrics for cluster ${clusterID} in zone ${zone} and project ${gcloudProjectName} due to --helmdryrun`
)
} else {
await execCmdWithExitOnFailure(
`gcloud beta container clusters update ${clusterID} --zone=${zone} --project=${gcloudProjectName} --monitoring=SYSTEM,WORKLOAD`
)
}
}
}

async function GKEWorkloadMetricsHelmParameters(clusterConfig?: BaseClusterConfig) {
// Abandon if not using GCP, it's GKE specific.
if (clusterConfig && clusterConfig.cloudProvider !== CloudProvider.GCP) {
console.error('Cannot create gke-workload-metrics in a non GCP k8s cluster, skipping')
process.exit(1)
}

const clusterName = clusterConfig
? clusterConfig!.clusterName
: fetchEnv(envVar.KUBERNETES_CLUSTER_NAME)

const params = [`--set cluster=${clusterName}`]
return params
}

export async function installGKEWorkloadMetricsIfNotExists(clusterConfig?: BaseClusterConfig) {
const GKEWMExists = await outputIncludes(
`helm list -A`,
GKEWorkloadMetricsReleaseName,
`gke-workload-metrics exists, skipping install`
)
if (!GKEWMExists) {
console.info('Installing gke-workload-metrics')
await installGKEWorkloadMetrics(clusterConfig)
}
}

async function installGKEWorkloadMetrics(clusterConfig?: BaseClusterConfig) {
// Abandon if not using GCP, it's GKE specific.
if (clusterConfig && clusterConfig.cloudProvider !== CloudProvider.GCP) {
console.error('Cannot create gke-workload-metrics in a non GCP k8s cluster, skipping')
process.exit(1)
}

let k8sClusterName, k8sClusterZone, gcpProjectName
if (clusterConfig) {
const configGCP = clusterConfig as GCPClusterConfig
k8sClusterName = configGCP!.clusterName
k8sClusterZone = configGCP!.zone
gcpProjectName = configGCP!.projectName
} else {
k8sClusterName = fetchEnv(envVar.KUBERNETES_CLUSTER_NAME)
k8sClusterZone = fetchEnv(envVar.KUBERNETES_CLUSTER_ZONE)
gcpProjectName = fetchEnv(envVar.TESTNET_PROJECT_NAME)
}

await enableGKESystemAndWorkloadMetrics(k8sClusterName, k8sClusterZone, gcpProjectName)

await createNamespaceIfNotExists(kubeNamespace)
return installGenericHelmChart(
kubeNamespace,
GKEWorkloadMetricsReleaseName,
GKEWorkloadMetricsHelmChartPath,
await GKEWorkloadMetricsHelmParameters(clusterConfig)
)
}

export async function upgradeGKEWorkloadMetrics(clusterConfig?: BaseClusterConfig) {
const params = await GKEWorkloadMetricsHelmParameters(clusterConfig)

await createNamespaceIfNotExists(kubeNamespace)
return upgradeGenericHelmChart(
kubeNamespace,
GKEWorkloadMetricsReleaseName,
GKEWorkloadMetricsHelmChartPath,
params
)
}

export async function removeGKEWorkloadMetrics() {
const GKEWMExists = await outputIncludes(`helm list -A`, GKEWorkloadMetricsReleaseName)
if (GKEWMExists) {
console.info('Removing gke-workload-metrics')
await removeGenericHelmChart(GKEWorkloadMetricsReleaseName, kubeNamespace)
}
}
9 changes: 0 additions & 9 deletions packages/helm-charts/gke-workload-metrics/Chart.yaml

This file was deleted.

5 changes: 0 additions & 5 deletions packages/helm-charts/gke-workload-metrics/NOTES.txt

This file was deleted.

11 changes: 0 additions & 11 deletions packages/helm-charts/gke-workload-metrics/README.md

This file was deleted.

This file was deleted.

Loading