/kubegroup

kubegroup provides autodiscovery for groupcache peer pods in kubernetes cluster

Primary LanguageGoMIT LicenseMIT

license Go Report Card Go Reference

kubegroup

kubegroup provides peer autodiscovery for pods running groupcache within a kubernetes cluster.

Peer pods are automatically discovered by continuously watching for other pods with the same label app=<value> as in the current pod, in current pod's namespace.

Usage

Import the package github.com/udhos/kubegroup/kubegroup.

import "github.com/udhos/kubegroup/kubegroup"

Spawn a goroutine for kubegroup.UpdatePeers(pool, groupcachePort).

groupcachePort := ":5000"

// 1. get my groupcache URL
myURL, errURL = kubegroup.FindMyURL(groupcachePort)

// 2. spawn groupcache peering server
pool := groupcache.NewHTTPPoolOpts(myURL, &groupcache.HTTPPoolOptions{})
server := &http.Server{Addr: groupcachePort, Handler: pool}
go func() {
    log.Printf("groupcache server: listening on %s", groupcachePort)
    err := server.ListenAndServe()
    log.Printf("groupcache server: exited: %v", err)
}()

// 3. spawn peering autodiscovery
options := kubegroup.Options{
    Pool:           pool,
    GroupCachePort: app.groupCachePort,
    //PodLabelKey:    "app",         // default is "app"
    //PodLabelValue:  "my-app-name", // default is current PODs label value for label key
}

go kubegroup.UpdatePeers(options)

// 4. create groupcache groups, etc: groupOne := groupcache.NewGroup()

Example

See ./examples/kubegroup-example