kube

package module
v0.0.0-...-a746158 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 5, 2019 License: MIT Imports: 9 Imported by: 0

README

kube

kube is a kubernetes deployment framework currently under development. There is no guarantee about API stability.

kube.Coder

package kube defines an interface called Coder, which is currently implemented by following providers:

  • Persistent volume provider (pv)
  • Persistent volume claim provider (pvc)
  • Daemon set provider (ds)
  • Pods provider (pod)
  • Services provider (svc)
  • Job provider (job)
  • Namespace (ns)
  • Sleeper (sleep) // a no op implementation

In other words, a kube.Coder instance can be obtained for kubernetes functions listed above.

Daisy-Chain

The fact that various providers can speak the same language of kube.Coder interface, allows us to daisy-chain their execution using context.Context. While explicit dependency management may not be required, passing context between kube.Coder instances allows for executing interesting patters such as:

  • Wait for an action completion
  • Boot up or shutdown on events

Examples

Pl. see this example for more details

Helper Functions

several package level functions are defined to help work with coder objects

async creation

several coders can deploy their create functions in async manner. Returned context is done when each of the input coders finish their contexts

outCtx, err := Create(inCtx, Async, coders...)
fan in

several context objects can be grouped together to create a new context

outCtx := FanIn(inContexts...)

kubernetes version

this pkg works with go mod. the dependencies have been updated for kubernetes version kubernetes-1.11.6. to apply a new version use following commands:

go get k8s.io/apimachinery@kubernetes-1.11.6
go get k8s.io/client-go@kubernetes-1.11.6
go get k8s.io/api@kubernetes-1.11.6
go get k8s.io/klog@kubernetes-1.11.6
go mod tidy

Documentation

Overview

kube defines interface for k8s object deployment API. The intent is to keep this interface as small as possible. This is work in progress and API may change.

Index

Constants

View Source
const (
	DefaultNamespace = "default"
	NamedNamespace   = "kube"
)

Variables

This section is empty.

Functions

func Cleanup

func Cleanup(coders ...Coder) context.Context

Cleanup sends delete commands to all coders

func Create

func Create(ctx context.Context, syncType SyncType, coders ...Coder) (context.Context, error)

Create creates coders sequentially or in an async way

func Delete

func Delete(ctx context.Context, syncType SyncType, coders ...Coder) (context.Context, error)

Delete shuts down a list of coders either sync or async way based on order provided

func FanIn

func FanIn(ctxs ...context.Context) context.Context

Fan in returns a context that ends when each of the input contexts are done

func GetDefaultClientSet

func GetDefaultClientSet() (*kubernetes.Clientset, error)

GetDefaultClientSet returns k8s clientset based off of default config file

func YAMLMarshal

func YAMLMarshal(obj interface{}) ([]byte, error)

Types

type Coder

type Coder interface {
	// Kind returns kind of the object
	Kind() Kind
	// SetConfig configures coder with provided config object
	// It returns type assertion error if the config object type
	// does not match the accepted type of interface implementor
	SetConfig(config configio.Config) error
	// GetConfig retrieves implementor's internal config object
	GetConfig() configio.Config
	//Context returns context of the object implementing this interface
	Context() context.Context
	// Error returns a channel on which internal errors are reported
	Error() <-chan error
	// Create deploys after receiving done signal from input context
	// It will output a context for downstream processes to use
	Create(ctx context.Context) context.Context
	// Delete deletes objects after receiving done signal from input context
	// It will output a context for downstream processes to use
	Delete(ctx context.Context) context.Context
}

Coder defines an interface that is primarily to be implemented by kubernetes actions such as pv's, pvc's etc.

type Error

type Error string
const (
	TypeAssertionError   Error = "type assertion error"
	UnsupportedCoderKind Error = "coder kind not supported"
	UnsupportedSync      Error = "unsupported sync"
)

func (Error) Error

func (e Error) Error() string

type Kind

type Kind string
const (
	KindOfSleep      Kind = "sleep"      // sleeper, a no op
	KindOfPod        Kind = "pods"       // pods
	KindOfPv         Kind = "pv"         // persistent volumes
	KindOfPvc        Kind = "pvc"        // persistent volume claims
	KindOfSvc        Kind = "svc"        // services
	KindOfJob        Kind = "jobs"       // jobs
	KindOfDs         Kind = "ds"         // daemon set
	KindOfNs         Kind = "ns"         // namespace
	KindOfSc         Kind = "sc"         // storage class
	KindOfDeployment Kind = "deployment" // deployment controller
)

type SyncType

type SyncType int
const (
	Sync SyncType = iota
	Async
)

Directories

Path Synopsis
examples
kube
cm
cm implements kube.Coder interface for configmap
cm implements kube.Coder interface for configmap
deployment
pods implements kube.Coder interface for deployment of pods
pods implements kube.Coder interface for deployment of pods
ds
ds implements kube.Coder interface for deployment of daemon set
ds implements kube.Coder interface for deployment of daemon set
endpoints
pods implements kube.Coder interface for deployment of pods
pods implements kube.Coder interface for deployment of pods
jobs
jobs implements kube.Coder interface for deployment of jobs
jobs implements kube.Coder interface for deployment of jobs
net-policy
ns implements kube.Coder interface for deployment of namespaces
ns implements kube.Coder interface for deployment of namespaces
nl
nl implements kube.Coder interface for nodelist
nl implements kube.Coder interface for nodelist
ns
ns implements kube.Coder interface for deployment of namespaces
ns implements kube.Coder interface for deployment of namespaces
pods
pods implements kube.Coder interface for deployment of pods
pods implements kube.Coder interface for deployment of pods
pv
pv implements kube.Coder interface for deployment of persistent volumes
pv implements kube.Coder interface for deployment of persistent volumes
pvc
pvc implements kube.Coder interface for deployment of persistent volume claims
pvc implements kube.Coder interface for deployment of persistent volume claims
rbac
ds implements kube.Coder interface for deployment of daemon set
ds implements kube.Coder interface for deployment of daemon set
sc
ds implements kube.Coder interface for deployment of daemon set
ds implements kube.Coder interface for deployment of daemon set
statefulset
ds implements kube.Coder interface for deployment of daemon set
ds implements kube.Coder interface for deployment of daemon set
svc
svc implements kube.Coder interface for deployment of services
svc implements kube.Coder interface for deployment of services
opt
exec
exec implements kube.Coder interface for executing a shell command
exec implements kube.Coder interface for executing a shell command
sleep
sleep implements kube.Coder interface for sleeping (this is a kube no op)
sleep implements kube.Coder interface for sleeping (this is a kube no op)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL