We want to receive notifications when a Kubernetes cluster upgrades. For this we can configure PubSub subscriptions:
const exec = require("child_process").execSync;
const mapping = {
"my-dev-project": [{ name: "clusterA", region: "europe-west4" }, { name: "clusterB", region: "us-east1" }],
"my-prod-project": [{ name: "clusterC", region: "europe-west4" }, { name: "clusterD", region: "us-east1" }],
};
for (const PROJECT in mapping) {
exec(`gcloud pubsub topics create k8s-upgrades --project=${PROJECT}`)
for (const { name: CLUSTERNAME, region: REGION } of mapping[project]) {
exec(`gcloud container clusters update ${CLUSTERNAME} --notification-config=pubsub=ENABLED,pubsub-topic=projects/${PROJECT}/topics/k8s-upgrades --region=${REGION}`);
}
}
And a Cloud Function to notify us on Slack:
printf "https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX" | gcloud secrets create K8S_UPGRADES_SLACK_WEBHOOK_URL --data-file=-
gcloud functions deploy k8s-upgrades \
--runtime=nodejs16 \
--entryPoint=notify \
--set-secrets 'SLACK_WEBHOOK_URL=K8S_UPGRADES_SLACK_WEBHOOK_URL:1' \
--trigger-topic=k8s-upgrades