service

package
v1.2.4 Latest Latest
Warning

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

Go to latest
Published: Dec 28, 2022 License: Apache-2.0 Imports: 20 Imported by: 4

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func AreAllRunning added in v1.2.3

func AreAllRunning(pods *corev1.PodList) bool

func GetRedisName

func GetRedisName(rf *redisfailoverv1.RedisFailover) string

GetRedisName returns the name for redis resources

func GetRedisReadinessName

func GetRedisReadinessName(rf *redisfailoverv1.RedisFailover) string

GetRedisReadinessName returns the name for redis resources

func GetRedisShutdownConfigMapName

func GetRedisShutdownConfigMapName(rf *redisfailoverv1.RedisFailover) string

GetRedisShutdownConfigMapName returns the name for redis configmap

func GetRedisShutdownName

func GetRedisShutdownName(rf *redisfailoverv1.RedisFailover) string

GetRedisShutdownName returns the name for redis resources

func GetSentinelName

func GetSentinelName(rf *redisfailoverv1.RedisFailover) string

GetSentinelName returns the name for sentinel resources

Types

type RedisFailoverCheck

type RedisFailoverCheck interface {
	CheckRedisNumber(rFailover *redisfailoverv1.RedisFailover) error
	CheckSentinelNumber(rFailover *redisfailoverv1.RedisFailover) error
	CheckAllSlavesFromMaster(master string, rFailover *redisfailoverv1.RedisFailover) error
	CheckSentinelNumberInMemory(sentinel string, rFailover *redisfailoverv1.RedisFailover) error
	CheckSentinelSlavesNumberInMemory(sentinel string, rFailover *redisfailoverv1.RedisFailover) error
	CheckSentinelQuorum(rFailover *redisfailoverv1.RedisFailover) (int, error)
	CheckIfMasterLocalhost(rFailover *redisfailoverv1.RedisFailover) (bool, error)
	CheckSentinelMonitor(sentinel string, monitor ...string) error
	GetMasterIP(rFailover *redisfailoverv1.RedisFailover) (string, error)
	GetNumberMasters(rFailover *redisfailoverv1.RedisFailover) (int, error)
	GetRedisesIPs(rFailover *redisfailoverv1.RedisFailover) ([]string, error)
	GetSentinelsIPs(rFailover *redisfailoverv1.RedisFailover) ([]string, error)
	GetMaxRedisPodTime(rFailover *redisfailoverv1.RedisFailover) (time.Duration, error)
	GetRedisesSlavesPods(rFailover *redisfailoverv1.RedisFailover) ([]string, error)
	GetRedisesMasterPod(rFailover *redisfailoverv1.RedisFailover) (string, error)
	GetStatefulSetUpdateRevision(rFailover *redisfailoverv1.RedisFailover) (string, error)
	GetRedisRevisionHash(podName string, rFailover *redisfailoverv1.RedisFailover) (string, error)
	CheckRedisSlavesReady(slaveIP string, rFailover *redisfailoverv1.RedisFailover) (bool, error)
	IsRedisRunning(rFailover *redisfailoverv1.RedisFailover) bool
	IsSentinelRunning(rFailover *redisfailoverv1.RedisFailover) bool
	IsClusterRunning(rFailover *redisfailoverv1.RedisFailover) bool
}

RedisFailoverCheck defines the interface able to check the correct status of a redis failover

type RedisFailoverChecker

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

RedisFailoverChecker is our implementation of RedisFailoverCheck interface

func NewRedisFailoverChecker

func NewRedisFailoverChecker(k8sService k8s.Services, redisClient redis.Client, logger log.Logger, metricsClient metrics.Recorder) *RedisFailoverChecker

NewRedisFailoverChecker creates an object of the RedisFailoverChecker struct

func (*RedisFailoverChecker) CheckAllSlavesFromMaster

func (r *RedisFailoverChecker) CheckAllSlavesFromMaster(master string, rf *redisfailoverv1.RedisFailover) error

CheckAllSlavesFromMaster controlls that all slaves have the same master (the real one)

func (*RedisFailoverChecker) CheckIfMasterLocalhost added in v1.2.4

func (r *RedisFailoverChecker) CheckIfMasterLocalhost(rFailover *redisfailoverv1.RedisFailover) (bool, error)

This function will check if the local host ip is set as the master for all currently available pods This can be used to detect the fresh boot of all the redis pods This function returns true if it all available pods have local host ip as master, false if atleast one of the ip is not local hostip false and error if any function fails

func (*RedisFailoverChecker) CheckRedisNumber

func (r *RedisFailoverChecker) CheckRedisNumber(rf *redisfailoverv1.RedisFailover) error

