kubernetes

package
v1.10.0 Latest Latest
Warning

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

Go to latest
Published: Nov 22, 2018 License: Apache-2.0 Imports: 44 Imported by: 57

Documentation

Index

Constants

Control IDs used by the kubernetes integration.

These constants are keys used in node metadata

View Source
const (
	UpdatedReplicas     = report.KubernetesUpdatedReplicas
	AvailableReplicas   = report.KubernetesAvailableReplicas
	UnavailableReplicas = report.KubernetesUnavailableReplicas
	Strategy            = report.KubernetesStrategy
)

These constants are keys used in node metadata

View Source
const (
	Name            = report.KubernetesName
	Namespace       = report.KubernetesNamespace
	Created         = report.KubernetesCreated
	LabelPrefix     = "kubernetes_labels_"
	VolumeClaimName = report.KubernetesVolumeClaim
)

These constants are keys used in node metadata

These constants are keys used in node metadata

View Source
const (
	StateDeleted = "deleted"
	StateFailed  = "Failed"
)

Pod states we handle specially

These constants are keys used in node metadata

View Source
const (
	// BetaStorageClassAnnotation is the annotation for default storage class
	BetaStorageClassAnnotation = "volume.beta.kubernetes.io/storage-class"
)
View Source
const (
	Capacity = "capacity"
)

Capacity is the annotation key which provides the storage size

View Source
const (
	MisscheduledReplicas = report.KubernetesMisscheduledReplicas
)

These constants are keys used in node metadata

View Source
const (
	PublicIP = report.KubernetesPublicIP
)

These constants are keys used in node metadata

View Source
const (
	SnapshotPVName = "SnapshotMetadata-PVName"
)

SnapshotPVName is the label key which provides PV name

Variables

