halkyonio / operator

Kubernetes Operator simplifying the development of microservices on k8s !
Apache License 2.0
40 stars 14 forks source link

halkyon operator pod crashes when unsupported runtime is used #245

Closed yharish991 closed 3 years ago

yharish991 commented 3 years ago

halkyon operator pod crashes when an unsupported runtime is used to create an halkyon component, instead it should gracefully handle the unsupported runtime version

Sample halkyon component i created

apiVersion: halkyon.io/v1beta1
kind: Component
metadata:
  name: http-rest-sb
spec:
  deploymentMode: build
  exposeService: true
  port: 8080
  buildConfig:
    type: s2i
    url: https://github.com/snowdrop/rest-http-example.git
    ref: 2.1.6-4
    moduleDirName: .
  runtime: spring-boot
  version: 2.1.6

Note the version 2.1.6 is not a supported spring boot runtime by halkyon

Logs from the operator pod

2020-11-03T03:50:06.020Z    INFO    component-controller    -> Component    {"name": "http-rest-sb", "status": ""}
2020-11-03T03:50:06.047Z    INFO    component-controller    Created successfully    {"kind": "PersistentVolumeClaim", "name": "m2-data-http-rest-sb"}
E1103 03:50:06.081760       1 runtime.go:69] Observed a panic: &errors.errorString{s:"couldn't find '2.1.6' version for 'spring-boot' runtime, known versions: 1.5.19.RELEASE,2.1.13.RELEASE,2.2.6.RELEASE"} (couldn't find '2.1.6' version for 'spring-boot' runtime, known versions: 1.5.19.RELEASE,2.1.13.RELEASE,2.2.6.RELEASE)
/go/pkg/mod/k8s.io/apimachinery@v0.0.0-20181127025237-2b1284ed4c93/pkg/util/runtime/runtime.go:76
/go/pkg/mod/k8s.io/apimachinery@v0.0.0-20181127025237-2b1284ed4c93/pkg/util/runtime/runtime.go:65
/go/pkg/mod/k8s.io/apimachinery@v0.0.0-20181127025237-2b1284ed4c93/pkg/util/runtime/runtime.go:51
/usr/local/go/src/runtime/panic.go:679
/go/src/halkyon.io/operator/pkg/controller/component/deployment.go:82
/go/src/halkyon.io/operator/pkg/controller/component/build_deployment.go:75
/go/src/halkyon.io/operator/pkg/controller/component/build_deployment.go:21
/go/src/halkyon.io/operator/pkg/controller/component/deployment.go:32
/go/pkg/mod/halkyon.io/operator-framework@v1.0.0-beta.7/dependent.go:55
/go/pkg/mod/halkyon.io/operator-framework@v1.0.0-beta.7/baseresource.go:32
/go/src/halkyon.io/operator/pkg/controller/component/component.go:90
/go/pkg/mod/halkyon.io/operator-framework@v1.0.0-beta.7/generic.go:104
/go/pkg/mod/sigs.k8s.io/controller-runtime@v0.1.10/pkg/internal/controller/controller.go:215
/go/pkg/mod/sigs.k8s.io/controller-runtime@v0.1.10/pkg/internal/controller/controller.go:158
/go/pkg/mod/k8s.io/apimachinery@v0.0.0-20181127025237-2b1284ed4c93/pkg/util/wait/wait.go:133
/go/pkg/mod/k8s.io/apimachinery@v0.0.0-20181127025237-2b1284ed4c93/pkg/util/wait/wait.go:134
/go/pkg/mod/k8s.io/apimachinery@v0.0.0-20181127025237-2b1284ed4c93/pkg/util/wait/wait.go:88
/usr/local/go/src/runtime/asm_amd64.s:1357
panic: couldn't find '2.1.6' version for 'spring-boot' runtime, known versions: 1.5.19.RELEASE,2.1.13.RELEASE,2.2.6.RELEASE [recovered]
    panic: couldn't find '2.1.6' version for 'spring-boot' runtime, known versions: 1.5.19.RELEASE,2.1.13.RELEASE,2.2.6.RELEASE

goroutine 125 [running]:
k8s.io/apimachinery/pkg/util/runtime.HandleCrash(0x0, 0x0, 0x0)
    /go/pkg/mod/k8s.io/apimachinery@v0.0.0-20181127025237-2b1284ed4c93/pkg/util/runtime/runtime.go:58 +0x105
panic(0x179ece0, 0xc000cfcf60)
    /usr/local/go/src/runtime/panic.go:679 +0x1b2
halkyon.io/operator/pkg/controller/component.populatePodEnvVar(0xc0001aec80, 0x0, 0xc00026ddd0, 0x203000)
    /go/src/halkyon.io/operator/pkg/controller/component/deployment.go:82 +0x26d
halkyon.io/operator/pkg/controller/component.getRuntimeContainerFor(0xc0001aec80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, ...)
    /go/src/halkyon.io/operator/pkg/controller/component/build_deployment.go:75 +0x61
halkyon.io/operator/pkg/controller/component.deployment.installBuild(0xc000d1c420, 0xc0007bad00, 0x0, 0xc000bf85d0, 0x2e, 0x19fe683, 0x8)
    /go/src/halkyon.io/operator/pkg/controller/component/build_deployment.go:21 +0x259
halkyon.io/operator/pkg/controller/component.deployment.Build(0xc000d1c420, 0xc0007bad00, 0x0, 0x19fe683, 0x8, 0xc0000868a0, 0x194)
    /go/src/halkyon.io/operator/pkg/controller/component/deployment.go:32 +0x125
halkyon.io/operator-framework.CreateOrUpdate(0x1d8b060, 0xc000d388a0, 0x0, 0x0)
    /go/pkg/mod/halkyon.io/operator-framework@v1.0.0-beta.7/dependent.go:55 +0x1b2
halkyon.io/operator-framework.(*BaseResource).CreateOrUpdateDependents(0xc000d36de0, 0x1, 0xc000d36e70)
    /go/pkg/mod/halkyon.io/operator-framework@v1.0.0-beta.7/baseresource.go:32 +0x8e
halkyon.io/operator/pkg/controller/component.(*Component).CreateOrUpdate(0xc000d38840, 0x0, 0x0)
    /go/src/halkyon.io/operator/pkg/controller/component/component.go:90 +0x8a
halkyon.io/operator-framework.(*GenericReconciler).Reconcile(0xc00018fa40, 0xc0006b6159, 0x7, 0xc0006b6144, 0xc, 0xc000ee86c0, 0x0, 0x0, 0x0)
    /go/pkg/mod/halkyon.io/operator-framework@v1.0.0-beta.7/generic.go:104 +0xcb0
sigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).processNextWorkItem(0xc00041edc0, 0xc0000a6600)
    /go/pkg/mod/sigs.k8s.io/controller-runtime@v0.1.10/pkg/internal/controller/controller.go:215 +0x20a
sigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).Start.func1()
    /go/pkg/mod/sigs.k8s.io/controller-runtime@v0.1.10/pkg/internal/controller/controller.go:158 +0x36
k8s.io/apimachinery/pkg/util/wait.JitterUntil.func1(0xc000241820)
    /go/pkg/mod/k8s.io/apimachinery@v0.0.0-20181127025237-2b1284ed4c93/pkg/util/wait/wait.go:133 +0x5e
k8s.io/apimachinery/pkg/util/wait.JitterUntil(0xc000241820, 0x3b9aca00, 0x0, 0x1, 0xc00020b740)
    /go/pkg/mod/k8s.io/apimachinery@v0.0.0-20181127025237-2b1284ed4c93/pkg/util/wait/wait.go:134 +0xf8
k8s.io/apimachinery/pkg/util/wait.Until(0xc000241820, 0x3b9aca00, 0xc00020b740)
    /go/pkg/mod/k8s.io/apimachinery@v0.0.0-20181127025237-2b1284ed4c93/pkg/util/wait/wait.go:88 +0x4d
created by sigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).Start
    /go/pkg/mod/sigs.k8s.io/controller-runtime@v0.1.10/pkg/internal/controller/controller.go:157 +0x32e

screenshot of operator pod status image.png