Skip to content

Commit

Permalink
Add Kafka monitor API (#1014)
Browse files Browse the repository at this point in the history
- Add api & required helpers for kafka monitoring
- add validator for deletion 

Signed-off-by: raihankhan <raihan@appscode.com>
  • Loading branch information
raihankhan committed Mar 24, 2023
1 parent 3f1adae commit c787eb9
Show file tree
Hide file tree
Showing 7 changed files with 262 additions and 2 deletions.
2 changes: 1 addition & 1 deletion Makefile
Expand Up @@ -260,7 +260,7 @@ gen-crd-protos-ui-v1alpha1:
--packages=+sigs.k8s.io/controller-runtime/pkg/scheme,-k8s.io/api/core/v1,-k8s.io/api/apps/v1,-k8s.io/api/autoscaling/v2beta2,-kmodules.xyz/custom-resources/apis/appcatalog/v1alpha1,-kmodules.xyz/monitoring-agent-api/api/v1,-kmodules.xyz/objectstore-api/api/v1,-kmodules.xyz/offshoot-api/api/v1,-kmodules.xyz/client-go/api/v1,kubedb.dev/apimachinery/apis/ui/v1alpha1,kubedb.dev/apimachinery/apis/kubedb/v1alpha2

.PHONY: gen-enum
gen-enum:
gen-enum: $(BUILD_DIRS)
@docker run \
-i \
--rm \
Expand Down
42 changes: 42 additions & 0 deletions apis/kubedb/v1alpha2/kafka_helpers.go
Expand Up @@ -25,12 +25,14 @@ import (
"kubedb.dev/apimachinery/apis/kubedb"
"kubedb.dev/apimachinery/crds"

promapi "github.com/prometheus-operator/prometheus-operator/pkg/apis/monitoring/v1"
"gomodules.xyz/pointer"
meta "k8s.io/apimachinery/pkg/apis/meta/v1"
kmapi "kmodules.xyz/client-go/api/v1"
"kmodules.xyz/client-go/apiextensions"
meta_util "kmodules.xyz/client-go/meta"
appcat "kmodules.xyz/custom-resources/apis/appcatalog/v1alpha1"
mona "kmodules.xyz/monitoring-agent-api/api/v1"
)

func (k *Kafka) CustomResourceDefinition() *apiextensions.CustomResourceDefinition {
Expand Down Expand Up @@ -129,6 +131,46 @@ func (k *Kafka) BrokerServiceLabels() map[string]string {
return meta_util.OverwriteKeys(k.offshootLabels(k.OffshootLabels(), k.BrokerNodeSelectors()))
}

type kafkaStatsService struct {
*Kafka
}

func (ks kafkaStatsService) TLSConfig() *promapi.TLSConfig {
return nil
}

func (ks kafkaStatsService) GetNamespace() string {
return ks.Kafka.GetNamespace()
}

func (ks kafkaStatsService) ServiceName() string {
return ks.OffshootName() + "-stats"
}

func (ks kafkaStatsService) ServiceMonitorName() string {
return ks.ServiceName()
}

func (ks kafkaStatsService) ServiceMonitorAdditionalLabels() map[string]string {
return ks.OffshootLabels()
}

func (ks kafkaStatsService) Path() string {
return DefaultStatsPath
}

func (ks kafkaStatsService) Scheme() string {
return ""
}

func (k *Kafka) StatsService() mona.StatsAccessor {
return &kafkaStatsService{k}
}

func (k *Kafka) StatsServiceLabels() map[string]string {
return k.ServiceLabels(StatsServiceAlias, map[string]string{LabelRole: RoleStats})
}

func (k *Kafka) PodControllerLabels(extraLabels ...map[string]string) map[string]string {
return k.offshootLabels(meta_util.OverwriteKeys(k.OffshootSelectors(), extraLabels...), k.Spec.PodTemplate.Controller.Labels)
}
Expand Down
5 changes: 5 additions & 0 deletions apis/kubedb/v1alpha2/kafka_types.go
Expand Up @@ -20,6 +20,7 @@ import (
core "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
kmapi "kmodules.xyz/client-go/api/v1"
mona "kmodules.xyz/monitoring-agent-api/api/v1"
ofst "kmodules.xyz/offshoot-api/api/v1"
)

Expand Down Expand Up @@ -106,6 +107,10 @@ type KafkaSpec struct {
// +optional
// +kubebuilder:default={periodSeconds: 20, timeoutSeconds: 10, failureThreshold: 3}
HealthChecker kmapi.HealthCheckSpec `json:"healthChecker"`

// Monitor is used monitor database instance
// +optional
Monitor *mona.AgentSpec `json:"monitor,omitempty"`
}

// KafkaClusterTopology defines kafka topology node specs for controller node and broker node
Expand Down
9 changes: 9 additions & 0 deletions apis/kubedb/v1alpha2/kafka_webhook.go
Expand Up @@ -73,6 +73,13 @@ func (k *Kafka) ValidateDelete() error {
kafkalog.Info("validate delete", "name", k.Name)

// TODO(user): fill in your validation logic upon object deletion.
var allErr field.ErrorList
if k.Spec.TerminationPolicy == TerminationPolicyDoNotTerminate {
allErr = append(allErr, field.Invalid(field.NewPath("spec").Child("teminationPolicy"),
k.Name,
"Can not delete as terminationPolicy is set to \"DoNotTerminate\""))
return apierrors.NewInvalid(schema.GroupKind{Group: "kafka.kubedb.com", Kind: "Kafka"}, k.Name, allErr)
}
return nil
}

Expand Down Expand Up @@ -184,6 +191,8 @@ func (k *Kafka) ValidateCreateOrUpdate() error {

var availableVersions = []string{
"3.3.0",
"3.3.2",
"3.4.0",
}

func validateVersion(db *Kafka) error {
Expand Down
29 changes: 28 additions & 1 deletion apis/kubedb/v1alpha2/openapi_generated.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 5 additions & 0 deletions apis/kubedb/v1alpha2/zz_generated.deepcopy.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

172 changes: 172 additions & 0 deletions crds/kubedb.com_kafkas.yaml
Expand Up @@ -82,6 +82,178 @@ spec:
type: string
type: object
x-kubernetes-map-type: atomic
monitor:
properties:
agent:
type: string
prometheus:
properties:
exporter:
properties:
args:
items:
type: string
type: array
env:
items:
properties:
name:
type: string
value:
type: string
valueFrom:
properties:
configMapKeyRef:
properties:
key:
type: string
name:
type: string
optional:
type: boolean
required:
- key
type: object
x-kubernetes-map-type: atomic
fieldRef:
properties:
apiVersion:
type: string
fieldPath:
type: string
required:
- fieldPath
type: object
x-kubernetes-map-type: atomic
resourceFieldRef:
properties:
containerName:
type: string
divisor:
anyOf:
- type: integer
- type: string
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
x-kubernetes-int-or-string: true
resource:
type: string
required:
- resource
type: object
x-kubernetes-map-type: atomic
secretKeyRef:
properties:
key:
type: string
name:
type: string
optional:
type: boolean
required:
- key
type: object
x-kubernetes-map-type: atomic
type: object
required:
- name
type: object
type: array
port:
default: 56790
format: int32
type: integer
resources:
properties:
limits:
additionalProperties:
anyOf:
- type: integer
- type: string
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
x-kubernetes-int-or-string: true
type: object
requests:
additionalProperties:
anyOf:
- type: integer
- type: string
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
x-kubernetes-int-or-string: true
type: object
type: object
securityContext:
properties:
allowPrivilegeEscalation:
type: boolean
capabilities:
properties:
add:
items:
type: string
type: array
drop:
items:
type: string
type: array
type: object
privileged:
type: boolean
procMount:
type: string
readOnlyRootFilesystem:
type: boolean
runAsGroup:
format: int64
type: integer
runAsNonRoot:
type: boolean
runAsUser:
format: int64
type: integer
seLinuxOptions:
properties:
level:
type: string
role:
type: string
type:
type: string
user:
type: string
type: object
seccompProfile:
properties:
localhostProfile:
type: string
type:
type: string
required:
- type
type: object
windowsOptions:
properties:
gmsaCredentialSpec:
type: string
gmsaCredentialSpecName:
type: string
hostProcess:
type: boolean
runAsUserName:
type: string
type: object
type: object
type: object
serviceMonitor:
properties:
interval:
type: string
labels:
additionalProperties:
type: string
type: object
type: object
type: object
type: object
podTemplate:
properties:
controller:
Expand Down

0 comments on commit c787eb9

Please sign in to comment.