cluster

package
v0.0.0-...-8161b5d Latest Latest
Warning

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

Go to latest
Published: Aug 4, 2019 License: MIT Imports: 44 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Cluster

type Cluster struct {
	acidv1.Postgresql
	Config

	KubeClient k8sutil.KubernetesClient //TODO: move clients to the better place?
	// contains filtered or unexported fields
}

Cluster describes postgresql cluster

func New

func New(cfg Config, kubeClient k8sutil.KubernetesClient, pgSpec acidv1.Postgresql, logger *logrus.Entry) *Cluster

New creates a new cluster. This function should be called from a controller.

func (*Cluster) Create

func (c *Cluster) Create() error

Create creates the new kubernetes objects associated with the cluster.

func (*Cluster) Delete

func (c *Cluster) Delete()

Delete deletes the cluster and cleans up all objects associated with it (including statefulsets). The deletion order here is somewhat significant, because Patroni, when running with the Kubernetes DCS, reuses the master's endpoint to store the leader related metadata. If we remove the endpoint before the pods, it will be re-created by the current master pod and will remain, obstructing the creation of the new cluster with the same name. Therefore, the endpoints should be deleted last.

func (*Cluster) ExecCommand

func (c *Cluster) ExecCommand(podName *spec.NamespacedName, command ...string) (string, error)

ExecCommand executes arbitrary command inside the pod

func (*Cluster) GetCurrentProcess

func (c *Cluster) GetCurrentProcess() Process

GetCurrentProcess provides name of the last process of the cluster

func (*Cluster) GetEndpointMaster

func (c *Cluster) GetEndpointMaster() *v1.Endpoints

GetEndpointMaster returns cluster's kubernetes master Endpoint

func (*Cluster) GetEndpointReplica

func (c *Cluster) GetEndpointReplica() *v1.Endpoints

GetEndpointReplica returns cluster's kubernetes master Endpoint

func (*Cluster) GetPodDisruptionBudget

func (c *Cluster) GetPodDisruptionBudget() *policybeta1.PodDisruptionBudget

GetPodDisruptionBudget returns cluster's kubernetes PodDisruptionBudget

func (*Cluster) GetServiceMaster

func (c *Cluster) GetServiceMaster() *v1.Service

GetServiceMaster returns cluster's kubernetes master Service

func (*Cluster) GetServiceReplica

func (c *Cluster) GetServiceReplica() *v1.Service

GetServiceReplica returns cluster's kubernetes replica Service

func (*Cluster) GetSpec

func (c *Cluster) GetSpec() (*acidv1.Postgresql, error)

GetSpec returns a copy of the operator-side spec of a Postgres cluster in a thread-safe manner

func (*Cluster) GetStatefulSet

func (c *Cluster) GetStatefulSet() *v1beta1.StatefulSet

GetStatefulSet returns cluster's kubernetes StatefulSet

func (*Cluster) GetStatus

func (c *Cluster) GetStatus() *ClusterStatus

GetStatus provides status of the cluster

func (*Cluster) Lock

func (c *Cluster) Lock()

Lock locks the cluster

func (*Cluster) MigrateMasterPod

func (c *Cluster) MigrateMasterPod(podName spec.NamespacedName) error

MigrateMasterPod migrates master pod via failover to a replica

func (*Cluster) MigrateReplicaPod

func (c *Cluster) MigrateReplicaPod(podName spec.NamespacedName, fromNodeName string) error

MigrateReplicaPod recreates pod on a new node

func (*Cluster) NeedsRepair

func (c *Cluster) NeedsRepair() (bool, acidv1.PostgresStatus)

NeedsRepair returns true if the cluster should be included in the repair scan (based on its in-memory status).

func (*Cluster) ReceivePodEvent

func (c *Cluster) ReceivePodEvent(event PodEvent)

ReceivePodEvent is called back by the controller in order to add the cluster's pod event to the queue.

func (*Cluster) Run

func (c *Cluster) Run(stopCh <-chan struct{})

Run starts the pod event dispatching for the given cluster.

func (*Cluster) Switchover

func (c *Cluster) Switchover(curMaster *v1.Pod, candidate spec.NamespacedName) error

Switchover does a switchover (via Patroni) to a candidate pod

func (*Cluster) Sync

func (c *Cluster) Sync(newSpec *acidv1.Postgresql) error

Sync syncs the cluster, making sure the actual Kubernetes objects correspond to what is defined in the manifest. Unlike the update, sync does not error out if some objects do not exist and takes care of creating them.

func (*Cluster) Unlock

func (c *Cluster) Unlock()

Unlock unlocks the cluster

func (*Cluster) Update

func (c *Cluster) Update(oldSpec, newSpec *acidv1.Postgresql) error

Update changes Kubernetes objects according to the new specification. Unlike the sync case, the missing object (i.e. service) is treated as an error logical backup cron jobs are an exception: a user-initiated Update can enable a logical backup job for a cluster that had no such job before. In this case a missing job is not an error.

type ClusterStatus

type ClusterStatus struct {
	Team                string
	Cluster             string
	MasterService       *v1.Service
	ReplicaService      *v1.Service
	MasterEndpoint      *v1.Endpoints
	ReplicaEndpoint     *v1.Endpoints
	StatefulSet         *v1beta1.StatefulSet
	PodDisruptionBudget *policybeta1.PodDisruptionBudget

	CurrentProcess Process
	Worker         uint32
	Status         acidv1.PostgresStatus
	Spec           acidv1.PostgresSpec
	Error          error
}

ClusterStatus describes status of the cluster

type Config

type Config struct {
	OpConfig                     config.Config
	RestConfig                   *rest.Config
	InfrastructureRoles          map[string]spec.PgUser // inherited from the controller
	PodServiceAccount            *v1.ServiceAccount
	PodServiceAccountRoleBinding *rbacv1beta1.RoleBinding
}

Config contains operator-wide clients and configuration used from a cluster. TODO: remove struct duplication.

type OAuthTokenGetter

type OAuthTokenGetter interface {
	// contains filtered or unexported methods
}

OAuthTokenGetter provides the method for fetching OAuth tokens

type PodEvent

type PodEvent struct {
	ResourceVersion string
	PodName         types.NamespacedName
	PrevPod         *v1.Pod
	CurPod          *v1.Pod
	EventType       PodEventType
}

PodEvent describes the event for a single Pod

type PodEventType

type PodEventType string

PodEventType represents the type of a pod-related event

const (
	PodEventAdd    PodEventType = "ADD"
	PodEventUpdate PodEventType = "UPDATE"
	PodEventDelete PodEventType = "DELETE"
)

Possible values for the EventType

type PostgresRole

type PostgresRole string

PostgresRole describes role of the node

const (
	// Master role
	Master PostgresRole = "master"

	// Replica role
	Replica PostgresRole = "replica"
)

type Process

type Process struct {
	Name      string
	StartTime time.Time
}

Process describes process of the cluster

type SecretOauthTokenGetter

type SecretOauthTokenGetter struct {
	OAuthTokenSecretName spec.NamespacedName
	// contains filtered or unexported fields
}

SecretOauthTokenGetter enables fetching OAuth tokens by reading Kubernetes secrets

type WorkerStatus

type WorkerStatus struct {
	CurrentCluster types.NamespacedName
	CurrentProcess Process
}

WorkerStatus describes status of the worker

Jump to

Keyboard shortcuts

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