CheckRedisNumber controlls that the number of deployed redis is the same than the requested on the spec

func (*RedisFailoverChecker) CheckRedisSlavesReady

func (r *RedisFailoverChecker) CheckRedisSlavesReady(ip string, rFailover *redisfailoverv1.RedisFailover) (bool, error)

CheckRedisSlavesReady returns true if the slave is ready (sync, connected, etc)

func (*RedisFailoverChecker) CheckSentinelMonitor

func (r *RedisFailoverChecker) CheckSentinelMonitor(sentinel string, monitor ...string) error

CheckSentinelMonitor controls if the sentinels are monitoring the expected master

func (*RedisFailoverChecker) CheckSentinelNumber

func (r *RedisFailoverChecker) CheckSentinelNumber(rf *redisfailoverv1.RedisFailover) error

CheckSentinelNumber controlls that the number of deployed sentinel is the same than the requested on the spec

func (*RedisFailoverChecker) CheckSentinelNumberInMemory

func (r *RedisFailoverChecker) CheckSentinelNumberInMemory(sentinel string, rf *redisfailoverv1.RedisFailover) error

CheckSentinelNumberInMemory controls that the provided sentinel has only the living sentinels on its memory.

func (*RedisFailoverChecker) CheckSentinelQuorum added in v1.2.4

func (r *RedisFailoverChecker) CheckSentinelQuorum(rFailover *redisfailoverv1.RedisFailover) (int, error)

This function will call the sentinel client apis to check with sentinel if the sentinel is in a state to heal the redis system

func (*RedisFailoverChecker) CheckSentinelSlavesNumberInMemory

func (r *RedisFailoverChecker) CheckSentinelSlavesNumberInMemory(sentinel string, rf *redisfailoverv1.RedisFailover) error

CheckSentinelSlavesNumberInMemory controls that the provided sentinel has only the expected slaves number.

func (*RedisFailoverChecker) GetMasterIP

GetMasterIP connects to all redis and returns the master of the redis failover

func (*RedisFailoverChecker) GetMaxRedisPodTime added in v1.2.4

func (r *RedisFailoverChecker) GetMaxRedisPodTime(rf *redisfailoverv1.RedisFailover) (time.Duration, error)

GetMaxRedisPodTime returns the MAX uptime among the active Pods

func (*RedisFailoverChecker) GetNumberMasters

func (r *RedisFailoverChecker) GetNumberMasters(rf *redisfailoverv1.RedisFailover) (int, error)

GetNumberMasters returns the number of redis nodes that are working as a master

func (*RedisFailoverChecker) GetRedisRevisionHash

func (r *RedisFailoverChecker) GetRedisRevisionHash(podName string, rFailover *redisfailoverv1.RedisFailover) (string, error)

GetRedisRevisionHash returns the statefulset uid for the pod

func (*RedisFailoverChecker) GetRedisesIPs

func (r *RedisFailoverChecker) GetRedisesIPs(rf *redisfailoverv1.RedisFailover) ([]string, error)

GetRedisesIPs returns the IPs of the Redis nodes

func (*RedisFailoverChecker) GetRedisesMasterPod

func (r *RedisFailoverChecker) GetRedisesMasterPod(rFailover *redisfailoverv1.RedisFailover) (string, error)

GetRedisesMasterPod returns pods names of the Redis slave nodes

func (*RedisFailoverChecker) GetRedisesSlavesPods

func (r *RedisFailoverChecker) GetRedisesSlavesPods(rf *redisfailoverv1.RedisFailover) ([]string, error)

GetRedisesSlavesPods returns pods names of the Redis slave nodes

func (*RedisFailoverChecker) GetSentinelsIPs

func (r *RedisFailoverChecker) GetSentinelsIPs(rf *redisfailoverv1.RedisFailover) ([]string, error)

GetSentinelsIPs returns the IPs of the Sentinel nodes

func (*RedisFailoverChecker) GetStatefulSetUpdateRevision

func (r *RedisFailoverChecker) GetStatefulSetUpdateRevision(rFailover *redisfailoverv1.RedisFailover) (string, error)

GetStatefulSetUpdateRevision returns current version for the statefulSet If the label don't exists, we return an empty value and no error, so previous versions don't break

func (*RedisFailoverChecker) IsClusterRunning added in v1.2.3

func (r *RedisFailoverChecker) IsClusterRunning(rFailover *redisfailoverv1.RedisFailover) bool

IsClusterRunning returns true if all the pods in the given redisfailover are Running

func (*RedisFailoverChecker) IsRedisRunning added in v1.2.3

func (r *RedisFailoverChecker) IsRedisRunning(rFailover *redisfailoverv1.RedisFailover) bool

