Documentation
¶
Overview ¶
+k8s:deepcopy-gen=package,register +k8s:openapi-gen=true +groupName=apps.kubeblocks.io
Package v1alpha1 contains API Schema definitions for the apps v1alpha1 API group +kubebuilder:object:generate=true +groupName=apps.kubeblocks.io
Package v1alpha1 contains API Schema definitions for the apps v1alpha1 API group
Index ¶
- Constants
- Variables
- func NewExposingCondition(ops *OpsRequest) *metav1.Condition
- func NewFailedCondition(ops *OpsRequest, err error) *metav1.Condition
- func NewHorizontalScalingCondition(ops *OpsRequest) *metav1.Condition
- func NewProgressingCondition(ops *OpsRequest) *metav1.Condition
- func NewReconfigureCondition(ops *OpsRequest) *metav1.Condition
- func NewReconfigureFailedCondition(ops *OpsRequest, err error) *metav1.Condition
- func NewReconfigureRunningCondition(ops *OpsRequest, conditionType string, configSpecName string, info ...string) *metav1.Condition
- func NewRestartingCondition(ops *OpsRequest) *metav1.Condition
- func NewStartCondition(ops *OpsRequest) *metav1.Condition
- func NewStopCondition(ops *OpsRequest) *metav1.Condition
- func NewSucceedCondition(ops *OpsRequest) *metav1.Condition
- func NewUpgradingCondition(ops *OpsRequest) *metav1.Condition
- func NewValidateFailedCondition(reason, message string) *metav1.Condition
- func NewValidatePassedCondition(opsRequestName string) *metav1.Condition
- func NewVerticalScalingCondition(ops *OpsRequest) *metav1.Condition
- func NewVolumeExpandingCondition(ops *OpsRequest) *metav1.Condition
- func RegisterWebhookManager(mgr manager.Manager)
- type AccessMode
- type AccountName
- type Affinity
- type BackupPolicy
- type BackupPolicyHook
- type BackupPolicyTemplate
- type BackupPolicyTemplateList
- type BackupPolicyTemplateSpec
- type BackupPolicyTemplateStatus
- type BackupRefSpec
- type BackupStatusUpdate
- type BackupStatusUpdateStage
- type BaseBackupType
- type BasePolicy
- type CPUConstraint
- type CfgFileFormat
- type CfgReloadType
- type ClassDefRef
- type Cluster
- func (r *Cluster) Default()
- func (r *Cluster) GetVolumeClaimNames(compName string, claimNames ...string) []string
- func (r *Cluster) SetupWebhookWithManager(mgr ctrl.Manager) error
- func (r *Cluster) ValidateCreate() error
- func (r *Cluster) ValidateDelete() error
- func (r *Cluster) ValidateUpdate(old runtime.Object) error
- type ClusterComponentDefinition
- type ClusterComponentPhase
- type ClusterComponentService
- type ClusterComponentSpec
- type ClusterComponentStatus
- func (r ClusterComponentStatus) GetMessage() ComponentMessageMap
- func (r ClusterComponentStatus) GetObjectMessage(objectKind, objectName string) string
- func (r *ClusterComponentStatus) SetMessage(messageMap ComponentMessageMap)
- func (r *ClusterComponentStatus) SetObjectMessage(objectKind, objectName, message string)
- type ClusterComponentVersion
- type ClusterComponentVolumeClaimTemplate
- type ClusterDefinition
- func (r *ClusterDefinition) Default()
- func (r *ClusterDefinition) GetComponentDefByName(compDefName string) *ClusterComponentDefinition
- func (r *ClusterDefinition) SetupWebhookWithManager(mgr ctrl.Manager) error
- func (r *ClusterDefinition) ValidateCreate() error
- func (r *ClusterDefinition) ValidateDelete() error
- func (r *ClusterDefinition) ValidateEnabledLogConfigs(compDefName string, enabledLogs []string) []string
- func (r *ClusterDefinition) ValidateUpdate(old runtime.Object) error
- type ClusterDefinitionList
- type ClusterDefinitionProbe
- type ClusterDefinitionProbeCMDs
- type ClusterDefinitionProbes
- type ClusterDefinitionSpec
- type ClusterDefinitionStatus
- type ClusterList
- type ClusterPhase
- type ClusterSpec
- func (r ClusterSpec) GetComponentByName(componentName string) *ClusterComponentSpec
- func (r ClusterSpec) GetComponentDefRefName(componentName string) string
- func (r ClusterSpec) GetDefNameMappingComponents() map[string][]ClusterComponentSpec
- func (r ClusterSpec) ValidateEnabledLogs(cd *ClusterDefinition) error
- type ClusterStatus
- type ClusterSwitchPolicy
- type ClusterVersion
- func (r *ClusterVersion) GetInconsistentComponentsInfo(clusterDef *ClusterDefinition) ([]string, []string)
- func (r *ClusterVersion) SetupWebhookWithManager(mgr ctrl.Manager) error
- func (r *ClusterVersion) ValidateCreate() error
- func (r *ClusterVersion) ValidateDelete() error
- func (r *ClusterVersion) ValidateUpdate(old runtime.Object) error
- type ClusterVersionList
- type ClusterVersionSpec
- type ClusterVersionStatus
- type CmdExecutorConfig
- type CommandExecutorEnvItem
- type CommandExecutorItem
- type CommonBackupPolicy
- type ComponentClass
- type ComponentClassDefinition
- type ComponentClassDefinitionList
- type ComponentClassDefinitionSpec
- type ComponentClassDefinitionStatus
- type ComponentClassGroup
- type ComponentClassInstance
- type ComponentClassSeries
- type ComponentConfigSpec
- type ComponentMessageMap
- type ComponentNameSet
- type ComponentOps
- type ComponentResourceConstraint
- type ComponentResourceConstraintList
- type ComponentResourceConstraintSpec
- type ComponentResourceKey
- type ComponentTemplateSpec
- type ConfigConstraint
- type ConfigConstraintList
- type ConfigConstraintPhase
- type ConfigConstraintSpec
- type ConfigConstraintStatus
- type Configuration
- type ConfigurationStatus
- type ConnectionCredentialKey
- type ConsensusMember
- type ConsensusMemberStatus
- type ConsensusSetSpec
- type ConsensusSetStatus
- type CustomLabelSpec
- type CustomParametersValidation
- type ExporterConfig
- type Expose
- type FormatterConfig
- type FormatterOptions
- type GVKResource
- type HScaleDataClonePolicyType
- type HorizontalScalePolicy
- type HorizontalScaling
- type IniConfig
- type Issuer
- type IssuerName
- type KBAccountType
- type LastComponentConfiguration
- type LastConfiguration
- type LetterCase
- type LogConfig
- type MemoryConstraint
- type MonitorConfig
- type OpsPhase
- type OpsRecorder
- type OpsRequest
- func (r *OpsRequest) GetComponentNameSet() ComponentNameSet
- func (r *OpsRequest) GetUpgradeComponentNameSet() ComponentNameSet
- func (r *OpsRequest) SetStatusCondition(condition metav1.Condition)
- func (r *OpsRequest) SetupWebhookWithManager(mgr ctrl.Manager) error
- func (r *OpsRequest) Validate(ctx context.Context, k8sClient client.Client, cluster *Cluster, isCreate bool) error
- func (r *OpsRequest) ValidateCreate() error
- func (r *OpsRequest) ValidateDelete() error
- func (r *OpsRequest) ValidateUpdate(old runtime.Object) error
- type OpsRequestBehaviour
- type OpsRequestComponentStatus
- type OpsRequestList
- type OpsRequestSpec
- func (r OpsRequestSpec) GetExposeComponentNameSet() ComponentNameSet
- func (r OpsRequestSpec) GetHorizontalScalingComponentNameSet() ComponentNameSet
- func (r OpsRequestSpec) GetReconfiguringComponentNameSet() ComponentNameSet
- func (r OpsRequestSpec) GetRestartComponentNameSet() ComponentNameSet
- func (r OpsRequestSpec) GetVerticalScalingComponentNameSet() ComponentNameSet
- func (r OpsRequestSpec) GetVolumeExpansionComponentNameSet() ComponentNameSet
- func (r OpsRequestSpec) ToExposeListToMap() map[string]Expose
- func (r OpsRequestSpec) ToHorizontalScalingListToMap() map[string]HorizontalScaling
- func (r OpsRequestSpec) ToVerticalScalingListToMap() map[string]VerticalScaling
- func (r OpsRequestSpec) ToVolumeExpansionListToMap() map[string]VolumeExpansion
- type OpsRequestStatus
- type OpsRequestVolumeClaimTemplate
- type OpsType
- type ParameterConfig
- type ParameterPair
- type PasswordConfig
- type PersistentVolumeClaimSpec
- type Phase
- type PodAntiAffinity
- type PointInTimeRefSpec
- type ProgressStatus
- type ProgressStatusDetail
- type ProvisionPolicy
- type ProvisionPolicyType
- type ProvisionScope
- type ProvisionSecretRef
- type ProvisionStatements
- type Reconfigure
- type ReconfiguringStatus
- type RefNamespaceName
- type ReloadOptions
- type ReplicationMemberStatus
- type ReplicationSetStatus
- type ReplicationSpec
- type ResourceConstraint
- type RestoreFromSpec
- type RetentionSpec
- type Schedule
- type SchedulePolicy
- type ServicePort
- type ServiceSpec
- type ShellTrigger
- type SignalType
- type SnapshotPolicy
- type SwitchCmdExecutorConfig
- type SwitchPolicy
- type SwitchPolicyType
- type SwitchStatements
- type SwitchStep
- type SwitchStepRole
- type SystemAccountConfig
- type SystemAccountSpec
- type TLSSecretRef
- type TPLScriptTrigger
- type TargetInstance
- type TenancyType
- type TerminationPolicyType
- type UnixSignalTrigger
- type UpdateStrategy
- type UpdatedParameters
- type Upgrade
- type UpgradePolicy
- type VersionsContext
- type VerticalScaling
- type VolumeExpansion
- type VolumeType
- type VolumeTypeSpec
- type WorkloadType
Constants ¶
const ( ConditionTypeProgressing = "Progressing" ConditionTypeValidated = "Validated" ConditionTypeSucceed = "Succeed" ConditionTypeFailed = "Failed" ConditionTypeRestarting = "Restarting" ConditionTypeVerticalScaling = "VerticalScaling" ConditionTypeHorizontalScaling = "HorizontalScaling" ConditionTypeVolumeExpanding = "VolumeExpanding" ConditionTypeReconfigure = "Reconfigure" ConditionTypeStop = "Stopping" ConditionTypeStart = "Starting" ConditionTypeVersionUpgrading = "VersionUpgrading" ConditionTypeExpose = "Exposing" ReasonReconfigureMerging = "ReconfigureMerging" ReasonReconfigureMerged = "ReconfigureMerged" ReasonReconfigureFailed = "ReconfigureFailed" ReasonReconfigureNoChanged = "ReconfigureNoChanged" ReasonReconfigureSucceed = "ReconfigureSucceed" ReasonReconfigureRunning = "ReconfigureRunning" ReasonClusterPhaseMismatch = "ClusterPhaseMismatch" ReasonOpsTypeNotSupported = "OpsTypeNotSupported" ReasonValidateFailed = "ValidateFailed" ReasonClusterNotFound = "ClusterNotFound" ReasonOpsRequestFailed = "OpsRequestFailed" )
const ( APIVersion = "apps.kubeblocks.io/v1alpha1" ClusterVersionKind = "ClusterVersion" ClusterDefinitionKind = "ClusterDefinition" ClusterKind = "Cluster" OpsRequestKind = "OpsRequestKind" )
const ( // define the cluster condition type ConditionTypeLatestOpsRequestProcessed = "LatestOpsRequestProcessed" // ConditionTypeLatestOpsRequestProcessed describes whether the latest OpsRequest that affect the cluster lifecycle has been processed. ConditionTypeHaltRecovery = "HaltRecovery" // ConditionTypeHaltRecovery describe Halt recovery processing stage ConditionTypeProvisioningStarted = "ProvisioningStarted" // ConditionTypeProvisioningStarted the operator starts resource provisioning to create or change the cluster ConditionTypeApplyResources = "ApplyResources" // ConditionTypeApplyResources the operator start to apply resources to create or change the cluster ConditionTypeReplicasReady = "ReplicasReady" // ConditionTypeReplicasReady all pods of components are ready ConditionTypeReady = "Ready" // ConditionTypeReady all components are running )
const ( KBAccountInvalid KBAccountType = 0 KBAccountAdmin = 1 KBAccountDataprotection = 1 << 1 KBAccountProbe = 1 << 2 KBAccountMonitor = 1 << 3 KBAccountReplicator = 1 << 4 KBAccountMAX = KBAccountReplicator // KBAccountMAX indicates the max value of KBAccountType, used for validation. )
System accounts represented in bit.
const DefaultRoleProbeTimeoutAfterPodsReady int32 = 60
DefaultRoleProbeTimeoutAfterPodsReady the default role probe timeout for application when all pods of component are ready. default values are 60 seconds.
Variables ¶
var ( // GroupVersion is group version used to register these objects GroupVersion = schema.GroupVersion{Group: "apps.kubeblocks.io", Version: "v1alpha1"} // SchemeBuilder is used to add go types to the GroupVersionKind scheme SchemeBuilder = &scheme.Builder{GroupVersion: GroupVersion} // AddToScheme adds the types in this group-version to the given scheme. AddToScheme = SchemeBuilder.AddToScheme )
var DefaultLeader = ConsensusMember{ Name: "leader", AccessMode: ReadWrite, }
var ( // OpsRequestBehaviourMapper records the opsRequest behaviour according to the OpsType. OpsRequestBehaviourMapper = map[OpsType]OpsRequestBehaviour{} )
log is for logging in this package.
var WorkloadTypes = []string{"Stateless", "Stateful", "Consensus", "Replication"}
Functions ¶
func NewExposingCondition ¶
func NewExposingCondition(ops *OpsRequest) *metav1.Condition
func NewFailedCondition ¶
func NewFailedCondition(ops *OpsRequest, err error) *metav1.Condition
NewFailedCondition creates a condition that the OpsRequest processing failed
func NewHorizontalScalingCondition ¶
func NewHorizontalScalingCondition(ops *OpsRequest) *metav1.Condition
NewHorizontalScalingCondition creates a condition that the OpsRequest starts to horizontal scale cluster
func NewProgressingCondition ¶
func NewProgressingCondition(ops *OpsRequest) *metav1.Condition
NewProgressingCondition the controller is progressing the OpsRequest
func NewReconfigureCondition ¶
func NewReconfigureCondition(ops *OpsRequest) *metav1.Condition
NewReconfigureCondition creates a condition that the OpsRequest updating component configuration
func NewReconfigureFailedCondition ¶
func NewReconfigureFailedCondition(ops *OpsRequest, err error) *metav1.Condition
NewReconfigureFailedCondition creates a condition for the failed reconfigure.
func NewReconfigureRunningCondition ¶
func NewReconfigureRunningCondition(ops *OpsRequest, conditionType string, configSpecName string, info ...string) *metav1.Condition
NewReconfigureRunningCondition creates a condition that the OpsRequest reconfigure workflow
func NewRestartingCondition ¶
func NewRestartingCondition(ops *OpsRequest) *metav1.Condition
NewRestartingCondition creates a condition that the operation starts to restart components
func NewStartCondition ¶
func NewStartCondition(ops *OpsRequest) *metav1.Condition
NewStartCondition creates a condition that the OpsRequest starts the cluster.
func NewStopCondition ¶
func NewStopCondition(ops *OpsRequest) *metav1.Condition
NewStopCondition creates a condition that the OpsRequest starts to stop the cluster.
func NewSucceedCondition ¶
func NewSucceedCondition(ops *OpsRequest) *metav1.Condition
NewSucceedCondition creates a condition that the controller has successfully processed the OpsRequest
func NewUpgradingCondition ¶
func NewUpgradingCondition(ops *OpsRequest) *metav1.Condition
NewUpgradingCondition creates a condition that the OpsRequest starts to upgrade the cluster version
func NewValidateFailedCondition ¶
NewValidateFailedCondition creates a condition that the operation validation.
func NewValidatePassedCondition ¶
NewValidatePassedCondition creates a condition that the operation validation.
func NewVerticalScalingCondition ¶
func NewVerticalScalingCondition(ops *OpsRequest) *metav1.Condition
NewVerticalScalingCondition creates a condition that the OpsRequest starts to vertical scale cluster
func NewVolumeExpandingCondition ¶
func NewVolumeExpandingCondition(ops *OpsRequest) *metav1.Condition
NewVolumeExpandingCondition creates a condition that the OpsRequest starts to expand volume
func RegisterWebhookManager ¶
Types ¶
type AccessMode ¶
type AccessMode string
AccessMode defines SVC access mode enums. +enum +kubebuilder:validation:Enum={None,Readonly,ReadWrite}
const ( ReadWrite AccessMode = "ReadWrite" Readonly AccessMode = "Readonly" None AccessMode = "None" )
type AccountName ¶
type AccountName string
AccountName defines system account names. +enum +kubebuilder:validation:Enum={kbadmin,kbdataprotection,kbprobe,kbmonitoring,kbreplicator}
const ( AdminAccount AccountName = "kbadmin" DataprotectionAccount AccountName = "kbdataprotection" ProbeAccount AccountName = "kbprobe" MonitorAccount AccountName = "kbmonitoring" ReplicatorAccount AccountName = "kbreplicator" )
func (AccountName) GetAccountID ¶
func (r AccountName) GetAccountID() KBAccountType
type Affinity ¶
type Affinity struct {
// podAntiAffinity describes the anti-affinity level of pods within a component.
// Preferred means try spread pods by `TopologyKeys`.
// Required means must spread pods by `TopologyKeys`.
// +kubebuilder:default=Preferred
// +optional
PodAntiAffinity PodAntiAffinity `json:"podAntiAffinity,omitempty"`
// topologyKey is the key of node labels.
// Nodes that have a label with this key and identical values are considered to be in the same topology.
// It's used as the topology domain for pod anti-affinity and pod spread constraint.
// Some well-known label keys, such as "kubernetes.io/hostname" and "topology.kubernetes.io/zone"
// are often used as TopologyKey, as well as any other custom label key.
// +listType=set
// +optional
TopologyKeys []string `json:"topologyKeys,omitempty"`
// nodeLabels describes that pods must be scheduled to the nodes with the specified node labels.
// +optional
NodeLabels map[string]string `json:"nodeLabels,omitempty"`
// tenancy describes how pods are distributed across node.
// SharedNode means multiple pods may share the same node.
// DedicatedNode means each pod runs on their own dedicated node.
// +kubebuilder:default=SharedNode
// +optional
Tenancy TenancyType `json:"tenancy,omitempty"`
}
type BackupPolicy ¶
type BackupPolicy struct {
// componentDefRef references componentDef defined in ClusterDefinition spec.
// +kubebuilder:validation:Required
// +kubebuilder:validation:MaxLength=63
// +kubebuilder:validation:Pattern:=`^[a-z0-9]([a-z0-9\.\-]*[a-z0-9])?$`
ComponentDefRef string `json:"componentDefRef"`
// retention describe how long the Backup should be retained. if not set, will be retained forever.
// +optional
Retention *RetentionSpec `json:"retention,omitempty"`
// schedule policy for backup.
// +optional
Schedule Schedule `json:"schedule,omitempty"`
// the policy for snapshot backup.
// +optional
Snapshot *SnapshotPolicy `json:"snapshot,omitempty"`
// the policy for datafile backup.
// +optional
Datafile *CommonBackupPolicy `json:"datafile,omitempty"`
// the policy for logfile backup.
// +optional
Logfile *CommonBackupPolicy `json:"logfile,omitempty"`
}
type BackupPolicyHook ¶
type BackupPolicyHook struct {
// pre backup to perform commands
// +optional
PreCommands []string `json:"preCommands,omitempty"`
// post backup to perform commands
// +optional
PostCommands []string `json:"postCommands,omitempty"`
// exec command with image
// +optional
Image string `json:"image,omitempty"`
// which container can exec command
// +optional
ContainerName string `json:"containerName,omitempty"`
}
BackupPolicyHook defines for the database execute commands before and after backup.
type BackupPolicyTemplate ¶
type BackupPolicyTemplate struct {
metav1.TypeMeta `json:",inline"`
metav1.ObjectMeta `json:"metadata,omitempty"`
Spec BackupPolicyTemplateSpec `json:"spec,omitempty"`
Status BackupPolicyTemplateStatus `json:"status,omitempty"`
}
BackupPolicyTemplate is the Schema for the BackupPolicyTemplates API (defined by provider)
type BackupPolicyTemplateList ¶
type BackupPolicyTemplateList struct {
metav1.TypeMeta `json:",inline"`
metav1.ListMeta `json:"metadata,omitempty"`
Items []BackupPolicyTemplate `json:"items"`
}
BackupPolicyTemplateList contains a list of BackupPolicyTemplate
type BackupPolicyTemplateSpec ¶
type BackupPolicyTemplateSpec struct {
// clusterDefinitionRef references ClusterDefinition name, this is an immutable attribute.
// +kubebuilder:validation:Required
// +kubebuilder:validation:Pattern:=`^[a-z0-9]([a-z0-9\.\-]*[a-z0-9])?$`
ClusterDefRef string `json:"clusterDefinitionRef"`
// backupPolicies is a list of backup policy template for the specified componentDefinition.
// +patchMergeKey=componentDefRef
// +patchStrategy=merge,retainKeys
// +listType=map
// +listMapKey=componentDefRef
// +kubebuilder:validation:Required
// +kubebuilder:validation:MinItems=1
BackupPolicies []BackupPolicy `json:"backupPolicies"`
// Identifier is a unique identifier for this BackupPolicyTemplate.
// this identifier will be the suffix of the automatically generated backupPolicy name.
// and must be added when multiple BackupPolicyTemplates exist,
// otherwise the generated backupPolicy override will occur.
// +optional
// +kubebuilder:validation:MaxLength=20
Identifier string `json:"identifier,omitempty"`
}
BackupPolicyTemplateSpec defines the desired state of BackupPolicyTemplate
type BackupPolicyTemplateStatus ¶
type BackupPolicyTemplateStatus struct {
}
BackupPolicyTemplateStatus defines the observed state of BackupPolicyTemplate
type BackupRefSpec ¶
type BackupRefSpec struct {
// specify a reference backup to restore
// +optional
Ref RefNamespaceName `json:"ref,omitempty"`
}
type BackupStatusUpdate ¶
type BackupStatusUpdate struct {
// specify the json path of backup object for patch.
// example: manifests.backupLog -- means patch the backup json path of status.manifests.backupLog.
// +optional
Path string `json:"path,omitempty"`
// which container name that kubectl can execute.
// +optional
ContainerName string `json:"containerName,omitempty"`
// the shell Script commands to collect backup status metadata.
// The script must exist in the container of ContainerName and the output format must be set to JSON.
// Note that outputting to stderr may cause the result format to not be in JSON.
// +optional
Script string `json:"script,omitempty"`
// when to update the backup status, pre: before backup, post: after backup
// +optional
UpdateStage BackupStatusUpdateStage `json:"updateStage,omitempty"`
}
type BackupStatusUpdateStage ¶
type BackupStatusUpdateStage string
BackupStatusUpdateStage defines the stage of backup status update. +enum +kubebuilder:validation:Enum={pre,post}
type BaseBackupType ¶
type BaseBackupType string
BaseBackupType the base backup type, keep synchronized with the BaseBackupType of the data protection API. +enum +kubebuilder:validation:Enum={full,snapshot}
type BasePolicy ¶
type BasePolicy struct {
// target instance for backup.
// +optional
Target TargetInstance `json:"target"`
// the number of automatic backups to retain. Value must be non-negative integer.
// 0 means NO limit on the number of backups.
// +kubebuilder:default=7
// +optional
BackupsHistoryLimit int32 `json:"backupsHistoryLimit,omitempty"`
// count of backup stop retries on fail.
// +optional
OnFailAttempted int32 `json:"onFailAttempted,omitempty"`
// define how to update metadata for backup status.
// +optional
BackupStatusUpdates []BackupStatusUpdate `json:"backupStatusUpdates,omitempty"`
}
type CPUConstraint ¶
type CPUConstraint struct {
// The maximum count of vcpu cores, [Min, Max] defines a range for valid vcpu cores, and the value in this range
// must be multiple times of Step. It's useful to define a large number of valid values without defining them one by
// one. Please see the documentation for Step for some examples.
// If Slots is specified, Max, Min, and Step are ignored
// +optional
Max *resource.Quantity `json:"max,omitempty"`
// The minimum count of vcpu cores, [Min, Max] defines a range for valid vcpu cores, and the value in this range
// must be multiple times of Step. It's useful to define a large number of valid values without defining them one by
// one. Please see the documentation for Step for some examples.
// If Slots is specified, Max, Min, and Step are ignored
// +optional
Min *resource.Quantity `json:"min,omitempty"`
// The minimum granularity of vcpu cores, [Min, Max] defines a range for valid vcpu cores and the value in this range must be
// multiple times of Step.
// For example:
// 1. Min is 2, Max is 8, Step is 2, and the valid vcpu core is {2, 4, 6, 8}.
// 2. Min is 0.5, Max is 2, Step is 0.5, and the valid vcpu core is {0.5, 1, 1.5, 2}.
// +optional
Step *resource.Quantity `json:"step,omitempty"`
// The valid vcpu cores, it's useful if you want to define valid vcpu cores explicitly.
// If Slots is specified, Max, Min, and Step are ignored
// +optional
Slots []resource.Quantity `json:"slots,omitempty"`
}
type CfgFileFormat ¶
type CfgFileFormat string
CfgFileFormat defines formatter of configuration files. +enum +kubebuilder:validation:Enum={xml,ini,yaml,json,hcl,dotenv,toml,properties,redis}
const ( Ini CfgFileFormat = "ini" YAML CfgFileFormat = "yaml" JSON CfgFileFormat = "json" XML CfgFileFormat = "xml" HCL CfgFileFormat = "hcl" Dotenv CfgFileFormat = "dotenv" TOML CfgFileFormat = "toml" Properties CfgFileFormat = "properties" RedisCfg CfgFileFormat = "redis" )
type CfgReloadType ¶
type CfgReloadType string
CfgReloadType defines reload method. +enum
const ( UnixSignalType CfgReloadType = "signal" SQLType CfgReloadType = "sql" ShellType CfgReloadType = "exec" HTTPType CfgReloadType = "http" TPLScriptType CfgReloadType = "tpl" )
type ClassDefRef ¶
type Cluster ¶
type Cluster struct {
metav1.TypeMeta `json:",inline"`
metav1.ObjectMeta `json:"metadata,omitempty"`
Spec ClusterSpec `json:"spec,omitempty"`
Status ClusterStatus `json:"status,omitempty"`
}
Cluster is the Schema for the clusters API.
func (*Cluster) Default ¶
func (r *Cluster) Default()
Default set default value by implements webhook.Defaulter so a webhook will be registered for the type
func (*Cluster) GetVolumeClaimNames ¶
GetVolumeClaimNames gets all PVC names of component compName.
r.Spec.GetComponentByName(compName).VolumeClaimTemplates[*].Name will be used if no claimNames provided
nil return if: 1. component compName not found or 2. len(VolumeClaimTemplates)==0 or 3. any claimNames not found
func (*Cluster) SetupWebhookWithManager ¶
func (*Cluster) ValidateCreate ¶
ValidateCreate implements webhook.Validator so a webhook will be registered for the type
func (*Cluster) ValidateDelete ¶
ValidateDelete implements webhook.Validator so a webhook will be registered for the type
type ClusterComponentDefinition ¶
type ClusterComponentDefinition struct {
// name of the component, it can be any valid string.
// +kubebuilder:validation:Required
// +kubebuilder:validation:MaxLength=18
// +kubebuilder:validation:Pattern:=`^[a-z0-9]([a-z0-9\.\-]*[a-z0-9])?$`
Name string `json:"name"`
// The description of component definition.
// +optional
Description string `json:"description,omitempty"`
// workloadType defines type of the workload.
// Stateless is a stateless workload type used to describe stateless applications.
// Stateful is a stateful workload type used to describe common stateful applications.
// Consensus is a stateful workload type used to describe applications based on consensus protocols, common consensus protocols such as raft and paxos.
// Replication is a stateful workload type used to describe applications based on the primary-secondary data replication protocol.
// +kubebuilder:validation:Required
WorkloadType WorkloadType `json:"workloadType"`
// characterType defines well-known database component name, such as mongos(mongodb), proxy(redis), mariadb(mysql)
// KubeBlocks will generate proper monitor configs for well-known characterType when builtIn is true.
// +optional
CharacterType string `json:"characterType,omitempty"`
// Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%).
// Absolute number is calculated from percentage by rounding down. This value is ignored
// if workloadType is Consensus.
// +kubebuilder:validation:XIntOrString
// +optional
MaxUnavailable *intstr.IntOrString `json:"maxUnavailable,omitempty"`
// The configSpec field provided by provider, and
// finally this configTemplateRefs will be rendered into the user's own configuration file according to the user's cluster.
// +optional
// +patchMergeKey=name
// +patchStrategy=merge,retainKeys
// +listType=map
// +listMapKey=name
ConfigSpecs []ComponentConfigSpec `json:"configSpecs,omitempty"`
// The scriptSpec field provided by provider, and
// finally this configTemplateRefs will be rendered into the user's own configuration file according to the user's cluster.
// +optional
// +patchMergeKey=name
// +patchStrategy=merge,retainKeys
// +listType=map
// +listMapKey=name
// +optional
ScriptSpecs []ComponentTemplateSpec `json:"scriptSpecs,omitempty"`
// probes setting for healthy checks.
// +optional
Probes *ClusterDefinitionProbes `json:"probes,omitempty"`
// monitor is monitoring config which provided by provider.
// +optional
Monitor *MonitorConfig `json:"monitor,omitempty"`
// logConfigs is detail log file config which provided by provider.
// +optional
// +patchMergeKey=name
// +patchStrategy=merge,retainKeys
// +listType=map
// +listMapKey=name
LogConfigs []LogConfig `json:"logConfigs,omitempty" patchStrategy:"merge,retainKeys" patchMergeKey:"name"`
// podSpec define pod spec template of the cluster component.
// +kubebuilder:pruning:PreserveUnknownFields
// +optional
PodSpec *corev1.PodSpec `json:"podSpec,omitempty"`
// service defines the behavior of a service spec.
// provide read-write service when WorkloadType is Consensus.
// +optional
Service *ServiceSpec `json:"service,omitempty"`
// consensusSpec defines consensus related spec if workloadType is Consensus, required if workloadType is Consensus.
// +optional
ConsensusSpec *ConsensusSetSpec `json:"consensusSpec,omitempty"`
// replicationSpec defines replication related spec if workloadType is Replication, required if workloadType is Replication.
// +optional
ReplicationSpec *ReplicationSpec `json:"replicationSpec,omitempty"`
// horizontalScalePolicy controls the behavior of horizontal scale.
// +optional
HorizontalScalePolicy *HorizontalScalePolicy `json:"horizontalScalePolicy,omitempty"`
// Statement to create system account.
// +optional
SystemAccounts *SystemAccountSpec `json:"systemAccounts,omitempty"`
// volumeTypes is used to describe the purpose of the volumes
// mapping the name of the VolumeMounts in the PodSpec.Container field,
// such as data volume, log volume, etc.
// When backing up the volume, the volume can be correctly backed up
// according to the volumeType.
//
// For example:
// `name: data, type: data` means that the volume named `data` is used to store `data`.
// `name: binlog, type: log` means that the volume named `binlog` is used to store `log`.
//
// NOTE:
// When volumeTypes is not defined, the backup function will not be supported,
// even if a persistent volume has been specified.
// +listType=map
// +listMapKey=name
// +optional
VolumeTypes []VolumeTypeSpec `json:"volumeTypes,omitempty"`
// customLabelSpecs is used for custom label tags which you want to add to the component resources.
// +listType=map
// +listMapKey=key
// +optional
CustomLabelSpecs []CustomLabelSpec `json:"customLabelSpecs,omitempty"`
}
ClusterComponentDefinition provides a workload component specification template, with attributes that strongly work with stateful workloads and day-2 operations behaviors.
type ClusterComponentPhase ¶
type ClusterComponentPhase string
ClusterComponentPhase defines the Cluster CR .status.components.phase +enum +kubebuilder:validation:Enum={Running,Stopped,Failed,Abnormal,Creating,Updating}
const ( RunningClusterCompPhase ClusterComponentPhase = "Running" StoppedClusterCompPhase ClusterComponentPhase = "Stopped" FailedClusterCompPhase ClusterComponentPhase = "Failed" AbnormalClusterCompPhase ClusterComponentPhase = "Abnormal" // Abnormal is a sub-state of failed, where one or more workload pods is not in "Running" phase. SpecReconcilingClusterCompPhase ClusterComponentPhase = "Updating" CreatingClusterCompPhase ClusterComponentPhase = "Creating" )
func GetComponentTerminalPhases ¶
func GetComponentTerminalPhases() []ClusterComponentPhase
GetComponentTerminalPhases return Cluster's component terminal phases.
type ClusterComponentService ¶
type ClusterComponentService struct {
// Service name
// +kubebuilder:validation:Required
// +kubebuilder:validation:MaxLength=15
Name string `json:"name"`
// serviceType determines how the Service is exposed. Valid
// options are ClusterIP, NodePort, and LoadBalancer.
// "ClusterIP" allocates a cluster-internal IP address for load-balancing
// to endpoints. Endpoints are determined by the selector or if that is not
// specified, they are determined by manual construction of an Endpoints object or
// EndpointSlice objects. If clusterIP is "None", no virtual IP is
// allocated and the endpoints are published as a set of endpoints rather
// than a virtual IP.
// "NodePort" builds on ClusterIP and allocates a port on every node which
// routes to the same endpoints as the clusterIP.
// "LoadBalancer" builds on NodePort and creates an external load-balancer
// (if supported in the current cloud) which routes to the same endpoints
// as the clusterIP.
// More info: https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services-service-types.
// +kubebuilder:default=ClusterIP
// +kubebuilder:validation:Enum={ClusterIP,NodePort,LoadBalancer}
// +kubebuilder:pruning:PreserveUnknownFields
// +optional
ServiceType corev1.ServiceType `json:"serviceType,omitempty"`
// If ServiceType is LoadBalancer, cloud provider related parameters can be put here
// More info: https://kubernetes.io/docs/concepts/services-networking/service/#loadbalancer.
// +optional
Annotations map[string]string `json:"annotations,omitempty"`
}
type ClusterComponentSpec ¶
type ClusterComponentSpec struct {
// name defines cluster's component name.
// +kubebuilder:validation:Required
// +kubebuilder:validation:MaxLength=15
// +kubebuilder:validation:Pattern:=`^[a-z0-9]([a-z0-9\.\-]*[a-z0-9])?$`
Name string `json:"name"`
// componentDefRef references the componentDef defined in ClusterDefinition spec.
// +kubebuilder:validation:Required
// +kubebuilder:validation:MaxLength=63
// +kubebuilder:validation:Pattern:=`^[a-z0-9]([a-z0-9\.\-]*[a-z0-9])?$`
ComponentDefRef string `json:"componentDefRef"`
// classDefRef references the class defined in ComponentClassDefinition.
// +optional
ClassDefRef *ClassDefRef `json:"classDefRef,omitempty"`
// monitor is a switch to enable monitoring and is set as false by default.
// KubeBlocks provides an extension mechanism to support component level monitoring,
// which will scrape metrics auto or manually from servers in component and export
// metrics to Time Series Database.
// +kubebuilder:default=false
// +optional
Monitor bool `json:"monitor,omitempty"`
// enabledLogs indicates which log file takes effect in the database cluster.
// element is the log type which is defined in cluster definition logConfig.name,
// and will set relative variables about this log type in database kernel.
// +listType=set
// +optional
EnabledLogs []string `json:"enabledLogs,omitempty"`
// Component replicas. The default value is used in ClusterDefinition spec if not specified.
// +kubebuilder:validation:Required
// +kubebuilder:validation:Minimum=0
// +kubebuilder:default=1
Replicas int32 `json:"replicas"`
// affinity describes affinities specified by users.
// +optional
Affinity *Affinity `json:"affinity,omitempty"`
// Component tolerations will override ClusterSpec.Tolerations if specified.
// +kubebuilder:pruning:PreserveUnknownFields
// +optional
Tolerations []corev1.Toleration `json:"tolerations,omitempty"`
// Resources requests and limits of workload.
// +kubebuilder:pruning:PreserveUnknownFields
// +optional
Resources corev1.ResourceRequirements `json:"resources,omitempty"`
// volumeClaimTemplates information for statefulset.spec.volumeClaimTemplates.
// +optional
// +patchMergeKey=name
// +patchStrategy=merge,retainKeys
VolumeClaimTemplates []ClusterComponentVolumeClaimTemplate `json:"volumeClaimTemplates,omitempty" patchStrategy:"merge,retainKeys" patchMergeKey:"name"`
// Services expose endpoints that can be accessed by clients.
// +optional
Services []ClusterComponentService `json:"services,omitempty"`
// primaryIndex determines which index is primary when workloadType is Replication. Index number starts from zero.
// +kubebuilder:validation:Minimum=0
// +optional
PrimaryIndex *int32 `json:"primaryIndex,omitempty"`
// switchPolicy defines the strategy for switchover and failover when workloadType is Replication.
// +optional
SwitchPolicy *ClusterSwitchPolicy `json:"switchPolicy,omitempty"`
// Enables or disables TLS certs.
// +optional
TLS bool `json:"tls,omitempty"`
// issuer defines provider context for TLS certs.
// required when TLS enabled
// +optional
Issuer *Issuer `json:"issuer,omitempty"`
// serviceAccountName is the name of the ServiceAccount that running component depends on.
// +optional
ServiceAccountName string `json:"serviceAccountName,omitempty"`
}
func (*ClusterComponentSpec) GetPrimaryIndex ¶
func (r *ClusterComponentSpec) GetPrimaryIndex() int32
GetPrimaryIndex provides safe operation get ClusterComponentSpec.PrimaryIndex, if value is nil, it's treated as 0.
func (*ClusterComponentSpec) ToVolumeClaimTemplates ¶
func (r *ClusterComponentSpec) ToVolumeClaimTemplates() []corev1.PersistentVolumeClaimTemplate
ToVolumeClaimTemplates convert r.VolumeClaimTemplates to []corev1.PersistentVolumeClaimTemplate.
type ClusterComponentStatus ¶
type ClusterComponentStatus struct {
// phase describes the phase of the component and the detail information of the phases are as following:
// Running: the component is running. [terminal state]
// Stopped: the component is stopped, as no running pod. [terminal state]
// Failed: the component is unavailable, i.e. all pods are not ready for Stateless/Stateful component and
// Leader/Primary pod is not ready for Consensus/Replication component. [terminal state]
// Abnormal: the component is running but part of its pods are not ready.
// Leader/Primary pod is ready for Consensus/Replication component. [terminal state]
// Creating: the component has entered creating process.
// Updating: the component has entered updating process, triggered by Spec. updated.
Phase ClusterComponentPhase `json:"phase,omitempty"`
// message records the component details message in current phase.
// Keys are podName or deployName or statefulSetName. The format is `ObjectKind/Name`.
// +optional
Message ComponentMessageMap `json:"message,omitempty"`
// podsReady checks if all pods of the component are ready.
// +optional
PodsReady *bool `json:"podsReady,omitempty"`
// podsReadyTime what time point of all component pods are ready,
// this time is the ready time of the last component pod.
// +optional
PodsReadyTime *metav1.Time `json:"podsReadyTime,omitempty"`
// consensusSetStatus specifies the mapping of role and pod name.
// +optional
ConsensusSetStatus *ConsensusSetStatus `json:"consensusSetStatus,omitempty"`
// replicationSetStatus specifies the mapping of role and pod name.
// +optional
ReplicationSetStatus *ReplicationSetStatus `json:"replicationSetStatus,omitempty"`
}
ClusterComponentStatus records components status.
func (ClusterComponentStatus) GetMessage ¶
func (r ClusterComponentStatus) GetMessage() ComponentMessageMap
GetMessage gets message map deep copy object.
func (ClusterComponentStatus) GetObjectMessage ¶
func (r ClusterComponentStatus) GetObjectMessage(objectKind, objectName string) string
GetObjectMessage gets the k8s workload message in component status message map
func (*ClusterComponentStatus) SetMessage ¶
func (r *ClusterComponentStatus) SetMessage(messageMap ComponentMessageMap)
SetMessage overrides message map object.
func (*ClusterComponentStatus) SetObjectMessage ¶
func (r *ClusterComponentStatus) SetObjectMessage(objectKind, objectName, message string)
SetObjectMessage sets K8s workload message to component status message map.
type ClusterComponentVersion ¶
type ClusterComponentVersion struct {
// componentDefRef reference one of the cluster component definition names in ClusterDefinition API (spec.componentDefs.name).
// +kubebuilder:validation:Required
// +kubebuilder:validation:MaxLength=63
// +kubebuilder:validation:Pattern:=`^[a-z0-9]([a-z0-9\.\-]*[a-z0-9])?$`
ComponentDefRef string `json:"componentDefRef"`
// configSpecs defines a configuration extension mechanism to handle configuration differences between versions,
// the configTemplateRefs field, together with configTemplateRefs in the ClusterDefinition,
// determines the final configuration file.
// +optional
// +patchMergeKey=name
// +patchStrategy=merge,retainKeys
// +listType=map
// +listMapKey=name
ConfigSpecs []ComponentConfigSpec `json:"configSpecs,omitempty" patchStrategy:"merge,retainKeys" patchMergeKey:"name"`
// clientImage define image for the component to connect database or engines.
// This value override ClusterDefinition.spec.componentDefs.systemAccountSpec.cmdExecutorConfig.image. [EXPERIMENTAL]
// +optional
ClientImage string `json:"clientImage,omitempty"`
// versionContext defines containers images' context for component versions,
// this value replaces ClusterDefinition.spec.componentDefs.podSpec.[initContainers | containers]
VersionsCtx VersionsContext `json:"versionsContext"`
}
ClusterComponentVersion is an application version component spec.
type ClusterComponentVolumeClaimTemplate ¶
type ClusterComponentVolumeClaimTemplate struct {
// Reference `ClusterDefinition.spec.componentDefs.containers.volumeMounts.name`.
// +kubebuilder:validation:Required
Name string `json:"name"`
// spec defines the desired characteristics of a volume requested by a pod author.
// +optional
Spec PersistentVolumeClaimSpec `json:"spec,omitempty"`
}
type ClusterDefinition ¶
type ClusterDefinition struct {
metav1.TypeMeta `json:",inline"`
metav1.ObjectMeta `json:"metadata,omitempty"`
Spec ClusterDefinitionSpec `json:"spec,omitempty"`
Status ClusterDefinitionStatus `json:"status,omitempty"`
}
ClusterDefinition is the Schema for the clusterdefinitions API
func (*ClusterDefinition) Default ¶
func (r *ClusterDefinition) Default()
Default implements webhook.Defaulter so a webhook will be registered for the type
func (*ClusterDefinition) GetComponentDefByName ¶
func (r *ClusterDefinition) GetComponentDefByName(compDefName string) *ClusterComponentDefinition
GetComponentDefByName gets component definition from ClusterDefinition with compDefName
func (*ClusterDefinition) SetupWebhookWithManager ¶
func (r *ClusterDefinition) SetupWebhookWithManager(mgr ctrl.Manager) error
func (*ClusterDefinition) ValidateCreate ¶
func (r *ClusterDefinition) ValidateCreate() error
ValidateCreate implements webhook.Validator so a webhook will be registered for the type
func (*ClusterDefinition) ValidateDelete ¶
func (r *ClusterDefinition) ValidateDelete() error
ValidateDelete implements webhook.Validator so a webhook will be registered for the type
func (*ClusterDefinition) ValidateEnabledLogConfigs ¶
func (r *ClusterDefinition) ValidateEnabledLogConfigs(compDefName string, enabledLogs []string) []string
ValidateEnabledLogConfigs validates enabledLogs against component compDefName, and returns the invalid logNames undefined in ClusterDefinition.
func (*ClusterDefinition) ValidateUpdate ¶
func (r *ClusterDefinition) ValidateUpdate(old runtime.Object) error
ValidateUpdate implements webhook.Validator so a webhook will be registered for the type
type ClusterDefinitionList ¶
type ClusterDefinitionList struct {
metav1.TypeMeta `json:",inline"`
metav1.ListMeta `json:"metadata,omitempty"`
Items []ClusterDefinition `json:"items"`
}
ClusterDefinitionList contains a list of ClusterDefinition
type ClusterDefinitionProbe ¶
type ClusterDefinitionProbe struct {
// How often (in seconds) to perform the probe.
// +kubebuilder:default=1
// +kubebuilder:validation:Minimum=1
PeriodSeconds int32 `json:"periodSeconds,omitempty"`
// Number of seconds after which the probe times out. Defaults to 1 second.
// +kubebuilder:default=1
// +kubebuilder:validation:Minimum=1
TimeoutSeconds int32 `json:"timeoutSeconds,omitempty"`
// Minimum consecutive failures for the probe to be considered failed after having succeeded.
// +kubebuilder:default=3
// +kubebuilder:validation:Minimum=2
FailureThreshold int32 `json:"failureThreshold,omitempty"`
// commands used to execute for probe.
// +optional
Commands *ClusterDefinitionProbeCMDs `json:"commands,omitempty"`
}
type ClusterDefinitionProbeCMDs ¶
type ClusterDefinitionProbeCMDs struct {
// Write check executed on probe sidecar, used to check workload's allow write access.
// +optional
Writes []string `json:"writes,omitempty"`
// Read check executed on probe sidecar, used to check workload's readonly access.
// +optional
Queries []string `json:"queries,omitempty"`
}
type ClusterDefinitionProbes ¶
type ClusterDefinitionProbes struct {
// Probe for DB running check.
// +optional
RunningProbe *ClusterDefinitionProbe `json:"runningProbe,omitempty"`
// Probe for DB status check.
// +optional
StatusProbe *ClusterDefinitionProbe `json:"statusProbe,omitempty"`
// Probe for DB role changed check.
// +optional
RoleProbe *ClusterDefinitionProbe `json:"roleProbe,omitempty"`
// roleProbeTimeoutAfterPodsReady(in seconds), when all pods of the component are ready,
// it will detect whether the application is available in the pod.
// if pods exceed the InitializationTimeoutSeconds time without a role label,
// this component will enter the Failed/Abnormal phase.
// Note that this configuration will only take effect if the component supports RoleProbe
// and will not affect the life cycle of the pod. default values are 60 seconds.
// +optional
// +kubebuilder:validation:Minimum=30
RoleProbeTimeoutAfterPodsReady int32 `json:"roleProbeTimeoutAfterPodsReady,omitempty"`
}
type ClusterDefinitionSpec ¶
type ClusterDefinitionSpec struct {
// Cluster definition type defines well known application cluster type, e.g. mysql/redis/mongodb
// +kubebuilder:validation:MaxLength=24
// +kubebuilder:validation:Pattern:=`^[a-z0-9]([a-z0-9\-]*[a-z0-9])?$`
// +optional
Type string `json:"type,omitempty"`
// componentDefs provides cluster components definitions.
// +kubebuilder:validation:Required
// +kubebuilder:validation:MinItems=1
// +patchMergeKey=name
// +patchStrategy=merge,retainKeys
// +listType=map
// +listMapKey=name
ComponentDefs []ClusterComponentDefinition `json:"componentDefs" patchStrategy:"merge,retainKeys" patchMergeKey:"name"`
// Connection credential template used for creating a connection credential
// secret for cluster.apps.kubeblocks.io object. Built-in objects are:
// `$(RANDOM_PASSWD)` - random 8 characters.
// `$(UUID)` - generate a random UUID v4 string.
// `$(UUID_B64)` - generate a random UUID v4 BASE64 encoded string.
// `$(UUID_STR_B64)` - generate a random UUID v4 string then BASE64 encoded.
// `$(UUID_HEX)` - generate a random UUID v4 HEX representation.
// `$(HEADLESS_SVC_FQDN)` - headless service FQDN placeholder, value pattern - $(CLUSTER_NAME)-$(1ST_COMP_NAME)-headless.$(NAMESPACE).svc,
// where 1ST_COMP_NAME is the 1st component that provide `ClusterDefinition.spec.componentDefs[].service` attribute;
// `$(SVC_FQDN)` - service FQDN placeholder, value pattern - $(CLUSTER_NAME)-$(1ST_COMP_NAME).$(NAMESPACE).svc,
// where 1ST_COMP_NAME is the 1st component that provide `ClusterDefinition.spec.componentDefs[].service` attribute;
// `$(SVC_PORT_{PORT-NAME})` - a ServicePort's port value with specified port name, i.e, a servicePort JSON struct:
// `"name": "mysql", "targetPort": "mysqlContainerPort", "port": 3306`, and "$(SVC_PORT_mysql)" in the
// connection credential value is 3306.
// +optional
ConnectionCredential map[string]string `json:"connectionCredential,omitempty"`
}
ClusterDefinitionSpec defines the desired state of ClusterDefinition
type ClusterDefinitionStatus ¶
type ClusterDefinitionStatus struct {
// ClusterDefinition phase, valid values are `empty`, `Available`, 'Unavailable`.
// Available is ClusterDefinition become available, and can be referenced for co-related objects.
Phase Phase `json:"phase,omitempty"`
// Extra message in current phase
// +optional
Message string `json:"message,omitempty"`
// observedGeneration is the most recent generation observed for this
// ClusterDefinition. It corresponds to the ClusterDefinition's generation, which is
// updated on mutation by the API Server.
// +optional
ObservedGeneration int64 `json:"observedGeneration,omitempty"`
}
ClusterDefinitionStatus defines the observed state of ClusterDefinition
func (ClusterDefinitionStatus) GetTerminalPhases ¶
func (r ClusterDefinitionStatus) GetTerminalPhases() []Phase
type ClusterList ¶
type ClusterList struct {
metav1.TypeMeta `json:",inline"`
metav1.ListMeta `json:"metadata,omitempty"`
Items []Cluster `json:"items"`
}
ClusterList contains a list of Cluster.
type ClusterPhase ¶
type ClusterPhase string
ClusterPhase defines the Cluster CR .status.phase +enum +kubebuilder:validation:Enum={Running,Stopped,Failed,Abnormal,Creating,Updating}
const ( // REVIEW/TODO: AbnormalClusterPhase provides hybrid, consider remove it if possible RunningClusterPhase ClusterPhase = "Running" StoppedClusterPhase ClusterPhase = "Stopped" FailedClusterPhase ClusterPhase = "Failed" AbnormalClusterPhase ClusterPhase = "Abnormal" // Abnormal is a sub-state of failed, where one of the cluster components has "Failed" or "Abnormal" status phase. CreatingClusterPhase ClusterPhase = "Creating" SpecReconcilingClusterPhase ClusterPhase = "Updating" )
func GetClusterFailedPhases ¶
func GetClusterFailedPhases() []ClusterPhase
GetClusterFailedPhases return Cluster failed or partially failed phases.
func GetClusterTerminalPhases ¶
func GetClusterTerminalPhases() []ClusterPhase
GetClusterTerminalPhases returns Cluster terminal phases.
func GetClusterUpRunningPhases ¶
func GetClusterUpRunningPhases() []ClusterPhase
GetClusterUpRunningPhases returns Cluster running or partially running phases.
type ClusterSpec ¶
type ClusterSpec struct {
// Cluster referencing ClusterDefinition name. This is an immutable attribute.
// +kubebuilder:validation:Required
// +kubebuilder:validation:Pattern:=`^[a-z0-9]([a-z0-9\.\-]*[a-z0-9])?$`
ClusterDefRef string `json:"clusterDefinitionRef"`
// Cluster referencing ClusterVersion name.
// +kubebuilder:validation:Pattern:=`^[a-z0-9]([a-z0-9\.\-]*[a-z0-9])?$`
// +optional
ClusterVersionRef string `json:"clusterVersionRef,omitempty"`
// Cluster termination policy. Valid values are DoNotTerminate, Halt, Delete, WipeOut.
// DoNotTerminate will block delete operation.
// Halt will delete workload resources such as statefulset, deployment workloads but keep PVCs.
// Delete is based on Halt and deletes PVCs.
// WipeOut is based on Delete and wipe out all volume snapshots and snapshot data from backup storage location.
// +kubebuilder:validation:Required
TerminationPolicy TerminationPolicyType `json:"terminationPolicy"`
// List of componentSpecs you want to replace in ClusterDefinition and ClusterVersion. It will replace the field in ClusterDefinition's and ClusterVersion's component if type is matching.
// +patchMergeKey=name
// +patchStrategy=merge,retainKeys
// +listType=map
// +listMapKey=name
// +kubebuilder:validation:Required
// +kubebuilder:validation:MinItems=1
ComponentSpecs []ClusterComponentSpec `json:"componentSpecs,omitempty" patchStrategy:"merge,retainKeys" patchMergeKey:"name"`
// affinity is a group of affinity scheduling rules.
// +optional
Affinity *Affinity `json:"affinity,omitempty"`
// tolerations are attached to tolerate any taint that matches the triple `key,value,effect` using the matching operator `operator`.
// +kubebuilder:pruning:PreserveUnknownFields
// +optional
Tolerations []corev1.Toleration `json:"tolerations,omitempty"`
}
ClusterSpec defines the desired state of Cluster.
func (ClusterSpec) GetComponentByName ¶
func (r ClusterSpec) GetComponentByName(componentName string) *ClusterComponentSpec
GetComponentByName gets component by name.
func (ClusterSpec) GetComponentDefRefName ¶
func (r ClusterSpec) GetComponentDefRefName(componentName string) string
GetComponentDefRefName gets the name of referenced component definition.
func (ClusterSpec) GetDefNameMappingComponents ¶
func (r ClusterSpec) GetDefNameMappingComponents() map[string][]ClusterComponentSpec
GetDefNameMappingComponents returns ComponentDefRef name mapping ClusterComponentSpec.
func (ClusterSpec) ValidateEnabledLogs ¶
func (r ClusterSpec) ValidateEnabledLogs(cd *ClusterDefinition) error
ValidateEnabledLogs validates enabledLogs config in cluster.yaml, and returns metav1.Condition when detecting invalid values.
type ClusterStatus ¶
type ClusterStatus struct {
// observedGeneration is the most recent generation observed for this
// Cluster. It corresponds to the Cluster's generation, which is
// updated on mutation by the API Server.
// +optional
ObservedGeneration int64 `json:"observedGeneration,omitempty"`
// phase describes the phase of the Cluster, the detail information of the phases are as following:
// Running: cluster is running, all its components are available. [terminal state]
// Stopped: cluster has stopped, all its components are stopped. [terminal state]
// Failed: cluster is unavailable. [terminal state]
// Abnormal: Cluster is still running, but part of its components are Abnormal/Failed. [terminal state]
// Creating: Cluster has entered creating process.
// Updating: Cluster has entered updating process, triggered by Spec. updated.
// +optional
Phase ClusterPhase `json:"phase,omitempty"`
// message describes cluster details message in current phase.
// +optional
Message string `json:"message,omitempty"`
// components record the current status information of all components of the cluster.
// +optional
Components map[string]ClusterComponentStatus `json:"components,omitempty"`
// clusterDefGeneration represents the generation number of ClusterDefinition referenced.
// +optional
ClusterDefGeneration int64 `json:"clusterDefGeneration,omitempty"`
// Describe current state of cluster API Resource, like warning.
// +optional
Conditions []metav1.Condition `json:"conditions,omitempty"`
}
ClusterStatus defines the observed state of Cluster.
func (*ClusterStatus) SetComponentStatus ¶
func (r *ClusterStatus) SetComponentStatus(name string, status ClusterComponentStatus)
SetComponentStatus does safe operation on ClusterStatus.Components map object update.
type ClusterSwitchPolicy ¶
type ClusterSwitchPolicy struct {
// clusterSwitchPolicy type defined by Provider in ClusterDefinition, refer components[i].replicationSpec.switchPolicies[x].type
// +kubebuilder:validation:Required
// +kubebuilder:default=MaximumAvailability
// +optional
Type SwitchPolicyType `json:"type"`
}
type ClusterVersion ¶
type ClusterVersion struct {
metav1.TypeMeta `json:",inline"`
metav1.ObjectMeta `json:"metadata,omitempty"`
Spec ClusterVersionSpec `json:"spec,omitempty"`
Status ClusterVersionStatus `json:"status,omitempty"`
}
ClusterVersion is the Schema for the ClusterVersions API
func (*ClusterVersion) GetInconsistentComponentsInfo ¶
func (r *ClusterVersion) GetInconsistentComponentsInfo(clusterDef *ClusterDefinition) ([]string, []string)
GetInconsistentComponentsInfo get clusterVersion invalid component name and no containers component compared with clusterDefinitionDef
func (*ClusterVersion) SetupWebhookWithManager ¶
func (r *ClusterVersion) SetupWebhookWithManager(mgr ctrl.Manager) error
func (*ClusterVersion) ValidateCreate ¶
func (r *ClusterVersion) ValidateCreate() error
ValidateCreate implements webhook.Validator so a webhook will be registered for the type
func (*ClusterVersion) ValidateDelete ¶
func (r *ClusterVersion) ValidateDelete() error
ValidateDelete implements webhook.Validator so a webhook will be registered for the type
func (*ClusterVersion) ValidateUpdate ¶
func (r *ClusterVersion) ValidateUpdate(old runtime.Object) error
ValidateUpdate implements webhook.Validator so a webhook will be registered for the type
type ClusterVersionList ¶
type ClusterVersionList struct {
metav1.TypeMeta `json:",inline"`
metav1.ListMeta `json:"metadata,omitempty"`
Items []ClusterVersion `json:"items"`
}
ClusterVersionList contains a list of ClusterVersion
type ClusterVersionSpec ¶
type ClusterVersionSpec struct {
// ref ClusterDefinition.
// +kubebuilder:validation:Required
// +kubebuilder:validation:Pattern:=`^[a-z0-9]([a-z0-9\.\-]*[a-z0-9])?$`
ClusterDefinitionRef string `json:"clusterDefinitionRef"`
// List of components' containers versioning context, i.e., container image ID, container commands, args., and environments.
// +kubebuilder:validation:Required
// +kubebuilder:validation:MinItems=1
// +patchMergeKey=componentDefRef
// +patchStrategy=merge,retainKeys
// +listType=map
// +listMapKey=componentDefRef
ComponentVersions []ClusterComponentVersion `json:"componentVersions" patchStrategy:"merge,retainKeys" patchMergeKey:"componentDefRef"`
}
ClusterVersionSpec defines the desired state of ClusterVersion
func (ClusterVersionSpec) GetDefNameMappingComponents ¶
func (r ClusterVersionSpec) GetDefNameMappingComponents() map[string]*ClusterComponentVersion
GetDefNameMappingComponents returns ComponentDefRef name mapping ClusterComponentVersion.
type ClusterVersionStatus ¶
type ClusterVersionStatus struct {
// phase - in list of [Available,Unavailable]
// +optional
Phase Phase `json:"phase,omitempty"`
// A human readable message indicating details about why the ClusterVersion is in this phase.
// +optional
Message string `json:"message,omitempty"`
// generation number
// +optional
ObservedGeneration int64 `json:"observedGeneration,omitempty"`
// clusterDefGeneration represents the generation number of ClusterDefinition referenced.
// +optional
ClusterDefGeneration int64 `json:"clusterDefGeneration,omitempty"`
}
ClusterVersionStatus defines the observed state of ClusterVersion
func (ClusterVersionStatus) GetTerminalPhases ¶
func (r ClusterVersionStatus) GetTerminalPhases() []Phase
type CmdExecutorConfig ¶
type CmdExecutorConfig struct {
CommandExecutorEnvItem `json:",inline"`
CommandExecutorItem `json:",inline"`
}
CmdExecutorConfig specifies how to perform creation and deletion statements.
type CommandExecutorEnvItem ¶
type CommandExecutorEnvItem struct {
// image for Connector when executing the command.
// +kubebuilder:validation:Required
Image string `json:"image"`
// envs is a list of environment variables.
// +kubebuilder:pruning:PreserveUnknownFields
// +patchMergeKey=name
// +patchStrategy=merge,retainKeys
// +optional
Env []corev1.EnvVar `json:"env,omitempty" patchStrategy:"merge" patchMergeKey:"name"`
}
type CommandExecutorItem ¶
type CommonBackupPolicy ¶
type CommonBackupPolicy struct {
BasePolicy `json:",inline"`
// which backup tool to perform database backup, only support one tool.
// +kubebuilder:validation:Required
// +kubebuilder:validation:Pattern:=`^[a-z0-9]([a-z0-9\.\-]*[a-z0-9])?$`
BackupToolName string `json:"backupToolName,omitempty"`
}
type ComponentClass ¶
type ComponentClass struct {
// name is the class name
// +optional
Name string `json:"name,omitempty"`
// args are variable's value
// +optional
Args []string `json:"args,omitempty"`
// the CPU of the class
// +optional
CPU resource.Quantity `json:"cpu,omitempty"`
// the memory of the class
// +optional
Memory resource.Quantity `json:"memory,omitempty"`
}
func (*ComponentClass) ToResourceRequirements ¶
func (r *ComponentClass) ToResourceRequirements() corev1.ResourceRequirements
type ComponentClassDefinition ¶
type ComponentClassDefinition struct {
metav1.TypeMeta `json:",inline"`
metav1.ObjectMeta `json:"metadata,omitempty"`
Spec ComponentClassDefinitionSpec `json:"spec,omitempty"`
Status ComponentClassDefinitionStatus `json:"status,omitempty"`
}
ComponentClassDefinition is the Schema for the componentclassdefinitions API
type ComponentClassDefinitionList ¶
type ComponentClassDefinitionList struct {
metav1.TypeMeta `json:",inline"`
metav1.ListMeta `json:"metadata,omitempty"`
Items []ComponentClassDefinition `json:"items"`
}
ComponentClassDefinitionList contains a list of ComponentClassDefinition
type ComponentClassDefinitionSpec ¶
type ComponentClassDefinitionSpec struct {
// group defines a list of class series that conform to the same constraint.
// +optional
Groups []ComponentClassGroup `json:"groups,omitempty"`
}
ComponentClassDefinitionSpec defines the desired state of ComponentClassDefinition
type ComponentClassDefinitionStatus ¶
type ComponentClassDefinitionStatus struct {
// observedGeneration is the most recent generation observed for this
// ComponentClassDefinition. It corresponds to the ComponentClassDefinition's generation, which is
// updated on mutation by the API Server.
// +optional
ObservedGeneration int64 `json:"observedGeneration,omitempty"`
// classes is the list of classes that have been observed for this ComponentClassDefinition
Classes []ComponentClassInstance `json:"classes,omitempty"`
}
ComponentClassDefinitionStatus defines the observed state of ComponentClassDefinition
type ComponentClassGroup ¶
type ComponentClassGroup struct {
// resourceConstraintRef reference to the resource constraint object name, indicates that the series
// defined below all conform to the constraint.
// +kubebuilder:validation:Required
ResourceConstraintRef string `json:"resourceConstraintRef"`
// template is a class definition template that uses the Go template syntax and allows for variable declaration.
// When defining a class in Series, specifying the variable's value is sufficient, as the complete class
// definition will be generated through rendering the template.
//
// For example:
// template: |
// cpu: "{{ or .cpu 1 }}"
// memory: "{{ or .memory 4 }}Gi"
//
// +optional
Template string `json:"template,omitempty"`
// vars defines the variables declared in the template and will be used to generating the complete class definition by
// render the template.
// +listType=set
// +optional
Vars []string `json:"vars,omitempty"`
// series is a series of class definitions.
// +optional
Series []ComponentClassSeries `json:"series,omitempty"`
}
type ComponentClassInstance ¶
type ComponentClassInstance struct {
ComponentClass `json:",inline"`
// resourceConstraintRef reference to the resource constraint object name.
ResourceConstraintRef string `json:"resourceConstraintRef,omitempty"`
}
type ComponentClassSeries ¶
type ComponentClassSeries struct {
// namingTemplate is a template that uses the Go template syntax and allows for referencing variables defined
// in ComponentClassGroup.Template. This enables dynamic generation of class names.
// For example:
// name: "general-{{ .cpu }}c{{ .memory }}g"
// +optional
NamingTemplate string `json:"namingTemplate,omitempty"`
// classes are definitions of classes that come in two forms. In the first form, only ComponentClass.Args
// need to be defined, and the complete class definition is generated by rendering the ComponentClassGroup.Template
// and Name. In the second form, the Name, CPU and Memory must be defined.
// +optional
Classes []ComponentClass `json:"classes,omitempty"`
}
type ComponentConfigSpec ¶
type ComponentConfigSpec struct {
ComponentTemplateSpec `json:",inline"`
// Specify a list of keys.
// If empty, ConfigConstraint takes effect for all keys in configmap.
// +listType=set
// +optional
Keys []string `json:"keys,omitempty"`
// Specify the name of the referenced the configuration constraints object.
// +kubebuilder:validation:MaxLength=63
// +kubebuilder:validation:Pattern:=`^[a-z0-9]([a-z0-9\.\-]*[a-z0-9])?$`
// +optional
ConfigConstraintRef string `json:"constraintRef,omitempty"`
}
type ComponentMessageMap ¶
func (ComponentMessageMap) SetObjectMessage ¶
func (r ComponentMessageMap) SetObjectMessage(objectKind, objectName, message string)
SetObjectMessage sets k8s workload message to component status message map
type ComponentNameSet ¶
type ComponentNameSet map[string]struct{}
type ComponentOps ¶
type ComponentOps struct {
// componentName cluster component name.
// +kubebuilder:validation:Required
ComponentName string `json:"componentName"`
}
ComponentOps defines the common variables of component scope operations.
type ComponentResourceConstraint ¶
type ComponentResourceConstraint struct {
metav1.TypeMeta `json:",inline"`
metav1.ObjectMeta `json:"metadata,omitempty"`
Spec ComponentResourceConstraintSpec `json:"spec,omitempty"`
}
ComponentResourceConstraint is the Schema for the componentresourceconstraints API
func (*ComponentResourceConstraint) FindMatchingConstraints ¶
func (c *ComponentResourceConstraint) FindMatchingConstraints(r *corev1.ResourceRequirements) []ResourceConstraint
FindMatchingConstraints find all constraints that resource matches
func (*ComponentResourceConstraint) MatchClass ¶
func (c *ComponentResourceConstraint) MatchClass(class *ComponentClassInstance) bool
type ComponentResourceConstraintList ¶
type ComponentResourceConstraintList struct {
metav1.TypeMeta `json:",inline"`
metav1.ListMeta `json:"metadata,omitempty"`
Items []ComponentResourceConstraint `json:"items"`
}
ComponentResourceConstraintList contains a list of ComponentResourceConstraint
type ComponentResourceConstraintSpec ¶
type ComponentResourceConstraintSpec struct {
// Component resource constraints
Constraints []ResourceConstraint `json:"constraints,omitempty"`
}
ComponentResourceConstraintSpec defines the desired state of ComponentResourceConstraint
type ComponentResourceKey ¶
type ComponentResourceKey string
ComponentResourceKey defines the resource key of component, such as pod/pvc. +enum +kubebuilder:validation:Enum={pods}
const PodsCompResourceKey ComponentResourceKey = "pods"
type ComponentTemplateSpec ¶
type ComponentTemplateSpec struct {
// Specify the name of configuration template.
// +kubebuilder:validation:Required
// +kubebuilder:validation:MaxLength=63
// +kubebuilder:validation:Pattern:=`^[a-z0-9]([a-z0-9\.\-]*[a-z0-9])?$`
Name string `json:"name"`
// Specify the name of the referenced the configuration template ConfigMap object.
// +kubebuilder:validation:Required
// +kubebuilder:validation:MaxLength=63
// +kubebuilder:validation:Pattern:=`^[a-z0-9]([a-z0-9\.\-]*[a-z0-9])?$`
TemplateRef string `json:"templateRef"`
// Specify the namespace of the referenced the configuration template ConfigMap object.
// An empty namespace is equivalent to the "default" namespace.
// +kubebuilder:validation:MaxLength=63
// +kubebuilder:default="default"
// +optional
Namespace string `json:"namespace,omitempty"`
// volumeName is the volume name of PodTemplate, which the configuration file produced through the configuration template will be mounted to the corresponding volume.
// The volume name must be defined in podSpec.containers[*].volumeMounts.
// +kubebuilder:validation:Required
// +kubebuilder:validation:MaxLength=32
VolumeName string `json:"volumeName"`
// defaultMode is optional: mode bits used to set permissions on created files by default.
// Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511.
// YAML accepts both octal and decimal values, JSON requires decimal values for mode bits.
// Defaults to 0644.
// Directories within the path are not affected by this setting.
// This might be in conflict with other options that affect the file
// mode, like fsGroup, and the result can be other mode bits set.
// +optional
DefaultMode *int32 `json:"defaultMode,omitempty" protobuf:"varint,3,opt,name=defaultMode"`
}
type ConfigConstraint ¶
type ConfigConstraint struct {
metav1.TypeMeta `json:",inline"`
metav1.ObjectMeta `json:"metadata,omitempty"`
Spec ConfigConstraintSpec `json:"spec,omitempty"`
Status ConfigConstraintStatus `json:"status,omitempty"`
}
ConfigConstraint is the Schema for the configconstraint API
type ConfigConstraintList ¶
type ConfigConstraintList struct {
metav1.TypeMeta `json:",inline"`
metav1.ListMeta `json:"metadata,omitempty"`
Items []ConfigConstraint `json:"items"`
}
ConfigConstraintList contains a list of ConfigConstraints.
type ConfigConstraintPhase ¶
type ConfigConstraintPhase string
ConfigConstraintPhase defines the ConfigConstraint CR .status.phase +enum +kubebuilder:validation:Enum={Available,Unavailable, Deleting}
const ( CCAvailablePhase ConfigConstraintPhase = "Available" CCDeletingPhase ConfigConstraintPhase = "Deleting" )
type ConfigConstraintSpec ¶
type ConfigConstraintSpec struct {
// reloadOptions indicates whether the process supports reload.
// if set, the controller will determine the behavior of the engine instance based on the configuration templates,
// restart or reload depending on whether any parameters in the StaticParameters have been modified.
// +optional
ReloadOptions *ReloadOptions `json:"reloadOptions,omitempty"`
// cfgSchemaTopLevelName is cue type name, which generates openapi schema.
// +optional
CfgSchemaTopLevelName string `json:"cfgSchemaTopLevelName,omitempty"`
// configurationSchema imposes restrictions on database parameter's rule.
// +optional
ConfigurationSchema *CustomParametersValidation `json:"configurationSchema,omitempty"`
// staticParameters, list of StaticParameter, modifications of them trigger a process restart.
// +listType=set
// +optional
StaticParameters []string `json:"staticParameters,omitempty"`
// dynamicParameters, list of DynamicParameter, modifications of them trigger a config dynamic reload without process restart.
// +listType=set
// +optional
DynamicParameters []string `json:"dynamicParameters,omitempty"`
// immutableParameters describes parameters that prohibit user from modification.
// +listType=set
// +optional
ImmutableParameters []string `json:"immutableParameters,omitempty"`
// selector is used to match the label on the pod,
// for example, a pod of the primary is match on the patroni cluster.
Selector *metav1.LabelSelector `json:"selector,omitempty"`
// formatterConfig describes the format of the configuration file, the controller
// 1. parses configuration file
// 2. analyzes the modified parameters
// 3. applies corresponding policies.
// +kubebuilder:validation:Required
FormatterConfig *FormatterConfig `json:"formatterConfig"`
}
ConfigConstraintSpec defines the desired state of ConfigConstraint
type ConfigConstraintStatus ¶
type ConfigConstraintStatus struct {
// phase is status of configuration template, when set to CCAvailablePhase, it can be referenced by ClusterDefinition or ClusterVersion.
// +optional
Phase ConfigConstraintPhase `json:"phase,omitempty"`
// message field describes the reasons of abnormal status.
// +optional
Message string `json:"message,omitempty"`
// observedGeneration is the latest generation observed for this
// ClusterDefinition. It refers to the ConfigConstraint's generation, which is
// updated by the API Server.
// +optional
ObservedGeneration int64 `json:"observedGeneration,omitempty"`
}
ConfigConstraintStatus defines the observed state of ConfigConstraint.
func (ConfigConstraintStatus) IsConfigConstraintTerminalPhases ¶
func (cs ConfigConstraintStatus) IsConfigConstraintTerminalPhases() bool
type Configuration ¶
type Configuration struct {
// name is a config template name.
// +kubebuilder:validation:Required
// +kubebuilder:validation:MaxLength=63
// +kubebuilder:validation:Pattern:=`^[a-z0-9]([a-z0-9\.\-]*[a-z0-9])?$`
Name string `json:"name"`
// keys is used to set the parameters to be updated.
// +kubebuilder:validation:Required
// +kubebuilder:validation:MinItems=1
// +patchMergeKey=key
// +patchStrategy=merge,retainKeys
// +listType=map
// +listMapKey=key
Keys []ParameterConfig `json:"keys" patchStrategy:"merge,retainKeys" patchMergeKey:"key"`
}
type ConfigurationStatus ¶
type ConfigurationStatus struct {
// name is a config template name.
// +kubebuilder:validation:Required
// +kubebuilder:validation:MaxLength=63
// +kubebuilder:validation:Pattern:=`^[a-z0-9]([a-z0-9\.\-]*[a-z0-9])?$`
Name string `json:"name"`
// updatePolicy describes the policy of reconfiguring.
// +optional
UpdatePolicy UpgradePolicy `json:"updatePolicy,omitempty"`
// status describes the current state of the reconfiguring state machine.
// +optional
Status string `json:"status,omitempty"`
// succeedCount describes the number of successful reconfiguring.
// +kubebuilder:default=0
// +optional
SucceedCount int32 `json:"succeedCount"`
// expectedCount describes the number of expected reconfiguring.
// +kubebuilder:default=-1
// +optional
ExpectedCount int32 `json:"expectedCount"`
// lastStatus describes the last status for the reconfiguring controller.
// +optional
LastAppliedStatus string `json:"lastStatus,omitempty"`
// LastAppliedConfiguration describes the last configuration.
// +optional
LastAppliedConfiguration map[string]string `json:"lastAppliedConfiguration,omitempty"`
// updatedParameters describes the updated parameters.
// +optional
UpdatedParameters UpdatedParameters `json:"updatedParameters"`
}
type ConnectionCredentialKey ¶
type ConnectionCredentialKey struct {
// the key of password in the ConnectionCredential secret.
// if not set, the default key is "password".
// +optional
PasswordKey *string `json:"passwordKey,omitempty"`
// the key of username in the ConnectionCredential secret.
// if not set, the default key is "username".
// +optional
UsernameKey *string `json:"usernameKey,omitempty"`
}
type ConsensusMember ¶
type ConsensusMember struct {
// name, role name.
// +kubebuilder:validation:Required
// +kubebuilder:default=leader
Name string `json:"name"`
// accessMode, what service this member capable.
// +kubebuilder:validation:Required
// +kubebuilder:default=ReadWrite
AccessMode AccessMode `json:"accessMode"`
// replicas, number of Pods of this role.
// default 1 for Leader
// default 0 for Learner
// default Cluster.spec.componentSpec[*].Replicas - Leader.Replicas - Learner.Replicas for Followers
// +kubebuilder:default=0
// +kubebuilder:validation:Minimum=0
// +optional
Replicas *int32 `json:"replicas,omitempty"`
}
type ConsensusMemberStatus ¶
type ConsensusMemberStatus struct {
// Defines the role name.
// +kubebuilder:validation:Required
// +kubebuilder:default=leader
Name string `json:"name"`
// accessMode defines what service this pod provides.
// +kubebuilder:validation:Required
// +kubebuilder:default=ReadWrite
AccessMode AccessMode `json:"accessMode"`
// Pod name.
// +kubebuilder:validation:Required
// +kubebuilder:default=Unknown
Pod string `json:"pod"`
}
type ConsensusSetSpec ¶
type ConsensusSetSpec struct {
// leader, one single leader.
// +kubebuilder:validation:Required
Leader ConsensusMember `json:"leader"`
// followers, has voting right but not Leader.
// +optional
Followers []ConsensusMember `json:"followers,omitempty"`
// learner, no voting right.
// +optional
Learner *ConsensusMember `json:"learner,omitempty"`
// updateStrategy, Pods update strategy.
// serial: update Pods one by one that guarantee minimum component unavailable time.
// Learner -> Follower(with AccessMode=none) -> Follower(with AccessMode=readonly) -> Follower(with AccessMode=readWrite) -> Leader
// bestEffortParallel: update Pods in parallel that guarantee minimum component un-writable time.
// Learner, Follower(minority) in parallel -> Follower(majority) -> Leader, keep majority online all the time.
// parallel: force parallel
// +kubebuilder:default=Serial
// +optional
UpdateStrategy UpdateStrategy `json:"updateStrategy,omitempty"`
}
type ConsensusSetStatus ¶
type ConsensusSetStatus struct {
// Leader status.
// +kubebuilder:validation:Required
Leader ConsensusMemberStatus `json:"leader"`
// Followers status.
// +optional
Followers []ConsensusMemberStatus `json:"followers,omitempty"`
// Learner status.
// +optional
Learner *ConsensusMemberStatus `json:"learner,omitempty"`
}
type CustomLabelSpec ¶
type CustomLabelSpec struct {
// key name of label
// +kubebuilder:validation:Required
Key string `json:"key"`
// value of label
// +kubebuilder:validation:Required
Value string `json:"value"`
// resources defines the resources to be labeled.
// +kubebuilder:validation:Required
Resources []GVKResource `json:"resources,omitempty"`
}
type CustomParametersValidation ¶
type CustomParametersValidation struct {
// schema provides a way for providers to validate the changed parameters through json.
// +kubebuilder:validation:Schemaless
// +kubebuilder:validation:ComponentDefRef=object
// +kubebuilder:pruning:PreserveUnknownFields
Schema *apiext.JSONSchemaProps `json:"schema,omitempty"`
// cue that to let provider verify user configuration through cue language.
// +optional
CUE string `json:"cue,omitempty"`
}
type ExporterConfig ¶
type ExporterConfig struct {
// scrapePort is exporter port for Time Series Database to scrape metrics.
// +kubebuilder:validation:Required
// +kubebuilder:validation:XIntOrString
ScrapePort intstr.IntOrString `json:"scrapePort"`
// scrapePath is exporter url path for Time Series Database to scrape metrics.
// +kubebuilder:validation:MaxLength=128
// +kubebuilder:default="/metrics"
// +optional
ScrapePath string `json:"scrapePath,omitempty"`
}
type Expose ¶
type Expose struct {
ComponentOps `json:",inline"`
// Setting the list of services to be exposed.
// +kubebuilder:validation:Required
// +kubebuilder:validation:Minitems=0
Services []ClusterComponentService `json:"services"`
}
type FormatterConfig ¶
type FormatterConfig struct {
// The FormatterOptions represents the special options of configuration file.
// This is optional for now. If not specified.
// +optional
FormatterOptions `json:",inline"`
// The configuration file format. Valid values are ini, xml, yaml, json,
// hcl, dotenv, properties and toml.
//
// ini: a configuration file that consists of a text-based content with a structure and syntax comprising key–value pairs for properties, reference wiki: https://en.wikipedia.org/wiki/INI_file
// xml: reference wiki: https://en.wikipedia.org/wiki/XML
// yaml: a configuration file support for complex data types and structures.
// json: reference wiki: https://en.wikipedia.org/wiki/JSON
// hcl: : The HashiCorp Configuration Language (HCL) is a configuration language authored by HashiCorp, reference url: https://www.linode.com/docs/guides/introduction-to-hcl/
// dotenv: this was a plain text file with simple key–value pairs, reference wiki: https://en.wikipedia.org/wiki/Configuration_file#MS-DOS
// properties: a file extension mainly used in Java, reference wiki: https://en.wikipedia.org/wiki/.properties
// toml: reference wiki: https://en.wikipedia.org/wiki/TOML
// +kubebuilder:validation:Required
Format CfgFileFormat `json:"format"`
}
type FormatterOptions ¶
type FormatterOptions struct {
// iniConfig represents the ini options.
// +optional
IniConfig *IniConfig `json:"iniConfig,omitempty"`
}
FormatterOptions represents the special options of configuration file. Only one of its members may be specified.
type GVKResource ¶
type GVKResource struct {
// gvk is Group/Version/Kind, for example "v1/Pod", "apps/v1/StatefulSet", etc.
// when the gvk resource filtered by the selector already exists, if there is no corresponding custom label, it will be added, and if label already exists, it will be updated.
// +kubebuilder:validation:Required
GVK string `json:"gvk"`
// selector is a label query over a set of resources.
// +optional
Selector map[string]string `json:"selector,omitempty"`
}
type HScaleDataClonePolicyType ¶
type HScaleDataClonePolicyType string
HScaleDataClonePolicyType defines data clone policy when horizontal scaling. +enum +kubebuilder:validation:Enum={None,Snapshot}
const ( HScaleDataClonePolicyNone HScaleDataClonePolicyType = "None" HScaleDataClonePolicyFromSnapshot HScaleDataClonePolicyType = "Snapshot" HScaleDataClonePolicyFromBackup HScaleDataClonePolicyType = "Backup" )
type HorizontalScalePolicy ¶
type HorizontalScalePolicy struct {
// type controls what kind of data synchronization do when component scale out.
// Policy is in enum of {None, Snapshot}. The default policy is `None`.
// None: Default policy, do nothing.
// Snapshot: Do native volume snapshot before scaling and restore to newly scaled pods.
// Prefer backup job to create snapshot if can find a backupPolicy from 'BackupPolicyTemplateName'.
// Notice that 'Snapshot' policy will only take snapshot on one volumeMount, default is
// the first volumeMount of first container (i.e. clusterdefinition.spec.components.podSpec.containers[0].volumeMounts[0]),
// since take multiple snapshots at one time might cause consistency problem.
// +kubebuilder:default=None
// +optional
Type HScaleDataClonePolicyType `json:"type,omitempty"`
// BackupPolicyTemplateName reference the backup policy template.
// +optional
BackupPolicyTemplateName string `json:"backupPolicyTemplateName,omitempty"`
// volumeMountsName defines which volumeMount of the container to do backup,
// only work if Type is not None
// if not specified, the 1st volumeMount will be chosen
// +optional
VolumeMountsName string `json:"volumeMountsName,omitempty"`
}
type HorizontalScaling ¶
type HorizontalScaling struct {
ComponentOps `json:",inline"`
// replicas for the workloads.
// +kubebuilder:validation:Required
// +kubebuilder:validation:Minimum=0
Replicas int32 `json:"replicas"`
}
HorizontalScaling defines the variables of horizontal scaling operation
type IniConfig ¶
type IniConfig struct {
// sectionName describes ini section.
// +optional
SectionName string `json:"sectionName,omitempty"`
}
type Issuer ¶
type Issuer struct {
// Name of issuer.
// Options supported:
// - KubeBlocks - Certificates signed by KubeBlocks Operator.
// - UserProvided - User provided own CA-signed certificates.
// +kubebuilder:validation:Enum={KubeBlocks, UserProvided}
// +kubebuilder:default=KubeBlocks
// +kubebuilder:validation:Required
Name IssuerName `json:"name"`
// secretRef. TLS certs Secret reference
// required when from is UserProvided
// +optional
SecretRef *TLSSecretRef `json:"secretRef,omitempty"`
}
Issuer defines Tls certs issuer
type IssuerName ¶
type IssuerName string
IssuerName defines Tls certs issuer name +enum
const ( // IssuerKubeBlocks Certificates signed by KubeBlocks Operator. IssuerKubeBlocks IssuerName = "KubeBlocks" // IssuerUserProvided User provided own CA-signed certificates. IssuerUserProvided IssuerName = "UserProvided" )
type LastComponentConfiguration ¶
type LastComponentConfiguration struct {
// replicas are the last replicas of the component.
// +optional
Replicas *int32 `json:"replicas,omitempty"`
// the last resources of the component.
// +kubebuilder:pruning:PreserveUnknownFields
// +optional
corev1.ResourceRequirements `json:",inline,omitempty"`
// the last class name of the component.
// +optional
Class string `json:"class,omitempty"`
// volumeClaimTemplates records the last volumeClaimTemplates of the component.
// +optional
VolumeClaimTemplates []OpsRequestVolumeClaimTemplate `json:"volumeClaimTemplates,omitempty"`
// services records the last services of the component.
// +optional
Services []ClusterComponentService `json:"services,omitempty"`
// targetResources records the affecting target resources information for the component.
// resource key is in list of [pods].
// +optional
TargetResources map[ComponentResourceKey][]string `json:"targetResources,omitempty"`
}
type LastConfiguration ¶
type LastConfiguration struct {
// clusterVersionRef references ClusterVersion name.
// +optional
ClusterVersionRef string `json:"clusterVersionRef,omitempty"`
// components records last configuration of the component.
// +optional
Components map[string]LastComponentConfiguration `json:"components,omitempty"`
}
type LetterCase ¶
type LetterCase string
LetterCase defines cases to use in password generation. +enum
const ( LowerCases LetterCase = "LowerCases" UpperCases LetterCase = "UpperCases" MixedCases LetterCase = "MixedCases" )
type LogConfig ¶
type LogConfig struct {
// name log type name, such as slow for MySQL slow log file.
// +kubebuilder:validation:Required
// +kubebuilder:validation:MaxLength=128
Name string `json:"name"`
// filePathPattern log file path pattern which indicate how to find this file
// corresponding to variable (log path) in database kernel. please don't set this casually.
// +kubebuilder:validation:Required
// +kubebuilder:validation:MaxLength=4096
FilePathPattern string `json:"filePathPattern"`
}
type MemoryConstraint ¶
type MemoryConstraint struct {
// The size of memory per vcpu core.
// For example: 1Gi, 200Mi.
// If SizePerCPU is specified, MinPerCPU and MaxPerCPU are ignore.
// +optional
SizePerCPU *resource.Quantity `json:"sizePerCPU,omitempty"`
// The maximum size of memory per vcpu core, [MinPerCPU, MaxPerCPU] defines a range for valid memory size per vcpu core.
// It is useful on GCP as the ratio between the CPU and memory may be a range.
// If SizePerCPU is specified, MinPerCPU and MaxPerCPU are ignored.
// Reference: https://cloud.google.com/compute/docs/general-purpose-machines#custom_machine_types
// +optional
MaxPerCPU *resource.Quantity `json:"maxPerCPU,omitempty"`
// The minimum size of memory per vcpu core, [MinPerCPU, MaxPerCPU] defines a range for valid memory size per vcpu core.
// It is useful on GCP as the ratio between the CPU and memory may be a range.
// If SizePerCPU is specified, MinPerCPU and MaxPerCPU are ignored.
// Reference: https://cloud.google.com/compute/docs/general-purpose-machines#custom_machine_types
// +optional
MinPerCPU *resource.Quantity `json:"minPerCPU,omitempty"`
}
type MonitorConfig ¶
type MonitorConfig struct {
// builtIn is a switch to enable KubeBlocks builtIn monitoring.
// If BuiltIn is set to false, the provider should set ExporterConfig and Sidecar container own.
// BuiltIn set to true is not currently supported but will be soon.
// +kubebuilder:default=false
// +optional
BuiltIn bool `json:"builtIn,omitempty"`
// exporterConfig provided by provider, which specify necessary information to Time Series Database.
// exporterConfig is valid when builtIn is false.
// +optional
Exporter *ExporterConfig `json:"exporterConfig,omitempty"`
}
type OpsPhase ¶
type OpsPhase string
OpsPhase defines opsRequest phase. +enum +kubebuilder:validation:Enum={Pending,Creating,Running,Failed,Succeed}
type OpsRecorder ¶
type OpsRequest ¶
type OpsRequest struct {
metav1.TypeMeta `json:",inline"`
metav1.ObjectMeta `json:"metadata,omitempty"`
Spec OpsRequestSpec `json:"spec,omitempty"`
Status OpsRequestStatus `json:"status,omitempty"`
}
OpsRequest is the Schema for the opsrequests API
func (*OpsRequest) GetComponentNameSet ¶
func (r *OpsRequest) GetComponentNameSet() ComponentNameSet
GetComponentNameSet if the operations are within the scope of component, this function should be implemented
func (*OpsRequest) GetUpgradeComponentNameSet ¶
func (r *OpsRequest) GetUpgradeComponentNameSet() ComponentNameSet
GetUpgradeComponentNameSet gets the component name map with upgrade operation.
func (*OpsRequest) SetStatusCondition ¶
func (r *OpsRequest) SetStatusCondition(condition metav1.Condition)
func (*OpsRequest) SetupWebhookWithManager ¶
func (r *OpsRequest) SetupWebhookWithManager(mgr ctrl.Manager) error
func (*OpsRequest) Validate ¶
func (r *OpsRequest) Validate(ctx context.Context, k8sClient client.Client, cluster *Cluster, isCreate bool) error
Validate validates OpsRequest
func (*OpsRequest) ValidateCreate ¶
func (r *OpsRequest) ValidateCreate() error
ValidateCreate implements webhook.Validator so a webhook will be registered for the type
func (*OpsRequest) ValidateDelete ¶
func (r *OpsRequest) ValidateDelete() error
ValidateDelete implements webhook.Validator so a webhook will be registered for the type
func (*OpsRequest) ValidateUpdate ¶
func (r *OpsRequest) ValidateUpdate(old runtime.Object) error
ValidateUpdate implements webhook.Validator so a webhook will be registered for the type
type OpsRequestBehaviour ¶
type OpsRequestBehaviour struct {
FromClusterPhases []ClusterPhase
ToClusterPhase ClusterPhase
ProcessingReasonInClusterCondition string
}
type OpsRequestComponentStatus ¶
type OpsRequestComponentStatus struct {
// phase describes the component phase, reference Cluster.status.component.phase.
// +optional
Phase ClusterComponentPhase `json:"phase,omitempty"`
// progressDetails describes the progress details of the component for this operation.
// +optional
ProgressDetails []ProgressStatusDetail `json:"progressDetails,omitempty"`
// workloadType references workload type of component in ClusterDefinition.
// +optional
WorkloadType WorkloadType `json:"workloadType,omitempty"`
}
type OpsRequestList ¶
type OpsRequestList struct {
metav1.TypeMeta `json:",inline"`
metav1.ListMeta `json:"metadata,omitempty"`
Items []OpsRequest `json:"items"`
}
OpsRequestList contains a list of OpsRequest
type OpsRequestSpec ¶
type OpsRequestSpec struct {
// clusterRef references clusterDefinition.
// +kubebuilder:validation:Required
ClusterRef string `json:"clusterRef"`
// type defines the operation type.
// +kubebuilder:validation:Required
Type OpsType `json:"type"`
// ttlSecondsAfterSucceed OpsRequest will be deleted after TTLSecondsAfterSucceed second when OpsRequest.status.phase is Succeed.
// +optional
TTLSecondsAfterSucceed int32 `json:"ttlSecondsAfterSucceed,omitempty"`
// upgrade specifies the cluster version by specifying clusterVersionRef.
// +optional
Upgrade *Upgrade `json:"upgrade,omitempty"`
// horizontalScaling defines what component need to horizontal scale the specified replicas.
// +optional
// +patchMergeKey=componentName
// +patchStrategy=merge,retainKeys
// +listType=map
// +listMapKey=componentName
HorizontalScalingList []HorizontalScaling `json:"horizontalScaling,omitempty" patchStrategy:"merge,retainKeys" patchMergeKey:"componentName"`
// volumeExpansion defines what component and volumeClaimTemplate need to expand the specified storage.
// +optional
// +patchMergeKey=componentName
// +patchStrategy=merge,retainKeys
// +listType=map
// +listMapKey=componentName
VolumeExpansionList []VolumeExpansion `json:"volumeExpansion,omitempty" patchStrategy:"merge,retainKeys" patchMergeKey:"componentName"`
// restart the specified component.
// +optional
// +patchMergeKey=componentName
// +patchStrategy=merge,retainKeys
// +listType=map
// +listMapKey=componentName
RestartList []ComponentOps `json:"restart,omitempty" patchStrategy:"merge,retainKeys" patchMergeKey:"componentName"`
// verticalScaling defines what component need to vertical scale the specified compute resources.
// +optional
// +patchMergeKey=componentName
// +patchStrategy=merge,retainKeys
// +listType=map
// +listMapKey=componentName
VerticalScalingList []VerticalScaling `json:"verticalScaling,omitempty" patchStrategy:"merge,retainKeys" patchMergeKey:"componentName"`
// reconfigure defines the variables that need to input when updating configuration.
// +optional
Reconfigure *Reconfigure `json:"reconfigure,omitempty"`
// expose defines services the component needs to expose.
// +optional
// +patchMergeKey=componentName
// +patchStrategy=merge,retainKeys
// +listType=map
// +listMapKey=componentName
ExposeList []Expose `json:"expose,omitempty" patchStrategy:"merge,retainKeys" patchMergeKey:"componentName"`
// cluster RestoreFrom backup or point in time
// +optional
RestoreFrom *RestoreFromSpec `json:"restoreFrom,omitempty"`
}
OpsRequestSpec defines the desired state of OpsRequest
func (OpsRequestSpec) GetExposeComponentNameSet ¶
func (r OpsRequestSpec) GetExposeComponentNameSet() ComponentNameSet
func (OpsRequestSpec) GetHorizontalScalingComponentNameSet ¶
func (r OpsRequestSpec) GetHorizontalScalingComponentNameSet() ComponentNameSet
GetHorizontalScalingComponentNameSet gets the component name map with horizontal scaling operation.
func (OpsRequestSpec) GetReconfiguringComponentNameSet ¶
func (r OpsRequestSpec) GetReconfiguringComponentNameSet() ComponentNameSet
GetReconfiguringComponentNameSet gets the component name map with reconfiguring operation.
func (OpsRequestSpec) GetRestartComponentNameSet ¶
func (r OpsRequestSpec) GetRestartComponentNameSet() ComponentNameSet
GetRestartComponentNameSet gets the component name map with restart operation.
func (OpsRequestSpec) GetVerticalScalingComponentNameSet ¶
func (r OpsRequestSpec) GetVerticalScalingComponentNameSet() ComponentNameSet
GetVerticalScalingComponentNameSet gets the component name map with vertical scaling operation.
func (OpsRequestSpec) GetVolumeExpansionComponentNameSet ¶
func (r OpsRequestSpec) GetVolumeExpansionComponentNameSet() ComponentNameSet
GetVolumeExpansionComponentNameSet gets the component name map with volume expansion operation.
func (OpsRequestSpec) ToExposeListToMap ¶
func (r OpsRequestSpec) ToExposeListToMap() map[string]Expose
ToExposeListToMap build expose map
func (OpsRequestSpec) ToHorizontalScalingListToMap ¶
func (r OpsRequestSpec) ToHorizontalScalingListToMap() map[string]HorizontalScaling
ToHorizontalScalingListToMap converts OpsRequest.spec.horizontalScaling list to map
func (OpsRequestSpec) ToVerticalScalingListToMap ¶
func (r OpsRequestSpec) ToVerticalScalingListToMap() map[string]VerticalScaling
ToVerticalScalingListToMap converts OpsRequest.spec.verticalScaling list to map
func (OpsRequestSpec) ToVolumeExpansionListToMap ¶
func (r OpsRequestSpec) ToVolumeExpansionListToMap() map[string]VolumeExpansion
ToVolumeExpansionListToMap converts volumeExpansionList to map
type OpsRequestStatus ¶
type OpsRequestStatus struct {
// ClusterGeneration records the cluster generation after handling the opsRequest action.
// +optional
ClusterGeneration int64 `json:"clusterGeneration,omitempty"`
// phase describes OpsRequest phase.
Phase OpsPhase `json:"phase,omitempty"`
// +kubebuilder:validation:Pattern:=`^(\d+|\-)/(\d+|\-)$`
// +kubebuilder:default=-/-
Progress string `json:"progress"`
// lastConfiguration records the last configuration before this operation take effected.
// +optional
LastConfiguration LastConfiguration `json:"lastConfiguration,omitempty"`
// components defines the recorded the status information of changed components for operation request.
// +optional
Components map[string]OpsRequestComponentStatus `json:"components,omitempty"`
// startTimestamp The time when the OpsRequest started processing.
// +optional
StartTimestamp metav1.Time `json:"startTimestamp,omitempty"`
// completionTimestamp defines the OpsRequest completion time.
// +optional
CompletionTimestamp metav1.Time `json:"completionTimestamp,omitempty"`
// reconfiguringStatus defines the status information of reconfiguring.
// +optional
ReconfiguringStatus *ReconfiguringStatus `json:"reconfiguringStatus,omitempty"`
// conditions describes opsRequest detail status.
// +optional
// +patchMergeKey=type
// +patchStrategy=merge
// +listType=map
// +listMapKey=type
Conditions []metav1.Condition `json:"conditions,omitempty"`
}
OpsRequestStatus defines the observed state of OpsRequest
type OpsType ¶
type OpsType string
OpsType defines operation types. +enum +kubebuilder:validation:Enum={Upgrade,VerticalScaling,VolumeExpansion,HorizontalScaling,Restart,Reconfiguring,Start,Stop,Expose}
const ( VerticalScalingType OpsType = "VerticalScaling" HorizontalScalingType OpsType = "HorizontalScaling" VolumeExpansionType OpsType = "VolumeExpansion" UpgradeType OpsType = "Upgrade" ReconfiguringType OpsType = "Reconfiguring" RestartType OpsType = "Restart" // RestartType the restart operation is a special case of the rolling update operation. StopType OpsType = "Stop" // StopType the stop operation will delete all pods in a cluster concurrently. StartType OpsType = "Start" // StartType the start operation will start the pods which is deleted in stop operation. ExposeType OpsType = "Expose" )
type ParameterConfig ¶
type ParameterConfig struct {
// key indicates the key name of ConfigMap.
// +kubebuilder:validation:Required
Key string `json:"key"`
// Setting the list of parameters for a single configuration file.
// +kubebuilder:validation:Required
// +kubebuilder:validation:MinItems=1
Parameters []ParameterPair `json:"parameters"`
}
type ParameterPair ¶
type ParameterPair struct {
// key is name of the parameter to be updated.
// +kubebuilder:validation:Required
Key string `json:"key"`
// parameter values to be updated.
// if set nil, the parameter defined by the key field will be deleted from the configuration file.
// +kubebuilder:validation:Required
Value *string `json:"value"`
}
type PasswordConfig ¶
type PasswordConfig struct {
// length defines the length of password.
// +kubebuilder:validation:Maximum=32
// +kubebuilder:validation:Minimum=8
// +kubebuilder:default=10
// +optional
Length int32 `json:"length,omitempty"`
// numDigits defines number of digits.
// +kubebuilder:validation:Maximum=20
// +kubebuilder:validation:Minimum=0
// +kubebuilder:default=2
// +optional
NumDigits int32 `json:"numDigits,omitempty"`
// numSymbols defines number of symbols.
// +kubebuilder:validation:Maximum=20
// +kubebuilder:validation:Minimum=0
// +kubebuilder:default=0
// +optional
NumSymbols int32 `json:"numSymbols,omitempty"`
// letterCase defines to use lower-cases, upper-cases or mixed-cases of letters.
// +kubebuilder:default=MixedCases
// +optional
LetterCase LetterCase `json:"letterCase,omitempty"`
}
PasswordConfig helps provide to customize complexity of password generation pattern.
type PersistentVolumeClaimSpec ¶
type PersistentVolumeClaimSpec struct {
// accessModes contains the desired access modes the volume should have.
// More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1.
// +kubebuilder:pruning:PreserveUnknownFields
// +optional
AccessModes []corev1.PersistentVolumeAccessMode `json:"accessModes,omitempty" protobuf:"bytes,1,rep,name=accessModes,casttype=PersistentVolumeAccessMode"`
// resources represents the minimum resources the volume should have.
// If RecoverVolumeExpansionFailure feature is enabled users are allowed to specify resource requirements
// that are lower than previous value but must still be higher than capacity recorded in the
// status field of the claim.
// More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources.
// +kubebuilder:pruning:PreserveUnknownFields
// +optional
Resources corev1.ResourceRequirements `json:"resources,omitempty" protobuf:"bytes,2,opt,name=resources"`
// storageClassName is the name of the StorageClass required by the claim.
// More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1.
// +optional
StorageClassName *string `json:"storageClassName,omitempty" protobuf:"bytes,5,opt,name=storageClassName"`
}
func (PersistentVolumeClaimSpec) GetStorageClassName ¶
func (r PersistentVolumeClaimSpec) GetStorageClassName(preferSC string) *string
GetStorageClassName returns PersistentVolumeClaimSpec.StorageClassName if a value is assigned; otherwise, it returns preferSC argument.
func (PersistentVolumeClaimSpec) ToV1PersistentVolumeClaimSpec ¶
func (r PersistentVolumeClaimSpec) ToV1PersistentVolumeClaimSpec() corev1.PersistentVolumeClaimSpec
ToV1PersistentVolumeClaimSpec converts to corev1.PersistentVolumeClaimSpec.
type Phase ¶
type Phase string
Phase defines the ClusterDefinition and ClusterVersion CR .status.phase +enum +kubebuilder:validation:Enum={Available,Unavailable}
const ( AvailablePhase Phase = "Available" )
type PodAntiAffinity ¶
type PodAntiAffinity string
PodAntiAffinity defines pod anti-affinity strategy. +enum +kubebuilder:validation:Enum={Preferred,Required}
const ( Preferred PodAntiAffinity = "Preferred" Required PodAntiAffinity = "Required" )
type PointInTimeRefSpec ¶
type PointInTimeRefSpec struct {
// specify the time point to restore, with UTC as the time zone.
// +optional
Time *metav1.Time `json:"time,omitempty"`
// specify a reference source cluster to restore
// +optional
Ref RefNamespaceName `json:"ref,omitempty"`
}
type ProgressStatus ¶
type ProgressStatus string
ProgressStatus defines the status of the opsRequest progress. +enum +kubebuilder:validation:Enum={Processing,Pending,Failed,Succeed}
const ( PendingProgressStatus ProgressStatus = "Pending" ProcessingProgressStatus ProgressStatus = "Processing" FailedProgressStatus ProgressStatus = "Failed" SucceedProgressStatus ProgressStatus = "Succeed" )
type ProgressStatusDetail ¶
type ProgressStatusDetail struct {
// group describes which group the current object belongs to.
// if the objects of a component belong to the same group, we can ignore it.
// +optional
Group string `json:"group,omitempty"`
// objectKey is the unique key of the object.
// +kubebuilder:validation:Required
ObjectKey string `json:"objectKey"`
// status describes the state of processing the object.
// +kubebuilder:validation:Required
Status ProgressStatus `json:"status"`
// message is a human readable message indicating details about the object condition.
// +optional
Message string `json:"message,omitempty"`
// startTime is the start time of object processing.
// +optional
StartTime metav1.Time `json:"startTime,omitempty"`
// endTime is the completion time of object processing.
// +optional
EndTime metav1.Time `json:"endTime,omitempty"`
}
func (*ProgressStatusDetail) SetStatusAndMessage ¶
func (p *ProgressStatusDetail) SetStatusAndMessage(status ProgressStatus, message string)
type ProvisionPolicy ¶
type ProvisionPolicy struct {
// type defines the way to provision an account, either `CreateByStmt` or `ReferToExisting`.
// +kubebuilder:validation:Required
Type ProvisionPolicyType `json:"type"`
// scope is the scope to provision account, and the scope could be `anyPod` or `allPods`.
// +kubebuilder:default=AnyPods
Scope ProvisionScope `json:"scope"`
// statements will be used when Type is CreateByStmt.
// +optional
Statements *ProvisionStatements `json:"statements,omitempty"`
// secretRef will be used when Type is ReferToExisting.
// +optional
SecretRef *ProvisionSecretRef `json:"secretRef,omitempty"`
}
ProvisionPolicy defines the policy details for creating accounts.
type ProvisionPolicyType ¶
type ProvisionPolicyType string
ProvisionPolicyType defines the policy for creating accounts. +enum
const ( // CreateByStmt will create account w.r.t. deletion and creation statement given by provider. CreateByStmt ProvisionPolicyType = "CreateByStmt" // ReferToExisting will not create account, but create a secret by copying data from referred secret file. ReferToExisting ProvisionPolicyType = "ReferToExisting" )
type ProvisionScope ¶
type ProvisionScope string
ProvisionScope defines the scope (within component) of provision. +enum
const ( // AllPods will create accounts for all pods belong to the component. AllPods ProvisionScope = "AllPods" // AndyPods will only create accounts on one pod. AnyPods ProvisionScope = "AnyPods" )
type ProvisionSecretRef ¶
type ProvisionSecretRef struct {
// name refers to the name of the secret.
// +kubebuilder:validation:Required
Name string `json:"name"`
// namespace refers to the namespace of the secret.
// +kubebuilder:validation:Required
Namespace string `json:"namespace"`
}
ProvisionSecretRef defines the information of secret referred to.
type ProvisionStatements ¶
type ProvisionStatements struct {
// creation specifies statement how to create this account with required privileges.
// +kubebuilder:validation:Required
CreationStatement string `json:"creation"`
// deletion specifies statement how to delete this account.
// +optional
DeletionStatement string `json:"deletion,omitempty"`
}
ProvisionStatements defines the statements used to create accounts.
type Reconfigure ¶
type Reconfigure struct {
ComponentOps `json:",inline"`
// configurations defines which components perform the operation.
// +kubebuilder:validation:Required
// +kubebuilder:validation:MinItems=1
// +patchMergeKey=name
// +patchStrategy=merge,retainKeys
// +listType=map
// +listMapKey=name
Configurations []Configuration `json:"configurations" patchStrategy:"merge,retainKeys" patchMergeKey:"name"`
}
type ReconfiguringStatus ¶
type ReconfiguringStatus struct {
// configurationStatus describes the status of the component reconfiguring.
// +kubebuilder:validation:Required
// +kubebuilder:validation:MinItems=1
// +patchMergeKey=name
// +patchStrategy=merge,retainKeys
// +listType=map
// +listMapKey=name
ConfigurationStatus []ConfigurationStatus `json:"configurationStatus"`
}
type RefNamespaceName ¶
type ReloadOptions ¶
type ReloadOptions struct {
// unixSignalTrigger used to reload by sending a signal.
// +optional
UnixSignalTrigger *UnixSignalTrigger `json:"unixSignalTrigger,omitempty"`
// shellTrigger performs the reload command.
// +optional
ShellTrigger *ShellTrigger `json:"shellTrigger,omitempty"`
// goTplTrigger performs the reload command.
// +optional
TPLScriptTrigger *TPLScriptTrigger `json:"tplScriptTrigger"`
}
ReloadOptions defines reload options Only one of its members may be specified.
type ReplicationMemberStatus ¶
type ReplicationMemberStatus struct {
// Pod name.
// +kubebuilder:validation:Required
// +kubebuilder:default=Unknown
Pod string `json:"pod"`
}
type ReplicationSetStatus ¶
type ReplicationSetStatus struct {
// Primary status.
// +kubebuilder:validation:Required
Primary ReplicationMemberStatus `json:"primary"`
// Secondaries status.
// +optional
Secondaries []ReplicationMemberStatus `json:"secondaries,omitempty"`
}
type ReplicationSpec ¶
type ReplicationSpec struct {
// switchPolicies defines a collection of different types of switchPolicy, and each type of switchPolicy is limited to one.
// +kubebuilder:validation:Required
// +kubebuilder:validation:MinItems=1
SwitchPolicies []SwitchPolicy `json:"switchPolicies,omitempty"`
// switchCmdExecutorConfig configs how to get client SDK and perform switch statements.
// +kubebuilder:validation:Required
SwitchCmdExecutorConfig *SwitchCmdExecutorConfig `json:"switchCmdExecutorConfig"`
}
type ResourceConstraint ¶
type ResourceConstraint struct {
// The constraint for vcpu cores.
// +kubebuilder:validation:Required
CPU CPUConstraint `json:"cpu"`
// The constraint for memory size.
// +kubebuilder:validation:Required
Memory MemoryConstraint `json:"memory"`
}
func (ResourceConstraint) ValidateCPU ¶
func (m ResourceConstraint) ValidateCPU(cpu resource.Quantity) bool
ValidateCPU validate if the CPU matches the resource constraints
func (ResourceConstraint) ValidateMemory ¶
ValidateMemory validate if the memory matches the resource constraints
func (ResourceConstraint) ValidateResourceRequirements ¶
func (m ResourceConstraint) ValidateResourceRequirements(r *corev1.ResourceRequirements) bool
ValidateResourceRequirements validate if the resource matches the resource constraints
type RestoreFromSpec ¶
type RestoreFromSpec struct {
// use the backup name and component name for restore, support for multiple components' recovery.
// +optional
Backup []BackupRefSpec `json:"backup,omitempty"`
// specified the point in time to recovery
// +optional
PointInTime *PointInTimeRefSpec `json:"pointInTime,omitempty"`
}
type RetentionSpec ¶
type RetentionSpec struct {
// ttl is a time string ending with the 'd'|'D'|'h'|'H' character to describe how long
// the Backup should be retained. if not set, will be retained forever.
// +kubebuilder:validation:Pattern:=`^\d+[d|D|h|H]$`
// +optional
TTL *string `json:"ttl,omitempty"`
}
type Schedule ¶
type Schedule struct {
// schedule policy for snapshot backup.
// +optional
Snapshot *SchedulePolicy `json:"snapshot,omitempty"`
// schedule policy for datafile backup.
// +optional
Datafile *SchedulePolicy `json:"datafile,omitempty"`
// schedule policy for logfile backup.
// +optional
Logfile *SchedulePolicy `json:"logfile,omitempty"`
}
type SchedulePolicy ¶
type SchedulePolicy struct {
// the cron expression for schedule, the timezone is in UTC. see https://en.wikipedia.org/wiki/Cron.
// +kubebuilder:validation:Required
CronExpression string `json:"cronExpression"`
// enable or disable the schedule.
// +kubebuilder:validation:Required
Enable bool `json:"enable"`
}
type ServicePort ¶
type ServicePort struct {
// The name of this port within the service. This must be a DNS_LABEL.
// All ports within a ServiceSpec must have unique names. When considering
// the endpoints for a Service, this must match the 'name' field in the
// EndpointPort.
// +kubebuilder:validation:Required
Name string `json:"name,omitempty" protobuf:"bytes,1,opt,name=name"`
// The IP protocol for this port. Supports "TCP", "UDP", and "SCTP".
// Default is TCP.
// +kubebuilder:validation:Enum={TCP,UDP,SCTP}
// +default="TCP"
// +optional
Protocol corev1.Protocol `json:"protocol,omitempty" protobuf:"bytes,2,opt,name=protocol,casttype=Protocol"`
// The application protocol for this port.
// This field follows standard Kubernetes label syntax.
// Un-prefixed names are reserved for IANA standard service names (as per
// RFC-6335 and https://www.iana.org/assignments/service-names).
// Non-standard protocols should use prefixed names such as
// mycompany.com/my-custom-protocol.
// +optional
AppProtocol *string `json:"appProtocol,omitempty" protobuf:"bytes,6,opt,name=appProtocol"`
// The port that will be exposed by this service.
Port int32 `json:"port" protobuf:"varint,3,opt,name=port"`
// Number or name of the port to access on the pods targeted by the service.
// Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.
// If this is a string, it will be looked up as a named port in the
// target Pod's container ports. If this is not specified, the value
// of the 'port' field is used (an identity map).
// This field is ignored for services with clusterIP=None, and should be
// omitted or set equal to the 'port' field.
// More info: https://kubernetes.io/docs/concepts/services-networking/service/#defining-a-service
// +kubebuilder:validation:XIntOrString
// +optional
TargetPort intstr.IntOrString `json:"targetPort,omitempty" protobuf:"bytes,4,opt,name=targetPort"`
}
type ServiceSpec ¶
type ServiceSpec struct {
// The list of ports that are exposed by this service.
// More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies
// +patchMergeKey=port
// +patchStrategy=merge
// +listType=map
// +listMapKey=port
// +listMapKey=protocol
// +optional
Ports []ServicePort `json:"ports,omitempty" patchStrategy:"merge" patchMergeKey:"port" protobuf:"bytes,1,rep,name=ports"`
}
func (ServiceSpec) ToSVCSpec ¶
func (r ServiceSpec) ToSVCSpec() corev1.ServiceSpec
type ShellTrigger ¶
type ShellTrigger struct {
// exec used to execute for reload.
// +kubebuilder:validation:Required
Exec string `json:"exec"`
// scriptConfigMapRef used to execute for reload.
// +kubebuilder:validation:Required
ScriptConfigMapRef string `json:"scriptConfigMapRef"`
// Specify the namespace of the referenced the tpl script ConfigMap object.
// An empty namespace is equivalent to the "default" namespace.
// +kubebuilder:validation:MaxLength=63
// +kubebuilder:default="default"
// +optional
Namespace string `json:"namespace,omitempty"`
}
type SignalType ¶
type SignalType string
SignalType defines which signals are valid. +enum +kubebuilder:validation:Enum={SIGHUP,SIGINT,SIGQUIT,SIGILL,SIGTRAP,SIGABRT,SIGBUS,SIGFPE,SIGKILL,SIGUSR1,SIGSEGV,SIGUSR2,SIGPIPE,SIGALRM,SIGTERM,SIGSTKFLT,SIGCHLD,SIGCONT,SIGSTOP,SIGTSTP,SIGTTIN,SIGTTOU,SIGURG,SIGXCPU,SIGXFSZ,SIGVTALRM,SIGPROF,SIGWINCH,SIGIO,SIGPWR,SIGSYS}
const ( SIGHUP SignalType = "SIGHUP" SIGINT SignalType = "SIGINT" SIGQUIT SignalType = "SIGQUIT" SIGILL SignalType = "SIGILL" SIGTRAP SignalType = "SIGTRAP" SIGABRT SignalType = "SIGABRT" SIGBUS SignalType = "SIGBUS" SIGFPE SignalType = "SIGFPE" SIGKILL SignalType = "SIGKILL" SIGUSR1 SignalType = "SIGUSR1" SIGSEGV SignalType = "SIGSEGV" SIGUSR2 SignalType = "SIGUSR2" SIGPIPE SignalType = "SIGPIPE" SIGALRM SignalType = "SIGALRM" SIGTERM SignalType = "SIGTERM" SIGSTKFLT SignalType = "SIGSTKFLT" SIGCHLD SignalType = "SIGCHLD" SIGCONT SignalType = "SIGCONT" SIGSTOP SignalType = "SIGSTOP" SIGTSTP SignalType = "SIGTSTP" SIGTTIN SignalType = "SIGTTIN" SIGTTOU SignalType = "SIGTTOU" SIGURG SignalType = "SIGURG" SIGXCPU SignalType = "SIGXCPU" SIGXFSZ SignalType = "SIGXFSZ" SIGVTALRM SignalType = "SIGVTALRM" SIGPROF SignalType = "SIGPROF" SIGWINCH SignalType = "SIGWINCH" SIGIO SignalType = "SIGIO" SIGPWR SignalType = "SIGPWR" SIGSYS SignalType = "SIGSYS" )
type SnapshotPolicy ¶
type SnapshotPolicy struct {
BasePolicy `json:",inline"`
// execute hook commands for backup.
// +optional
Hooks *BackupPolicyHook `json:"hooks,omitempty"`
}
type SwitchCmdExecutorConfig ¶
type SwitchCmdExecutorConfig struct {
CommandExecutorEnvItem `json:",inline"`
// switchSteps definition, users can customize the switching steps on the provided three roles - NewPrimary, OldPrimary, and Secondaries.
// the same role can customize multiple steps in the order of the list, and KubeBlocks will perform switching operations in the defined order.
// if switchStep is not set, we will try to use the built-in switchStep for the database engine with built-in support.
// +kubebuilder:validation:Required
// +kubebuilder:validation:MinItems=1
// +optional
SwitchSteps []SwitchStep `json:"switchSteps"`
}
type SwitchPolicy ¶
type SwitchPolicy struct {
// switchPolicyType defines type of the switchPolicy.
// MaximumAvailability: when the primary is active, do switch if the synchronization delay = 0 in the user-defined lagProbe data delay detection logic, otherwise do not switch. The primary is down, switch immediately.
// MaximumDataProtection: when the primary is active, do switch if synchronization delay = 0 in the user-defined lagProbe data lag detection logic, otherwise do not switch. If the primary is down, if it can be judged that the primary and secondary data are consistent, then do the switch, otherwise do not switch.
// Noop: KubeBlocks will not perform high-availability switching on components. Users need to implement HA by themselves.
// +kubebuilder:validation:Required
// +kubebuilder:default=MaximumAvailability
Type SwitchPolicyType `json:"type"`
// switchStatements defines switching actions according to their respective roles, We divide all pods into three switchStatement role={Promote,Demote,Follow}.
// Promote: candidate primary after elected, which to be promoted
// Demote: primary before switch, which to be demoted
// Follow: the other secondaries that are not selected as the primary, which to follow the new primary
// if switchStatements is not set,we will try to use the built-in switchStatements for the database engine with built-in support.
// +optional
SwitchStatements *SwitchStatements `json:"switchStatements,omitempty"`
}
type SwitchPolicyType ¶
type SwitchPolicyType string
SwitchPolicyType defines switchPolicy type. +enum +kubebuilder:validation:Enum={MaximumAvailability, MaximumDataProtection, Noop}
const ( MaximumAvailability SwitchPolicyType = "MaximumAvailability" MaximumDataProtection SwitchPolicyType = "MaximumDataProtection" Noop SwitchPolicyType = "Noop" )
type SwitchStatements ¶
type SwitchStatements struct {
// promote defines the switching actions for the candidate primary which to be promoted.
// +optional
Promote []string `json:"promote,omitempty"`
// demote defines the switching actions for the old primary which to be demoted.
// +optional
Demote []string `json:"demote,omitempty"`
// follow defines the switching actions for the other secondaries which are not selected as the primary.
// +optional
Follow []string `json:"follow,omitempty"`
}
type SwitchStep ¶
type SwitchStep struct {
CommandExecutorItem `json:",inline"`
// role determines which role to execute the command on, role is divided into three roles NewPrimary, OldPrimary, and Secondaries.
Role SwitchStepRole `json:"role"`
}
type SwitchStepRole ¶
type SwitchStepRole string
SwitchStepRole defines the role to execute the switch command. +enum +kubebuilder:validation:Enum={NewPrimary, OldPrimary, Secondaries}
const ( NewPrimary SwitchStepRole = "NewPrimary" OldPrimary SwitchStepRole = "OldPrimary" Secondaries SwitchStepRole = "Secondaries" )
type SystemAccountConfig ¶
type SystemAccountConfig struct {
// name is the name of a system account.
// +kubebuilder:validation:Required
Name AccountName `json:"name"`
// provisionPolicy defines how to create account.
// +kubebuilder:validation:Required
ProvisionPolicy ProvisionPolicy `json:"provisionPolicy"`
}
SystemAccountConfig specifies how to create and delete system accounts.
type SystemAccountSpec ¶
type SystemAccountSpec struct {
// cmdExecutorConfig configs how to get client SDK and perform statements.
// +kubebuilder:validation:Required
CmdExecutorConfig *CmdExecutorConfig `json:"cmdExecutorConfig"`
// passwordConfig defines the pattern to generate password.
// +kubebuilder:validation:Required
PasswordConfig PasswordConfig `json:"passwordConfig"`
// accounts defines system account config settings.
// +kubebuilder:validation:Required
// +kubebuilder:validation:MinItems=1
// +patchMergeKey=name
// +patchStrategy=merge,retainKeys
// +listType=map
// +listMapKey=name
Accounts []SystemAccountConfig `json:"accounts" patchStrategy:"merge,retainKeys" patchMergeKey:"name"`
}
SystemAccountSpec specifies information to create system accounts.
type TLSSecretRef ¶
type TLSSecretRef struct {
// Name of the Secret
// +kubebuilder:validation:Required
Name string `json:"name"`
// CA cert key in Secret
// +kubebuilder:validation:Required
CA string `json:"ca"`
// Cert key in Secret
// +kubebuilder:validation:Required
Cert string `json:"cert"`
// Key of TLS private key in Secret
// +kubebuilder:validation:Required
Key string `json:"key"`
}
TLSSecretRef defines Secret contains Tls certs
type TPLScriptTrigger ¶
type TPLScriptTrigger struct {
// scriptConfigMapRef used to execute for reload.
// +kubebuilder:validation:Required
ScriptConfigMapRef string `json:"scriptConfigMapRef"`
// Specify the namespace of the referenced the tpl script ConfigMap object.
// An empty namespace is equivalent to the "default" namespace.
// +kubebuilder:validation:MaxLength=63
// +kubebuilder:default="default"
// +optional
Namespace string `json:"namespace,omitempty"`
// Specify synchronize updates parameters to the config manager.
// +optional
Sync *bool `json:"sync,omitempty"`
}
type TargetInstance ¶
type TargetInstance struct {
// select instance of corresponding role for backup, role are:
// - the name of Leader/Follower/Leaner for Consensus component.
// - primary or secondary for Replication component.
// finally, invalid role of the component will be ignored.
// such as if workload type is Replication and component's replicas is 1,
// the secondary role is invalid. and it also will be ignored when component is Stateful/Stateless.
// the role will be transformed to a role LabelSelector for BackupPolicy's target attribute.
// +optional
Role string `json:"role"`
// refer to spec.componentDef.systemAccounts.accounts[*].name in ClusterDefinition.
// the secret created by this account will be used to connect the database.
// if not set, the secret created by spec.ConnectionCredential of the ClusterDefinition will be used.
// it will be transformed to a secret for BackupPolicy's target secret.
// +optional
Account string `json:"account,omitempty"`
// connectionCredentialKey defines connection credential key in secret
// which created by spec.ConnectionCredential of the ClusterDefinition.
// it will be ignored when "account" is set.
ConnectionCredentialKey ConnectionCredentialKey `json:"connectionCredentialKey,omitempty"`
}
type TenancyType ¶
type TenancyType string
TenancyType for cluster tenant resources. +enum +kubebuilder:validation:Enum={SharedNode,DedicatedNode}
const ( DedicatedNode TenancyType = "DedicatedNode" )
type TerminationPolicyType ¶
type TerminationPolicyType string
TerminationPolicyType defines termination policy types. +enum +kubebuilder:validation:Enum={DoNotTerminate,Halt,Delete,WipeOut}
const ( DoNotTerminate TerminationPolicyType = "DoNotTerminate" Halt TerminationPolicyType = "Halt" Delete TerminationPolicyType = "Delete" WipeOut TerminationPolicyType = "WipeOut" )
type UnixSignalTrigger ¶
type UnixSignalTrigger struct {
// signal is valid for unix signal.
// e.g: SIGHUP
// url: ../../internal/configuration/configmap/handler.go:allUnixSignals
// +kubebuilder:validation:Required
Signal SignalType `json:"signal"`
// processName is process name, sends unix signal to proc.
// +kubebuilder:validation:Required
// +kubebuilder:validation:Pattern:=`^[a-z0-9]([a-z0-9\.\-]*[a-z0-9])?$`
ProcessName string `json:"processName"`
}
type UpdateStrategy ¶
type UpdateStrategy string
UpdateStrategy defines Cluster Component update strategy. +enum +kubebuilder:validation:Enum={Serial,BestEffortParallel,Parallel}
const ( SerialStrategy UpdateStrategy = "Serial" BestEffortParallelStrategy UpdateStrategy = "BestEffortParallel" ParallelStrategy UpdateStrategy = "Parallel" )
type UpdatedParameters ¶
type UpdatedParameters struct {
// addedKeys describes the key added.
// +optional
AddedKeys map[string]string `json:"addedKeys,omitempty"`
// deletedKeys describes the key deleted.
// +optional
DeletedKeys map[string]string `json:"deletedKeys,omitempty"`
// updatedKeys describes the key updated.
// +optional
UpdatedKeys map[string]string `json:"updatedKeys,omitempty"`
}
type Upgrade ¶
type Upgrade struct {
// clusterVersionRef references ClusterVersion name.
// +kubebuilder:validation:Required
ClusterVersionRef string `json:"clusterVersionRef"`
}
Upgrade defines the variables of upgrade operation.
type UpgradePolicy ¶
type UpgradePolicy string
UpgradePolicy defines the policy of reconfiguring. +enum +kubebuilder:validation:Enum={simple,parallel,rolling,autoReload,operatorSyncUpdate}
const ( NonePolicy UpgradePolicy = "none" NormalPolicy UpgradePolicy = "simple" RestartPolicy UpgradePolicy = "parallel" RollingPolicy UpgradePolicy = "rolling" AutoReload UpgradePolicy = "autoReload" OperatorSyncUpdate UpgradePolicy = "operatorSyncUpdate" )
type VersionsContext ¶
type VersionsContext struct {
// Provide ClusterDefinition.spec.componentDefs.podSpec.initContainers override
// values, typical scenarios are application container image updates.
// +kubebuilder:pruning:PreserveUnknownFields
// +patchMergeKey=name
// +patchStrategy=merge
// +listType=map
// +listMapKey=name
// +optional
InitContainers []corev1.Container `json:"initContainers,omitempty"`
// Provide ClusterDefinition.spec.componentDefs.podSpec.containers override
// values, typical scenarios are application container image updates.
// +kubebuilder:pruning:PreserveUnknownFields
// +patchMergeKey=name
// +patchStrategy=merge
// +listType=map
// +listMapKey=name
// +optional
Containers []corev1.Container `json:"containers,omitempty"`
}
type VerticalScaling ¶
type VerticalScaling struct {
ComponentOps `json:",inline"`
// resources specifies the computing resource size of verticalScaling.
// +kubebuilder:pruning:PreserveUnknownFields
corev1.ResourceRequirements `json:",inline"`
// class specifies the class name of the component
// +optional
Class string `json:"class,omitempty"`
}
VerticalScaling defines the variables that need to input when scaling compute resources.
type VolumeExpansion ¶
type VolumeExpansion struct {
ComponentOps `json:",inline"`
// volumeClaimTemplates specifies the storage size and volumeClaimTemplate name.
// +kubebuilder:validation:Required
// +patchMergeKey=name
// +patchStrategy=merge,retainKeys
// +listType=map
// +listMapKey=name
VolumeClaimTemplates []OpsRequestVolumeClaimTemplate `json:"volumeClaimTemplates" patchStrategy:"merge,retainKeys" patchMergeKey:"name"`
}
VolumeExpansion defines the variables of volume expansion operation.
type VolumeType ¶
type VolumeType string
VolumeType defines volume type for backup data or log. +enum +kubebuilder:validation:Enum={data,log}
const ( VolumeTypeData VolumeType = "data" VolumeTypeLog VolumeType = "log" )
type VolumeTypeSpec ¶
type VolumeTypeSpec struct {
// name definition is the same as the name of the VolumeMounts field in PodSpec.Container,
// similar to the relations of Volumes[*].name and VolumesMounts[*].name in Pod.Spec.
// +kubebuilder:validation:Required
// +kubebuilder:validation:Pattern:=`^[a-z0-9]([a-z0-9\.\-]*[a-z0-9])?$`
Name string `json:"name"`
// type is in enum of {data, log}.
// VolumeTypeData: the volume is for the persistent data storage.
// VolumeTypeLog: the volume is for the persistent log storage.
// +optional
Type VolumeType `json:"type,omitempty"`
}
type WorkloadType ¶
type WorkloadType string
WorkloadType defines ClusterDefinition's component workload type. +enum +kubebuilder:validation:Enum={Stateless,Stateful,Consensus,Replication}
const ( Stateless WorkloadType = "Stateless" Stateful WorkloadType = "Stateful" Consensus WorkloadType = "Consensus" Replication WorkloadType = "Replication" )
Source Files
¶
- backuppolicytemplate_types.go
- cluster_types.go
- cluster_webhook.go
- clusterdefinition_types.go
- clusterdefinition_webhook.go
- clusterversion_types.go
- clusterversion_webhook.go
- componentclassdefinition_types.go
- componentresourceconstraint_types.go
- configconstraint_types.go
- doc.go
- groupversion_info.go
- opsrequest_conditions.go
- opsrequest_types.go
- opsrequest_webhook.go
- type.go