View Source
var (
	PodMetadataTemplates = report.MetadataTemplates{
		State:            {ID: State, Label: "State", From: report.FromLatest, Priority: 2},
		IP:               {ID: IP, Label: "IP", From: report.FromLatest, Datatype: report.IP, Priority: 3},
		report.Container: {ID: report.Container, Label: "# Containers", From: report.FromCounters, Datatype: report.Number, Priority: 4},
		Namespace:        {ID: Namespace, Label: "Namespace", From: report.FromLatest, Priority: 5},
		Created:          {ID: Created, Label: "Created", From: report.FromLatest, Datatype: report.DateTime, Priority: 6},
		RestartCount:     {ID: RestartCount, Label: "Restart #", From: report.FromLatest, Priority: 7},
	}

	PodMetricTemplates = docker.ContainerMetricTemplates

	ServiceMetadataTemplates = report.MetadataTemplates{
		Namespace:  {ID: Namespace, Label: "Namespace", From: report.FromLatest, Priority: 2},
		Created:    {ID: Created, Label: "Created", From: report.FromLatest, Datatype: report.DateTime, Priority: 3},
		PublicIP:   {ID: PublicIP, Label: "Public IP", From: report.FromLatest, Datatype: report.IP, Priority: 4},
		IP:         {ID: IP, Label: "Internal IP", From: report.FromLatest, Datatype: report.IP, Priority: 5},
		report.Pod: {ID: report.Pod, Label: "# Pods", From: report.FromCounters, Datatype: report.Number, Priority: 6},
		Type:       {ID: Type, Label: "Type", From: report.FromLatest, Priority: 7},
		Ports:      {ID: Ports, Label: "Ports", From: report.FromLatest, Priority: 8},
	}

	ServiceMetricTemplates = PodMetricTemplates

	DeploymentMetadataTemplates = report.MetadataTemplates{
		NodeType:           {ID: NodeType, Label: "Type", From: report.FromLatest, Priority: 1},
		Namespace:          {ID: Namespace, Label: "Namespace", From: report.FromLatest, Priority: 2},
		Created:            {ID: Created, Label: "Created", From: report.FromLatest, Datatype: report.DateTime, Priority: 3},
		ObservedGeneration: {ID: ObservedGeneration, Label: "Observed gen.", From: report.FromLatest, Datatype: report.Number, Priority: 4},
		DesiredReplicas:    {ID: DesiredReplicas, Label: "Desired replicas", From: report.FromLatest, Datatype: report.Number, Priority: 5},
		report.Pod:         {ID: report.Pod, Label: "# Pods", From: report.FromCounters, Datatype: report.Number, Priority: 6},
		Strategy:           {ID: Strategy, Label: "Strategy", From: report.FromLatest, Priority: 7},
	}

	DeploymentMetricTemplates = PodMetricTemplates

	DaemonSetMetadataTemplates = report.MetadataTemplates{
		NodeType:        {ID: NodeType, Label: "Type", From: report.FromLatest, Priority: 1},
		Namespace:       {ID: Namespace, Label: "Namespace", From: report.FromLatest, Priority: 2},
		Created:         {ID: Created, Label: "Created", From: report.FromLatest, Datatype: report.DateTime, Priority: 3},
		DesiredReplicas: {ID: DesiredReplicas, Label: "Desired replicas", From: report.FromLatest, Datatype: report.Number, Priority: 4},
		report.Pod:      {ID: report.Pod, Label: "# Pods", From: report.FromCounters, Datatype: report.Number, Priority: 5},
	}

	DaemonSetMetricTemplates = PodMetricTemplates

	StatefulSetMetadataTemplates = report.MetadataTemplates{
		NodeType:           {ID: NodeType, Label: "Type", From: report.FromLatest, Priority: 1},
		Namespace:          {ID: Namespace, Label: "Namespace", From: report.FromLatest, Priority: 2},
		Created:            {ID: Created, Label: "Created", From: report.FromLatest, Datatype: report.DateTime, Priority: 3},
		ObservedGeneration: {ID: ObservedGeneration, Label: "Observed gen.", From: report.FromLatest, Datatype: report.Number, Priority: 4},
		DesiredReplicas:    {ID: DesiredReplicas, Label: "Desired replicas", From: report.FromLatest, Datatype: report.Number, Priority: 5},
		report.Pod:         {ID: report.Pod, Label: "# Pods", From: report.FromCounters, Datatype: report.Number, Priority: 6},
	}

	StatefulSetMetricTemplates = PodMetricTemplates

	CronJobMetadataTemplates = report.MetadataTemplates{
		NodeType:      {ID: NodeType, Label: "Type", From: report.FromLatest, Priority: 1},
		Namespace:     {ID: Namespace, Label: "Namespace", From: report.FromLatest, Priority: 2},
		Created:       {ID: Created, Label: "Created", From: report.FromLatest, Datatype: report.DateTime, Priority: 3},
		Schedule:      {ID: Schedule, Label: "Schedule", From: report.FromLatest, Priority: 4},
		LastScheduled: {ID: LastScheduled, Label: "Last scheduled", From: report.FromLatest, Datatype: report.DateTime, Priority: 5},
		Suspended:     {ID: Suspended, Label: "Suspended", From: report.FromLatest, Priority: 6},
		ActiveJobs:    {ID: ActiveJobs, Label: "# Jobs", From: report.FromLatest, Datatype: report.Number, Priority: 7},
		report.Pod:    {ID: report.Pod, Label: "# Pods", From: report.FromCounters, Datatype: report.Number, Priority: 8},
	}

	CronJobMetricTemplates = PodMetricTemplates

	PersistentVolumeMetadataTemplates = report.MetadataTemplates{
		NodeType:         {ID: NodeType, Label: "Type", From: report.FromLatest, Priority: 1},
		VolumeClaim:      {ID: VolumeClaim, Label: "Volume claim", From: report.FromLatest, Priority: 2},
		StorageClassName: {ID: StorageClassName, Label: "Storage class", From: report.FromLatest, Priority: 3},
		AccessModes:      {ID: AccessModes, Label: "Access modes", From: report.FromLatest, Priority: 5},
		Status:           {ID: Status, Label: "Status", From: report.FromLatest, Priority: 6},
		StorageDriver:    {ID: StorageDriver, Label: "Storage driver", From: report.FromLatest, Priority: 7},
	}

	PersistentVolumeClaimMetadataTemplates = report.MetadataTemplates{
		NodeType:         {ID: NodeType, Label: "Type", From: report.FromLatest, Priority: 1},
		Namespace:        {ID: Namespace, Label: "Namespace", From: report.FromLatest, Priority: 2},
		Status:           {ID: Status, Label: "Status", From: report.FromLatest, Priority: 3},
		VolumeName:       {ID: VolumeName, Label: "Volume", From: report.FromLatest, Priority: 4},
		StorageClassName: {ID: StorageClassName, Label: "Storage class", From: report.FromLatest, Priority: 5},
		VolumeCapacity:   {ID: VolumeCapacity, Label: "Capacity", From: report.FromLatest, Priority: 6},
	}

	StorageClassMetadataTemplates = report.MetadataTemplates{
		NodeType:    {ID: NodeType, Label: "Type", From: report.FromLatest, Priority: 1},
		Name:        {ID: Name, Label: "Name", From: report.FromLatest, Priority: 2},
		Provisioner: {ID: Provisioner, Label: "Provisioner", From: report.FromLatest, Priority: 3},
	}

	VolumeSnapshotMetadataTemplates = report.MetadataTemplates{
		NodeType:     {ID: NodeType, Label: "Type", From: report.FromLatest, Priority: 1},
		Namespace:    {ID: Namespace, Label: "Name", From: report.FromLatest, Priority: 2},
		VolumeClaim:  {ID: VolumeClaim, Label: "Persistent volume claim", From: report.FromLatest, Priority: 3},
		SnapshotData: {ID: SnapshotData, Label: "Volume snapshot data", From: report.FromLatest, Priority: 4},
	}

	VolumeSnapshotDataMetadataTemplates = report.MetadataTemplates{
		NodeType:           {ID: NodeType, Label: "Type", From: report.FromLatest, Priority: 1},
		VolumeName:         {ID: VolumeName, Label: "Persistent volume", From: report.FromLatest, Priority: 2},
		VolumeSnapshotName: {ID: VolumeSnapshotName, Label: "Volume snapshot", From: report.FromLatest, Priority: 3},
	}

	TableTemplates = report.TableTemplates{
		LabelPrefix: {
			ID:     LabelPrefix,
			Label:  "Kubernetes labels",
			Type:   report.PropertyListType,
			Prefix: LabelPrefix,
		},
	}

	ScalingControls = []report.Control{
		{
			ID:    ScaleDown,
			Human: "Scale down",
			Icon:  "fa fa-minus",
			Rank:  0,
		},
		{
			ID:    ScaleUp,
			Human: "Scale up",
			Icon:  "fa fa-plus",
			Rank:  1,
		},
	}
)