IsRedisRunning returns true if all the pods are Running

func (*RedisFailoverChecker) IsSentinelRunning added in v1.2.3

func (r *RedisFailoverChecker) IsSentinelRunning(rFailover *redisfailoverv1.RedisFailover) bool

IsSentinelRunning returns true if all the pods are Running

type RedisFailoverClient

type RedisFailoverClient interface {
	EnsureSentinelService(rFailover *redisfailoverv1.RedisFailover, labels map[string]string, ownerRefs []metav1.OwnerReference) error
	EnsureSentinelConfigMap(rFailover *redisfailoverv1.RedisFailover, labels map[string]string, ownerRefs []metav1.OwnerReference) error
	EnsureSentinelDeployment(rFailover *redisfailoverv1.RedisFailover, labels map[string]string, ownerRefs []metav1.OwnerReference) error
	EnsureRedisStatefulset(rFailover *redisfailoverv1.RedisFailover, labels map[string]string, ownerRefs []metav1.OwnerReference) error
	EnsureRedisService(rFailover *redisfailoverv1.RedisFailover, labels map[string]string, ownerRefs []metav1.OwnerReference) error
	EnsureRedisShutdownConfigMap(rFailover *redisfailoverv1.RedisFailover, labels map[string]string, ownerRefs []metav1.OwnerReference) error
	EnsureRedisReadinessConfigMap(rFailover *redisfailoverv1.RedisFailover, labels map[string]string, ownerRefs []metav1.OwnerReference) error
	EnsureRedisConfigMap(rFailover *redisfailoverv1.RedisFailover, labels map[string]string, ownerRefs []metav1.OwnerReference) error
	EnsureNotPresentRedisService(rFailover *redisfailoverv1.RedisFailover) error
}

RedisFailoverClient has the minimumm methods that a Redis failover controller needs to satisfy in order to talk with K8s

type RedisFailoverHeal

type RedisFailoverHeal interface {
	MakeMaster(ip string, rFailover *redisfailoverv1.RedisFailover) error
	SetOldestAsMaster(rFailover *redisfailoverv1.RedisFailover) error
	SetMasterOnAll(masterIP string, rFailover *redisfailoverv1.RedisFailover) error
	SetExternalMasterOnAll(masterIP string, masterPort string, rFailover *redisfailoverv1.RedisFailover) error
	NewSentinelMonitor(ip string, monitor string, rFailover *redisfailoverv1.RedisFailover) error
	NewSentinelMonitorWithPort(ip string, monitor string, port string, rFailover *redisfailoverv1.RedisFailover) error
	RestoreSentinel(ip string) error
	SetSentinelCustomConfig(ip string, rFailover *redisfailoverv1.RedisFailover) error
	SetRedisCustomConfig(ip string, rFailover *redisfailoverv1.RedisFailover) error
	DeletePod(podName string, rFailover *redisfailoverv1.RedisFailover) error
}

RedisFailoverHeal defines the interface able to fix the problems on the redis failovers

type RedisFailoverHealer

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

RedisFailoverHealer is our implementation of RedisFailoverCheck interface

func NewRedisFailoverHealer

func NewRedisFailoverHealer(k8sService k8s.Services, redisClient redis.Client, logger log.Logger) *RedisFailoverHealer

NewRedisFailoverHealer creates an object of the RedisFailoverChecker struct

func (*RedisFailoverHealer) DeletePod

func (r *RedisFailoverHealer) DeletePod(podName string, rFailover *redisfailoverv1.RedisFailover) error

DeletePod delete a failing pod so kubernetes relaunch it again

func (*RedisFailoverHealer) MakeMaster

func (*RedisFailoverHealer) NewSentinelMonitor

func (r *RedisFailoverHealer) NewSentinelMonitor(ip string, monitor string, rf *redisfailoverv1.RedisFailover) error

NewSentinelMonitor changes the master that Sentinel has to monitor

func (*RedisFailoverHealer) NewSentinelMonitorWithPort added in v1.1.0

func (r *RedisFailoverHealer) NewSentinelMonitorWithPort(ip string, monitor string, monitorPort string, rf *redisfailoverv1.RedisFailover) error

NewSentinelMonitorWithPort changes the master that Sentinel has to monitor by the provided IP and Port

func (*RedisFailoverHealer) RestoreSentinel

func (r *RedisFailoverHealer) RestoreSentinel(ip string) error

RestoreSentinel clear the number of sentinels on memory

func (*RedisFailoverHealer) SetExternalMasterOnAll added in v1.1.0

func (r *RedisFailoverHealer) SetExternalMasterOnAll(masterIP, masterPort string, rf *redisfailoverv1.RedisFailover) error

