GKEアップグレード通知をメールで受信する


概要

GKEのアップグレード通知をPub/Subで公開する機能がベータ版で用意されているため、
その機能を使用して、GKEアップグレード通知をメールで受信する方法を記述する。

下記のサービスを使用する。
・GKE
・Cloud Pub/Sub
・Cloud Functions
・Stackdriver Logging
・Stackdriver Monitoring

設定手順

Pub/Subのトピックを作成する

gcloud pubsub topics create gke-upgrade-notification

GKEのアップグレード通知を有効にする

gcloud beta container clusters update <クラスタ名> --notification-config=pubsub=ENABLED,pubsub-topic=projects/<PROJECT_ID>/topics/gke-upgrade-notification

Cloud Functionsの関数を作成する

トリガーを Cloud Pub/Sub にし、作成したトピック [gke-upgrade-notification] を指定する。

functions.go
package p

import (
    "context"
    "fmt"
    "log"
)

// PubSubMessage is the payload of a Pub/Sub event. Please refer to the docs for
// additional information regarding Pub/Sub events.
type PubSubMessage struct {
    Data       []byte           `json:"data"`
    Attributes PubSubAttributes `json:"attributes"`
}

type PubSubAttributes struct {
    Payload string `json:"payload"`
}

func OutputLog(ctx context.Context, m PubSubMessage) error {

    // output log
    log.Print(fmt.Sprintf("GKE Upgrade start. Data: %s", string(m.Data)))
    log.Print(fmt.Sprintf("GKE Upgrade start. Payload: %s", m.Attributes.Payload))

    return nil
}

StackdriverLoggingのログベース指標 [info-gke-upgrade] を作成する

resource.type="cloud_function" 
AND resource.labels.function_name:"OutputGKEUpgradeLog" 
AND textPayload:"GKE Upgrade start."

StackdriverMonitoringのアラートを作成する

ログベース指標 [info-gke-upgrade]に基づいてアラートを作成する。
任意のメールアドレスをアラート通知先に設定する。


動作検証

クラスタのノードプールをアップグレードする。

gcloud container clusters upgrade cluster --cluster-version <VERSION> --node-pool <NODE_POOL>

アラートで設定したメールアドレスに通知が届く。

ソースコード

本記事の検証用ソースコードはこちら