Exposed for testing

View Source
var GetLocalPodUIDs = func(kubeletHost string) (map[string]struct{}, error) {
	url := fmt.Sprintf("http://%s/pods/", kubeletHost)
	resp, err := http.Get(url)
	if err != nil {
		return nil, err
	}
	defer resp.Body.Close()
	var localPods podList
	if err := codec.NewDecoder(resp.Body, &codec.JsonHandle{}).Decode(&localPods); err != nil {
		return nil, err
	}
	result := make(map[string]struct{}, len(localPods.Items))
	for _, pod := range localPods.Items {
		result[pod.Metadata.UID] = struct{}{}
	}
	return result, nil
}

GetLocalPodUIDs obtains the UID of the pods run locally (it's just exported for testing)

Functions

func IsPauseImageName added in v0.17.0

func IsPauseImageName(imageName string) bool

IsPauseImageName indicates whether an image name corresponds to a kubernetes pause container image.

func NewEventStore added in v0.15.0

func NewEventStore(watch Watch, keyFunc cache.KeyFunc) cache.Store

NewEventStore creates a new Store which triggers watch whenever an object is added, removed or updated.

func NewLogReadCloser added in v1.7.0

func NewLogReadCloser(readClosersWithLabel map[io.ReadCloser]string) io.ReadCloser

NewLogReadCloser reads from multiple io.ReadCloser, where data is available, and annotates each line with the reader's label

Types

type Client

type Client interface {
	Stop()
	WalkPods(f func(Pod) error) error
	WalkServices(f func(Service) error) error
	WalkDeployments(f func(Deployment) error) error
	WalkDaemonSets(f func(DaemonSet) error) error
	WalkStatefulSets(f func(StatefulSet) error) error
	WalkCronJobs(f func(CronJob) error) error
	WalkNamespaces(f func(NamespaceResource) error) error
	WalkPersistentVolumes(f func(PersistentVolume) error) error
	WalkPersistentVolumeClaims(f func(PersistentVolumeClaim) error) error
	WalkStorageClasses(f func(StorageClass) error) error
	WalkVolumeSnapshots(f func(VolumeSnapshot) error) error
	WalkVolumeSnapshotData(f func(VolumeSnapshotData) error) error

	WatchPods(f func(Event, Pod))

	CloneVolumeSnapshot(namespaceID, volumeSnapshotID, persistentVolumeClaimID, capacity string) error
	CreateVolumeSnapshot(namespaceID, persistentVolumeClaimID, capacity string) error
	GetLogs(namespaceID, podID string, containerNames []string) (io.ReadCloser, error)
	DeletePod(namespaceID, podID string) error
	DeleteVolumeSnapshot(namespaceID, volumeSnapshotID string) error
	ScaleUp(resource, namespaceID, id string) error
	ScaleDown(resource, namespaceID, id string) error
}

Client keeps track of running kubernetes pods and services

func NewClient

func NewClient(config ClientConfig) (Client, error)

NewClient returns a usable Client. Don't forget to Stop it.

type ClientConfig added in v0.17.1

type ClientConfig struct {
	CertificateAuthority string
	ClientCertificate    string
	ClientKey            string
	Cluster              string
	Context              string
	Insecure             bool
	Kubeconfig           string
	Password             string
	Server               string
	Token                string
	User                 string
	Username             string
}

ClientConfig establishes the configuration for the kubernetes client

type CronJob added in v1.6.0

type CronJob interface {
	Meta
	Selectors() ([]labels.Selector, error)
	GetNode(probeID string) report.Node
}

CronJob represents a Kubernetes cron job

func NewCronJob added in v1.6.0

func NewCronJob(cji interface{}, jobs map[types.UID]*batchv1.Job) CronJob

NewCronJob creates a new cron job. jobs should be all jobs, which will be filtered for those matching this cron job.

type DaemonSet added in v1.4.0

type DaemonSet interface {
	Meta
	Selector() (labels.Selector, error)
	GetNode(probeID string) report.Node
}

DaemonSet represents a Kubernetes daemonset

func NewDaemonSet added in v1.4.0

func NewDaemonSet(d *apiv1beta1.DaemonSet) DaemonSet

NewDaemonSet creates a new daemonset

type Deployment added in v0.15.0

type Deployment interface {
	Meta
	Selector() (labels.Selector, error)
	GetNode(probeID string) report.Node
}

Deployment represents a Kubernetes deployment

func NewDeployment added in v0.15.0

func NewDeployment(d *apiv1beta1.Deployment) Deployment

NewDeployment creates a new Deployment

type Event added in v0.15.0

type Event int

Event type is an enum of ADD, UPDATE and DELETE

const (
	ADD Event = iota
	UPDATE
	DELETE
)

Event enum values.

type Meta added in v0.15.0

type Meta interface {
	UID() string
	Name() string
	Namespace() string
	Created() string
	Labels() map[string]string
	MetaNode(id string) report.Node
}

Meta represents a metadata information about a Kubernetes object

type NamespaceResource added in v1.7.0

type NamespaceResource interface {
	Meta
	GetNode() report.Node
}

NamespaceResource represents a Kubernetes namespace `Namespace` is already taken in meta.go

func NewNamespace added in v1.7.0

func NewNamespace(ns *apiv1.Namespace) NamespaceResource

NewNamespace creates a new Namespace

type PersistentVolume added in v1.9.1

type PersistentVolume interface {
	Meta
	GetNode() report.Node
	GetAccessMode() string
	GetVolume() string
	GetStorageDriver() string
}

PersistentVolume represent kubernetes PersistentVolume interface

func NewPersistentVolume added in v1.9.1

func NewPersistentVolume(p *apiv1.PersistentVolume) PersistentVolume

NewPersistentVolume returns new persistentVolume type

type PersistentVolumeClaim added in v1.9.1

type PersistentVolumeClaim interface {
	Meta
	Selector() (labels.Selector, error)
	GetNode(string) report.Node
	GetStorageClass() string
	GetCapacity() string
}

PersistentVolumeClaim represents kubernetes PVC interface

func NewPersistentVolumeClaim added in v1.9.1

func NewPersistentVolumeClaim(p *apiv1.PersistentVolumeClaim) PersistentVolumeClaim

NewPersistentVolumeClaim returns new Persistent Volume Claim type

type Pod

type Pod interface {
	Meta
	AddParent(topology, id string)
	NodeName() string
	GetNode(probeID string) report.Node
	RestartCount() uint
	ContainerNames() []string
}

Pod represents a Kubernetes pod

func NewPod

func NewPod(p *apiv1.Pod) Pod

NewPod creates a new Pod

type Reporter

type Reporter struct {
	// contains filtered or unexported fields
}

Reporter generate Reports containing Container and ContainerImage topologies

func NewReporter

func NewReporter(client Client, pipes controls.PipeClient, probeID string, hostID string, probe *probe.Probe, handlerRegistry *controls.HandlerRegistry, nodeName string, kubeletPort uint) *Reporter

NewReporter makes a new Reporter

func (*Reporter) CaptureDeployment added in v1.7.0

func (r *Reporter) CaptureDeployment(f func(xfer.Request, string, string) xfer.Response) func(xfer.Request) xfer.Response

CaptureDeployment is exported for testing

func (*Reporter) CapturePersistentVolumeClaim added in v1.10.0

func (r *Reporter) CapturePersistentVolumeClaim(f func(xfer.Request, string, string, string) xfer.Response) func(xfer.Request) xfer.Response

CapturePersistentVolumeClaim will return name, namespace and capacity of PVC

func (*Reporter) CapturePod added in v0.15.0

func (r *Reporter) CapturePod(f func(xfer.Request, string, string, []string) xfer.Response) func(xfer.Request) xfer.Response

CapturePod is exported for testing

func (*Reporter) CaptureVolumeSnapshot added in v1.10.0

func (r *Reporter) CaptureVolumeSnapshot(f func(xfer.Request, string, string, string, string) xfer.Response) func(xfer.Request) xfer.Response

CaptureVolumeSnapshot will return name, pvc name, namespace and capacity of volume snapshot

func (*Reporter) GetLogs added in v0.15.0

func (r *Reporter) GetLogs(req xfer.Request, namespaceID, podID string, containerNames []string) xfer.Response

GetLogs is the control to get the logs for a kubernetes pod

func (Reporter) Name added in v0.10.0

func (Reporter) Name() string

Name of this reporter, for metrics gathering

func (*Reporter) Report

func (r *Reporter) Report() (report.Report, error)

Report generates a Report containing Container and ContainerImage topologies

func (*Reporter) ScaleDown added in v0.15.0

func (r *Reporter) ScaleDown(req xfer.Request, namespace, id string) xfer.Response

ScaleDown is the control to scale up a deployment

func (*Reporter) ScaleUp added in v0.15.0

func (r *Reporter) ScaleUp(req xfer.Request, namespace, id string) xfer.Response

ScaleUp is the control to scale up a deployment

func (*Reporter) Stop added in v0.15.0

func (r *Reporter) Stop()

Stop unregisters controls.

type Service

type Service interface {
	Meta
	GetNode(probeID string) report.Node
	Selector() labels.Selector
	ClusterIP() string
}

Service represents a Kubernetes service

func NewService

func NewService(s *apiv1.Service) Service

NewService creates a new Service

type StatefulSet added in v1.6.0

type StatefulSet interface {
	Meta
	Selector() (labels.Selector, error)
	GetNode(probeID string) report.Node
}

StatefulSet represents a Kubernetes statefulset

func NewStatefulSet added in v1.6.0

func NewStatefulSet(s *v1beta1.StatefulSet) StatefulSet

NewStatefulSet creates a new statefulset

type StorageClass added in v1.9.1

type StorageClass interface {
	Meta
	GetNode() report.Node
}

StorageClass represent kubernetes StorageClass interface

func NewStorageClass added in v1.9.1

func NewStorageClass(p *storagev1.StorageClass) StorageClass

NewStorageClass returns new Storage Class type

type Tagger added in v1.10.0

type Tagger struct {
}

Tagger adds pod parents to container nodes.

func (Tagger) Name added in v1.10.0

func (Tagger) Name() string

Name of this tagger, for metrics gathering

func (*Tagger) Tag added in v1.10.0

func (r *Tagger) Tag(rpt report.Report) (report.Report, error)

Tag adds pod parents to container nodes.

type VolumeSnapshot added in v1.10.0

type VolumeSnapshot interface {
	Meta
	GetNode(probeID string) report.Node
	GetVolumeName() string
	GetCapacity() string
}

VolumeSnapshot represent kubernetes VolumeSnapshot interface

func NewVolumeSnapshot added in v1.10.0

func NewVolumeSnapshot(p *snapshotv1.VolumeSnapshot) VolumeSnapshot

NewVolumeSnapshot returns new Volume Snapshot type

type VolumeSnapshotData added in v1.10.0

type VolumeSnapshotData interface {
	Meta
	GetNode(probeID string) report.Node
}

VolumeSnapshotData represent kubernetes VolumeSnapshotData interface

func NewVolumeSnapshotData added in v1.10.0

func NewVolumeSnapshotData(p *snapshotv1.VolumeSnapshotData) VolumeSnapshotData

NewVolumeSnapshotData returns new Volume Snapshot Data type

type Watch added in v0.15.0

type Watch func(Event, interface{})

Watch type is for callbacks when somethings happens to the store.

Jump to

Keyboard shortcuts

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