Documentation ¶
Overview ¶
Package mon provides methods for creating clusters of Ceph mons in Kubernetes, for monitoring the cluster's status, for taking corrective actions if the status is non-ideal, and for reporting mon cluster failures.
Index ¶
- Constants
- Variables
- func AdminSecretEnvVar() v1.EnvVar
- func ClusterNameEnvVar(name string) v1.EnvVar
- func EndpointEnvVar() v1.EnvVar
- func ExtractKey(contents string) (string, error)
- func FlattenMonEndpoints(mons map[string]*cephconfig.MonInfo) string
- func IsExternalHealthCheckUserAdmin(adminSecret string) bool
- func ParseMonEndpoints(input string) map[string]*cephconfig.MonInfo
- func PodSecurityContext() *v1.SecurityContext
- func PopulateExternalClusterInfo(context *clusterd.Context, namespace string) *cephconfig.ClusterInfo
- func SecretEnvVar() v1.EnvVar
- func UpdateCephDeploymentAndWait(context *clusterd.Context, deployment *apps.Deployment, ...) error
- func ValidateAndLoadExternalClusterSecrets(context *clusterd.Context, namespace string) (cephconfig.ExternalCred, error)
- func WriteConnectionConfig(context *clusterd.Context, clusterInfo *cephconfig.ClusterInfo) error
- type Cluster
- type HealthChecker
- type Mapping
- type NodeInfo
- type NodeUsage
- type SchedulingResult
Constants ¶
const ( // EndpointConfigMapName is the name of the configmap with mon endpoints EndpointConfigMapName = "rook-ceph-mon-endpoints" // EndpointDataKey is the name of the key inside the mon configmap to get the endpoints EndpointDataKey = "data" // MaxMonIDKey is the name of the max mon id used MaxMonIDKey = "maxMonId" // MappingKey is the name of the mapping for the mon->node and node->port MappingKey = "mapping" // AppName is the name of the secret storing cluster mon.admin key, fsid and name AppName = "rook-ceph-mon" // OperatorCreds is the name of the secret OperatorCreds = "rook-ceph-operator-creds" // AdminSecretName is the name of the admin secret AdminSecretName = "admin-secret" // DefaultMonCount Default mon count for a cluster DefaultMonCount = 3 // MaxMonCount Maximum allowed mon count for a cluster MaxMonCount = 9 // DefaultMsgr1Port is the default port Ceph mons use to communicate amongst themselves prior // to Ceph Nautilus. DefaultMsgr1Port int32 = 6789 // DefaultMsgr2Port is the listening port of the messenger v2 protocol introduced in Ceph // Nautilus. In Nautilus and a few Ceph releases after, Ceph can use both v1 and v2 protocols. DefaultMsgr2Port int32 = 3300 // Fallback pod anti affinity for mon pods to PreferredDuringSchedulingIgnoredDuringExecution // if not in a case (e.g. HostNetworking, not AllowMultiplePerHost) // needing RequiredDuringSchedulingIgnoredDuringExecution pod anti-affinity PreferredDuringScheduling = true )
Variables ¶
var ( // HealthCheckInterval is the interval to check if the mons are in quorum HealthCheckInterval = 45 * time.Second // MonOutTimeout is the duration to wait before removing/failover to a new mon pod MonOutTimeout = 600 * time.Second )
Functions ¶
func AdminSecretEnvVar ¶
AdminSecretEnvVar is the admin secret environment var
func ClusterNameEnvVar ¶
ClusterNameEnvVar is the cluster name environment var
func EndpointEnvVar ¶
EndpointEnvVar is the mon endpoint environment var
func ExtractKey ¶ added in v1.3.9
ExtractKey retrives mon secret key from the keyring file
func FlattenMonEndpoints ¶ added in v1.3.9
func FlattenMonEndpoints(mons map[string]*cephconfig.MonInfo) string
FlattenMonEndpoints returns a comma-delimited string of all mons and endpoints in the form <mon-name>=<mon-endpoint>
func IsExternalHealthCheckUserAdmin ¶ added in v1.3.9
IsExternalHealthCheckUserAdmin returns whether the external ceph user is admin or not
func ParseMonEndpoints ¶ added in v1.3.9
func ParseMonEndpoints(input string) map[string]*cephconfig.MonInfo
ParseMonEndpoints parses a flattened representation of mons and endpoints in the form <mon-name>=<mon-endpoint> and returns a list of Ceph mon configs.
func PodSecurityContext ¶ added in v1.3.9
func PodSecurityContext() *v1.SecurityContext
PodSecurityContext detects if the pod needs privileges to run
func PopulateExternalClusterInfo ¶ added in v1.3.9
func PopulateExternalClusterInfo(context *clusterd.Context, namespace string) *cephconfig.ClusterInfo
PopulateExternalClusterInfo Add validation in the code to fail if the external cluster has no OSDs keep waiting
func UpdateCephDeploymentAndWait ¶ added in v1.3.9
func UpdateCephDeploymentAndWait(context *clusterd.Context, deployment *apps.Deployment, namespace, daemonType, daemonName string, skipUpgradeChecks, continueUpgradeAfterChecksEvenIfNotHealthy bool) error
UpdateCephDeploymentAndWait verifies a deployment can be stopped or continued
func ValidateAndLoadExternalClusterSecrets ¶ added in v1.3.9
func ValidateAndLoadExternalClusterSecrets(context *clusterd.Context, namespace string) (cephconfig.ExternalCred, error)
ValidateAndLoadExternalClusterSecrets returns the secret value of the client health checker key
func WriteConnectionConfig ¶
func WriteConnectionConfig(context *clusterd.Context, clusterInfo *cephconfig.ClusterInfo) error
WriteConnectionConfig save monitor connection config to disk
Types ¶
type Cluster ¶
type Cluster struct { ClusterInfo *cephconfig.ClusterInfo Namespace string Keyring string Port int32 Network cephv1.NetworkSpec // contains filtered or unexported fields }
Cluster represents the Rook and environment configuration settings needed to set up Ceph mons.
func New ¶
func New(context *clusterd.Context, namespace, dataDirHostPath string, network cephv1.NetworkSpec, ownerRef metav1.OwnerReference, csiConfigMutex *sync.Mutex) *Cluster
New creates an instance of a mon cluster
func (*Cluster) Start ¶
func (c *Cluster) Start(clusterInfo *cephconfig.ClusterInfo, rookVersion string, cephVersion cephver.CephVersion, spec cephv1.ClusterSpec) (*cephconfig.ClusterInfo, error)
Start begins the process of running a cluster of Ceph mons.
type HealthChecker ¶
type HealthChecker struct {
// contains filtered or unexported fields
}
HealthChecker aggregates the mon/cluster info needed to check the health of the monitors
func NewHealthChecker ¶
func NewHealthChecker(monCluster *Cluster, clusterSpec *cephv1.ClusterSpec) *HealthChecker
NewHealthChecker creates a new HealthChecker object
func (*HealthChecker) Check ¶
func (hc *HealthChecker) Check(stopCh chan struct{})
Check periodically checks the health of the monitors
type Mapping ¶
Mapping is mon node and port mapping
func CreateOrLoadClusterInfo ¶
func CreateOrLoadClusterInfo(context *clusterd.Context, namespace string, ownerRef *metav1.OwnerReference) (*cephconfig.ClusterInfo, int, *Mapping, error)
CreateOrLoadClusterInfo constructs or loads a clusterinfo and returns it along with the maxMonID
func LoadClusterInfo ¶
func LoadClusterInfo(context *clusterd.Context, namespace string) (*cephconfig.ClusterInfo, int, *Mapping, error)
LoadClusterInfo constructs or loads a clusterinfo and returns it along with the maxMonID
type NodeUsage ¶ added in v1.3.9
type NodeUsage struct { Node *v1.Node // The number of monitor pods assigned to the node MonCount int // The node is available for scheduling monitor pods. This is equivalent to // evaluating k8sutil.ValidNode(node, cephv1.GetMonPlacement(c.spec.Placement)) MonValid bool }
NodeUsage is a mapping between a Node and computed metadata about the node that is used in monitor pod scheduling.