Documentation ¶
Index ¶
- Constants
- Variables
- func AffinityDefault(role Role, crName string) *corev1.Affinity
- func ConvertToResourceRequirements(resources *hdfsv1alpha1.ResourcesSpec) *corev1.ResourceRequirements
- func CreateClusterServiceName(instanceName string) string
- func CreateComponentLog4jPropertiesName(component ContainerComponent) string
- func CreateDataNodeServiceName(instanceName string, groupName string) string
- func CreateDataNodeStatefulSetName(instanceName string, groupName string) string
- func CreateDnsDomain(svcName, namespace, clusterDomain string, port int32) string
- func CreateJournalNodeServiceName(instanceName string, groupName string) string
- func CreateJournalNodeStatefulSetName(instanceName string, groupName string) string
- func CreateJournalUrl(jnSvcs []string, instanceName string) string
- func CreateKvContentByReplicas(replicas int32, keyTemplate string, valueTemplate string) [][2]string
- func CreateNameNodeServiceName(instanceName string, groupName string) string
- func CreateNameNodeStatefulSetName(instanceName string, groupName string) string
- func CreateNetworkUrl(podName string, svcName, namespace, clusterDomain string, port int32) string
- func CreateNetworksByReplicates(replicates int32, ...) []string
- func CreatePodNamesByReplicas(replicas int32, statefulResourceName string) []string
- func CreateRoleCfgCacheKey(instanceName string, role Role, groupName string) string
- func CreateRoleGroupLoggingConfigMapName(instanceName string, role string, groupName string) string
- func CreateRoleServiceName(instanceName string, role Role, groupName string) string
- func CreateRoleStatefulSetName(instanceName string, role Role, groupName string) string
- func CreateServiceAccountName(instanceName string) string
- func CreateXmlContentByReplicas(replicas int32, keyTemplate string, valueTemplate string) []util.XmlNameValuePair
- func GetCommonCommand() []string
- func GetCommonContainerEnv(zkDiscoveryZNode string, container ContainerComponent) []corev1.EnvVar
- func GetListenerLabels(listenerClass ListenerClass) map[string]string
- func GetMergedRoleGroupCfg(role Role, instanceName string, groupName string) any
- func MakeHadoopPolicyData() string
- func MakeLog4jPropertiesData(containerComponent ContainerComponent) string
- func MakeSecurityPropertiesData() string
- func MakeSslClientData() string
- func MakeSslServerData() string
- func MergeObjects(left interface{}, right interface{}, exclude []string)
- func NameNodePodNames(instanceName string, groupName string) []string
- func OverrideConfigurations(cm *corev1.ConfigMap, overrides *hdfsv1alpha1.ConfigOverridesSpec)
- func OverrideEnvVars(origin *[]corev1.EnvVar, override map[string]string)
- func ReconcilerDoHandler(ctx context.Context, reconcilers []ResourceReconciler) (ctrl.Result, error)
- func ReleaseCache()
- type AffinitySetter
- type BaseResourceReconciler
- type BaseRoleGroupReconciler
- type BaseRoleLoggingDataBuilder
- type BaseRoleReconciler
- type Command
- type CommandArgs
- type ConditionsGetter
- type ConfigurationOverride
- type ConfigurationStyleReconciler
- type ContainerBuilder
- type ContainerComponent
- type ContainerEnv
- type ContainerName
- type ContainerPorts
- type CoreSiteXmlGenerator
- type DataNodeHdfsSiteXmlGenerator
- type GeneralConfigMapReconciler
- type GeneralResourceStyleReconciler
- type HeadlessServiceType
- type InstanceAttributes
- type ListenerClass
- type LivenessProbe
- type Log4jLoggingDataBuilder
- type LogBuilderAppender
- type LogBuilderLoggers
- type LoggingPluggingDataBuilder
- type LoggingRecociler
- type MapCache
- type MultiConfigurationStyleReconciler
- type MultiResourceReconcilerBuilder
- type NameNodeHdfsSiteXmlGenerator
- type OverrideExistLogging
- type OverrideExistLoggingRecociler
- type PDBReconciler
- type ReadinessProbe
- type ResourceBuilder
- type ResourceBuilderType
- type ResourceClient
- type ResourceHandler
- type ResourceReconciler
- type Role
- type RoleConfigSpec
- type RoleGroupRecociler
- type RoleLabels
- type RoleLoggingDataBuilder
- type RoleReconciler
- type ServiceBuilder
- type VolumeMount
- type WorkloadOverride
- type WorkloadStyleReconciler
Constants ¶
const ( LabelCrName = "app.kubernetes.io/Name" LabelComponent = "app.kubernetes.io/component" LabelManagedBy = "app.kubernetes.io/managed-by" )
const ( HdfsConsoleLogAppender = "CONSOLE" HdfsFileLogAppender = "FILE" )
const ListenerAnnotationKey = ListenerStorageClass + "/listener-class"
const ListenerStorageClass = "listeners.zncdata.dev"
const ZookeeperHdfsDiscoveryKey = "ZOOKEEPER"
Variables ¶
var MergedCache = NewMapCache()
Functions ¶
func ConvertToResourceRequirements ¶
func ConvertToResourceRequirements(resources *hdfsv1alpha1.ResourcesSpec) *corev1.ResourceRequirements
func CreateComponentLog4jPropertiesName ¶
func CreateComponentLog4jPropertiesName(component ContainerComponent) string
func CreateDnsDomain ¶
func CreateJournalUrl ¶
CreateJournalUrl create Journal Url
func CreateNetworkUrl ¶
func CreatePodNamesByReplicas ¶
CreatePodNamesByReplicas create pod names by replicas
func CreateRoleCfgCacheKey ¶
func CreateRoleGroupLoggingConfigMapName ¶
CreateRoleGroupLoggingConfigMapName create role group logging config-map name
func CreateRoleServiceName ¶
func CreateXmlContentByReplicas ¶
func CreateXmlContentByReplicas(replicas int32, keyTemplate string, valueTemplate string) []util.XmlNameValuePair
func GetCommonCommand ¶
func GetCommonCommand() []string
func GetCommonContainerEnv ¶
func GetCommonContainerEnv(zkDiscoveryZNode string, container ContainerComponent) []corev1.EnvVar
func GetListenerLabels ¶
func GetListenerLabels(listenerClass ListenerClass) map[string]string
func GetMergedRoleGroupCfg ¶
func MakeHadoopPolicyData ¶
func MakeHadoopPolicyData() string
MakeHadoopPolicyData make hadoop-policy.xml data
func MakeLog4jPropertiesData ¶
func MakeLog4jPropertiesData(containerComponent ContainerComponent) string
func MakeSecurityPropertiesData ¶
func MakeSecurityPropertiesData() string
MakeSecurityPropertiesData make security.properties data
func MergeObjects ¶
func MergeObjects(left interface{}, right interface{}, exclude []string)
MergeObjects merge right to left, if field not in left, it will be added from right, else skip. Node: If variable is a pointer, it will be modified directly.
func NameNodePodNames ¶
func OverrideConfigurations ¶
func OverrideConfigurations(cm *corev1.ConfigMap, overrides *hdfsv1alpha1.ConfigOverridesSpec)
OverrideConfigurations override configurations override the content of the configMap
func ReconcilerDoHandler ¶
func ReleaseCache ¶
func ReleaseCache()
Types ¶
type AffinitySetter ¶
type BaseResourceReconciler ¶
type BaseResourceReconciler[T client.Object, G any] struct { Instance T Scheme *runtime.Scheme Client client.Client GroupName string MergedLabels map[string]string MergedCfg G }
func NewBaseResourceReconciler ¶
func NewBaseResourceReconciler[T client.Object, G any]( scheme *runtime.Scheme, instance T, client client.Client, groupName string, mergedLabels map[string]string, mergedCfg G) *BaseResourceReconciler[T, G]
NewBaseResourceReconciler new a BaseResourceReconciler
func (*BaseResourceReconciler[T, G]) ReconcileResource ¶
func (b *BaseResourceReconciler[T, G]) ReconcileResource( ctx context.Context, builder ResourceBuilderType) (ctrl.Result, error)
type BaseRoleGroupReconciler ¶
type BaseRoleGroupReconciler[T client.Object] struct { Scheme *runtime.Scheme Instance T Client client.Client GroupName string RoleLabels map[string]string Log logr.Logger Reconcilers []ResourceReconciler }
func (*BaseRoleGroupReconciler[T]) AppendLabels ¶
func (m *BaseRoleGroupReconciler[T]) AppendLabels(additionalLabels map[string]string) map[string]string
AppendLabels merge role labels and additional labels
func (*BaseRoleGroupReconciler[T]) ReconcileGroup ¶
ReconcileGroup ReconcileRole implements the Role interface
type BaseRoleLoggingDataBuilder ¶
type BaseRoleLoggingDataBuilder struct {
Role Role
}
func (*BaseRoleLoggingDataBuilder) MakeContainerLogData ¶
func (b *BaseRoleLoggingDataBuilder) MakeContainerLogData() map[string]string
type BaseRoleReconciler ¶
type BaseRoleReconciler[T client.Object] struct { Scheme *runtime.Scheme Instance T Client client.Client Log logr.Logger Labels map[string]string Role Role }
func (*BaseRoleReconciler[T]) GetLabels ¶
func (r *BaseRoleReconciler[T]) GetLabels() map[string]string
type CommandArgs ¶
type CommandArgs interface {
CommandArgs() []string
}
type ConditionsGetter ¶
type ConfigurationOverride ¶
type ConfigurationStyleReconciler ¶
type ConfigurationStyleReconciler[T client.Object, G any] struct { GeneralResourceStyleReconciler[T, G] }
ConfigurationStyleReconciler configuration style reconciler this reconciler is used to reconcile the configuration style resources such as configMap, secret, etc. it will do the following things:
- build resource
- apply the resource
Additional:
- configuration override support
func (*ConfigurationStyleReconciler[T, G]) DoReconcile ¶
func (s *ConfigurationStyleReconciler[T, G]) DoReconcile( ctx context.Context, resource client.Object, instance ResourceHandler, ) (ctrl.Result, error)
type ContainerBuilder ¶
type ContainerBuilder struct { Image string ImagePullPolicy corev1.PullPolicy Resources corev1.ResourceRequirements }
ContainerBuilder container builder contains: image, imagePullPolicy, resource, ports should be required optional: name, command, commandArgs, containerEnv, volumeMount, livenessProbe, readinessProbe should be optional, optional fields should be implemented by the struct that embeds ContainerBuilder optional fields name usually should not be set, because container name can generate by deployment, statefulSet, daemonSet..
func NewContainerBuilder ¶
func NewContainerBuilder( Image string, ImagePullPolicy corev1.PullPolicy, Resource corev1.ResourceRequirements, ) *ContainerBuilder
func (*ContainerBuilder) Build ¶
func (b *ContainerBuilder) Build(handler interface{}) corev1.Container
type ContainerComponent ¶
type ContainerComponent string
ContainerComponent use for define container name
type ContainerEnv ¶
type ContainerName ¶
type ContainerName interface {
ContainerName() string
}
type ContainerPorts ¶
type ContainerPorts interface {
ContainerPorts() []corev1.ContainerPort
}
type CoreSiteXmlGenerator ¶
type CoreSiteXmlGenerator struct {
InstanceName string
}
func (*CoreSiteXmlGenerator) Generate ¶
func (c *CoreSiteXmlGenerator) Generate() string
type DataNodeHdfsSiteXmlGenerator ¶
type DataNodeHdfsSiteXmlGenerator struct { NameNodeHdfsSiteXmlGenerator DataNodeConfig map[string]string }
func NewDataNodeHdfsSiteXmlGenerator ¶
func NewDataNodeHdfsSiteXmlGenerator( instanceName string, groupName string, nameNodeReplicas int32, nameSpace string, clusterDomain string, hdfsReplication int32, dataNodeConfig map[string]string) *DataNodeHdfsSiteXmlGenerator
NewDataNodeHdfsSiteXmlGenerator new a DataNodeHdfsSiteXmlGenerator
func (*DataNodeHdfsSiteXmlGenerator) Generate ¶
func (c *DataNodeHdfsSiteXmlGenerator) Generate() string
Generate make hdfs-site.xml data
type GeneralConfigMapReconciler ¶
type GeneralConfigMapReconciler[T client.Object, G any] struct { GeneralResourceStyleReconciler[T, G] // contains filtered or unexported fields }
GeneralConfigMapReconciler general config map reconciler generator it can be used to generate config map reconciler for simple config map parameters: 1. resourceBuilerFunc: a function to create a new resource
func NewGeneralConfigMap ¶
func NewGeneralConfigMap[T client.Object, G any]( scheme *runtime.Scheme, instance T, client client.Client, groupName string, mergedLabels map[string]string, mergedCfg G, resourceBuilderFunc func() (client.Object, error), configurationOverrideFunc func() error, ) *GeneralConfigMapReconciler[T, G]
NewGeneralConfigMap new a GeneralConfigMapReconciler
func (*GeneralConfigMapReconciler[T, G]) ConfigurationOverride ¶
func (c *GeneralConfigMapReconciler[T, G]) ConfigurationOverride(resource client.Object)
ConfigurationOverride implement ConfigurationOverride interface
type GeneralResourceStyleReconciler ¶
type GeneralResourceStyleReconciler[T client.Object, G any] struct { BaseResourceReconciler[T, G] }
GeneralResourceStyleReconciler general style resource reconcile this reconciler is used to reconcile the general style resources such as configMap, secret, svc, etc.
func (*GeneralResourceStyleReconciler[T, G]) DoReconcile ¶
func (s *GeneralResourceStyleReconciler[T, G]) DoReconcile( ctx context.Context, resource client.Object, _ ResourceHandler, ) (ctrl.Result, error)
type HeadlessServiceType ¶
type HeadlessServiceType string
const ( Service HeadlessServiceType = "" HeadlessService HeadlessServiceType = "None" )
type InstanceAttributes ¶
type InstanceAttributes interface { RoleConfigSpec GetClusterConfig() any GetNamespace() string GetInstanceName() string }
type ListenerClass ¶
type ListenerClass string
const ( // ClusterIp is the default listener class for internal communication ClusterIp ListenerClass = "cluster-internal" // NodePort is for external communication NodePort ListenerClass = "external-unstable" LoadBalancerClass ListenerClass = "external-stable" )
type LivenessProbe ¶
type Log4jLoggingDataBuilder ¶
type Log4jLoggingDataBuilder struct { Loggers []LogBuilderLoggers Console *LogBuilderAppender File *LogBuilderAppender }
func CreateLog4jBuilder ¶
func CreateLog4jBuilder(containerLogging *hdfsv1alpha1.LoggingConfigSpec, consoleAppenderName, fileAppenderName string) *Log4jLoggingDataBuilder
func (*Log4jLoggingDataBuilder) MakeContainerLogProperties ¶
func (l *Log4jLoggingDataBuilder) MakeContainerLogProperties(origin string) string
MakeContainerLogProperties make log4j properties
func (*Log4jLoggingDataBuilder) MakeOverrideLoggerProperties ¶
func (l *Log4jLoggingDataBuilder) MakeOverrideLoggerProperties() map[string]string
MakeOverrideLoggerProperties get override logger properties do works below: 1. make custom loggers properties 2. make console logger properties 3. make file appender logger properties 4. merge all the properties
type LogBuilderAppender ¶
type LogBuilderAppender struct {
// contains filtered or unexported fields
}
type LogBuilderLoggers ¶
type LogBuilderLoggers struct {
// contains filtered or unexported fields
}
type LoggingPluggingDataBuilder ¶
LoggingPluggingDataBuilder all logging data builder abstract interface for now, only support log4j todo: support other log framework, such as logback, log4j2 etc
type LoggingRecociler ¶
type LoggingRecociler[T client.Object, G any] struct { GeneralResourceStyleReconciler[T, G] RoleLoggingDataBuilder RoleLoggingDataBuilder InstanceGetter InstanceAttributes ConfigmapName string // contains filtered or unexported fields }
func NewLoggingReconciler ¶
func NewLoggingReconciler[T client.Object]( scheme *runtime.Scheme, instance T, client client.Client, groupName string, mergedLabels map[string]string, mergedCfg any, logDataBuilder RoleLoggingDataBuilder, role Role, configmapName string, ) *LoggingRecociler[T, any]
NewLoggingReconciler new logging reconcile
type MapCache ¶
type MapCache struct {
// contains filtered or unexported fields
}
func NewMapCache ¶
func NewMapCache() *MapCache
type MultiConfigurationStyleReconciler ¶
type MultiConfigurationStyleReconciler[T client.Object, G any] struct { BaseResourceReconciler[T, G] }
MultiConfigurationStyleReconciler multi configuration object reconciler
func NewMultiConfigurationStyleReconciler ¶
func NewMultiConfigurationStyleReconciler[T client.Object, G any]( scheme *runtime.Scheme, instance T, client client.Client, groupName string, mergedLabels map[string]string, mergedCfg G, ) *MultiConfigurationStyleReconciler[T, G]
NewMultiConfigurationStyleReconciler newMultiConfigurationStyleReconciler new a MultiConfigurationStyleReconciler
func (*MultiConfigurationStyleReconciler[T, G]) ReconcileResource ¶
func (s *MultiConfigurationStyleReconciler[T, G]) ReconcileResource( ctx context.Context, builder ResourceBuilderType) (ctrl.Result, error)
ReconcileResource implement ResourceReconcile interface
type MultiResourceReconcilerBuilder ¶
type MultiResourceReconcilerBuilder interface {
Build(ctx context.Context) ([]ResourceBuilder, error)
}
MultiResourceReconcilerBuilder multi resource builder it will build multi resources for example, it will build more than one configMap currently, it is used to build the configMap see MultiConfigurationStyleReconciler
type NameNodeHdfsSiteXmlGenerator ¶
type NameNodeHdfsSiteXmlGenerator struct { NameNodeReplicas int32 InstanceName string GroupName string NameSpace string ClusterDomain string // contains filtered or unexported fields }
func NewNameNodeHdfsSiteXmlGenerator ¶
func NewNameNodeHdfsSiteXmlGenerator( instanceName string, groupName string, nameNodeReplicas int32, nameSpace string, clusterDomain string, hdfsReplication int32) *NameNodeHdfsSiteXmlGenerator
NewNameNodeHdfsSiteXmlGenerator new a NameNodeHdfsSiteXmlGenerator
func (*NameNodeHdfsSiteXmlGenerator) Generate ¶
func (c *NameNodeHdfsSiteXmlGenerator) Generate() string
type OverrideExistLogging ¶
type OverrideExistLoggingRecociler ¶
type OverrideExistLoggingRecociler[T client.Object, G any] struct { GeneralResourceStyleReconciler[T, G] RoleLoggingDataBuilder RoleLoggingDataBuilder }
OverrideExistLoggingRecociler override exist logging config reconciler if log properties exist in some configmap, we need to override it
func NewOverrideExistLoggingRecociler ¶
func NewOverrideExistLoggingRecociler[T client.Object]( scheme *runtime.Scheme, instance T, client client.Client, groupName string, mergedLabels map[string]string, mergedCfg any, logDataBuilder RoleLoggingDataBuilder, ) *OverrideExistLoggingRecociler[T, any]
NewOverrideExistLoggingRecociler new OverrideExistLoggingReconcile
func (*OverrideExistLoggingRecociler[T, G]) OverrideExist ¶
func (l *OverrideExistLoggingRecociler[T, G]) OverrideExist(exist *corev1.ConfigMap)
OverrideExist override exist logging config
type PDBReconciler ¶
type PDBReconciler[T client.Object] struct { GeneralResourceStyleReconciler[T, any] // contains filtered or unexported fields }
func NewReconcilePDB ¶
func NewReconcilePDB[T client.Object]( client client.Client, schema *runtime.Scheme, cr T, labels map[string]string, name string, pdb *hdfsv1alpha1.PodDisruptionBudgetSpec, ) *PDBReconciler[T]
type ReadinessProbe ¶
type ResourceBuilder ¶
type ResourceBuilderType ¶
type ResourceBuilderType struct { Single ResourceBuilder Multi MultiResourceReconcilerBuilder }
ResourceBuilderType union type for resource builder it will build the single resource or multi resources
func NewMultiResourceBuilder ¶
func NewMultiResourceBuilder(builder MultiResourceReconcilerBuilder) ResourceBuilderType
func NewSingleResourceBuilder ¶
func NewSingleResourceBuilder(builder ResourceBuilder) ResourceBuilderType
type ResourceClient ¶
func NewResourceClient ¶
NewResourceClient new resource client
type ResourceHandler ¶
type ResourceReconciler ¶
type RoleConfigSpec ¶
type RoleGroupRecociler ¶
type RoleGroupRecociler interface { ReconcileGroup(ctx context.Context) (ctrl.Result, error) MergeLabels(mergedGroupCfg any) map[string]string RegisterResource() }
RoleGroupRecociler RoleReconcile role reconciler interface all role reconciler should implement this interface
type RoleLabels ¶
func (*RoleLabels) GetLabels ¶
func (r *RoleLabels) GetLabels() map[string]string
type RoleLoggingDataBuilder ¶
type RoleReconciler ¶
type ServiceBuilder ¶
type ServiceBuilder struct { Name string Namespace string Labels map[string]string Ports []corev1.ServicePort ClusterIP *HeadlessServiceType Type *corev1.ServiceType }
ServiceBuilder service builder contains: name, namespace, labels, ports, these should be required optional: clusterIP, serviceType should be optional,
func NewServiceBuilder ¶
func NewServiceBuilder( name string, namespace string, labels map[string]string, ports []corev1.ServicePort, ) *ServiceBuilder
func (*ServiceBuilder) Build ¶
func (s *ServiceBuilder) Build() *corev1.Service
func (*ServiceBuilder) SetClusterIP ¶
func (s *ServiceBuilder) SetClusterIP(ip *HeadlessServiceType) *ServiceBuilder
func (*ServiceBuilder) SetType ¶
func (s *ServiceBuilder) SetType(t *corev1.ServiceType) *ServiceBuilder
type VolumeMount ¶
type VolumeMount interface {
VolumeMount() []corev1.VolumeMount
}
type WorkloadOverride ¶
type WorkloadStyleReconciler ¶
type WorkloadStyleReconciler[T client.Object, G any] struct { BaseResourceReconciler[T, G] Replicas int32 }
WorkloadStyleReconciler workload style reconciler this reconciler is used to reconcile the workload style resources such as workload, statefulSet, etc.
it will do the following things:
- build resource
- apply the resource
- check if the resource is satisfied
- if not, return requeue
- if satisfied, return nil
Additional:
- command and env override can support
- logging override can support
func (*WorkloadStyleReconciler[T, G]) CheckPodsSatisfied ¶
func (s *WorkloadStyleReconciler[T, G]) CheckPodsSatisfied(ctx context.Context) (bool, error)
func (*WorkloadStyleReconciler[T, G]) DoReconcile ¶
func (s *WorkloadStyleReconciler[T, G]) DoReconcile( ctx context.Context, resource client.Object, instance ResourceHandler, ) (ctrl.Result, error)