SetExternalMasterOnAll puts all redis nodes as a slave of a given master outside of the current RedisFailover instance

func (*RedisFailoverHealer) SetMasterOnAll

func (r *RedisFailoverHealer) SetMasterOnAll(masterIP string, rf *redisfailoverv1.RedisFailover) error

SetMasterOnAll puts all redis nodes as a slave of a given master

func (*RedisFailoverHealer) SetOldestAsMaster

func (r *RedisFailoverHealer) SetOldestAsMaster(rf *redisfailoverv1.RedisFailover) error

SetOldestAsMaster puts all redis to the same master, choosen by order of appearance

func (*RedisFailoverHealer) SetRedisCustomConfig

func (r *RedisFailoverHealer) SetRedisCustomConfig(ip string, rf *redisfailoverv1.RedisFailover) error

SetRedisCustomConfig will call redis to set the configuration given in config

func (*RedisFailoverHealer) SetSentinelCustomConfig

func (r *RedisFailoverHealer) SetSentinelCustomConfig(ip string, rf *redisfailoverv1.RedisFailover) error

SetSentinelCustomConfig will call sentinel to set the configuration given in config

type RedisFailoverKubeClient

type RedisFailoverKubeClient struct {
	K8SService k8s.Services
	// contains filtered or unexported fields
}

RedisFailoverKubeClient implements the required methods to talk with kubernetes

func NewRedisFailoverKubeClient

func NewRedisFailoverKubeClient(k8sService k8s.Services, logger log.Logger, metricsClient metrics.Recorder) *RedisFailoverKubeClient

NewRedisFailoverKubeClient creates a new RedisFailoverKubeClient

func (*RedisFailoverKubeClient) EnsureNotPresentRedisService

func (r *RedisFailoverKubeClient) EnsureNotPresentRedisService(rf *redisfailoverv1.RedisFailover) error

EnsureNotPresentRedisService makes sure the redis service is not present

func (*RedisFailoverKubeClient) EnsureRedisConfigMap

func (r *RedisFailoverKubeClient) EnsureRedisConfigMap(rf *redisfailoverv1.RedisFailover, labels map[string]string, ownerRefs []metav1.OwnerReference) error

EnsureRedisConfigMap makes sure the Redis ConfigMap exists

func (*RedisFailoverKubeClient) EnsureRedisReadinessConfigMap

func (r *RedisFailoverKubeClient) EnsureRedisReadinessConfigMap(rf *redisfailoverv1.RedisFailover, labels map[string]string, ownerRefs []metav1.OwnerReference) error

EnsureRedisReadinessConfigMap makes sure the redis configmap with shutdown script exists

func (*RedisFailoverKubeClient) EnsureRedisService

func (r *RedisFailoverKubeClient) EnsureRedisService(rf *redisfailoverv1.RedisFailover, labels map[string]string, ownerRefs []metav1.OwnerReference) error

EnsureRedisService makes sure the redis statefulset exists

func (*RedisFailoverKubeClient) EnsureRedisShutdownConfigMap

func (r *RedisFailoverKubeClient) EnsureRedisShutdownConfigMap(rf *redisfailoverv1.RedisFailover, labels map[string]string, ownerRefs []metav1.OwnerReference) error

EnsureRedisShutdownConfigMap makes sure the redis configmap with shutdown script exists

func (*RedisFailoverKubeClient) EnsureRedisStatefulset

func (r *RedisFailoverKubeClient) EnsureRedisStatefulset(rf *redisfailoverv1.RedisFailover, labels map[string]string, ownerRefs []metav1.OwnerReference) error

EnsureRedisStatefulset makes sure the redis statefulset exists in the desired state

func (*RedisFailoverKubeClient) EnsureSentinelConfigMap

func (r *RedisFailoverKubeClient) EnsureSentinelConfigMap(rf *redisfailoverv1.RedisFailover, labels map[string]string, ownerRefs []metav1.OwnerReference) error

EnsureSentinelConfigMap makes sure the sentinel configmap exists

func (*RedisFailoverKubeClient) EnsureSentinelDeployment

func (r *RedisFailoverKubeClient) EnsureSentinelDeployment(rf *redisfailoverv1.RedisFailover, labels map[string]string, ownerRefs []metav1.OwnerReference) error

EnsureSentinelDeployment makes sure the sentinel deployment exists in the desired state

func (*RedisFailoverKubeClient) EnsureSentinelService

func (r *RedisFailoverKubeClient) EnsureSentinelService(rf *redisfailoverv1.RedisFailover, labels map[string]string, ownerRefs []metav1.OwnerReference) error

EnsureSentinelService makes sure the sentinel service exists

Jump to

Keyboard shortcuts

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