Hey everyone ,
I wanted to try Control Center on my Mac, but I do have some problems getting it up and running. Here is my setup:
- Podman Desktop 1.13.2
- Podman 5.2.4
- Podman Minikube extension
I created a new minikube instance using Podman as driver and Docker as container runtime. The minikube cluster is up and running:
$ kubectl cluster-info
Kubernetes control plane is running at https://127.0.0.1:41969
CoreDNS is running at https://127.0.0.1:41969/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
Next, I want to install Control Center using the Helm chart provides in the docs:
helm install control-center oci://docker.io/vaadin/control-center \
-n control-center --create-namespace \
--set serviceAccount.clusterAdmin=true \
--set service.type=LoadBalancer --set service.port=8000 \
--timeout 10m0s \
--wait
After a few moments, the rollout seems to be finished:
$ kubectl rollout status deployment
deployment "control-center" successfully rolled out
This is the helm status at this point:
$ helm status control-center
NAME: control-center
LAST DEPLOYED: Thu Oct 24 06:13:32 2024
NAMESPACE: control-center
STATUS: pending-install
REVISION: 1
NOTES:
__ ____ _ _ ____ _ __
\ \ / ___|___ _ __ | |_ _ __ ___ | | / ___|___ _ __ | |_ ___ _ __ / /
| | | | / _ \| '_ \| __| '__/ _ \| | | | / _ \ '_ \| __/ _ \ '__| | |
> > | |__| (_) | | | | |_| | | (_) | | | |__| __/ | | | || __/ | < <
| | \____\___/|_| |_|\__|_| \___/|_| \____\___|_| |_|\__\___|_| | |
/_/ \_\
Congratulations! Control Center has been deployed to your Kubernetes cluster as
control-center in the control-center namespace.
To complete the configuration of Control Center, navigate with your browser to
http://localhost:8000
During the startup process, you will need a passkey saved as a secret named
control-center-passkey. You can get the value of
this secret by running:
kubectl -n control-center get secret control-center-passkey -o go-template='{{ .data.passkey | base64decode }}'
For more information on using Control Center, please refer to the documentation
at https://github.com/vaadin/control-center/wiki
Thank you for using Control Center!
The status is pending-install
.
If I have a look at the logs of the pod control-center
I see the following output:
$ kubectl logs --follow control-center-687bc546fc-bfmhn
__ ____ _ _ ____ _ __
\ \ / ___|___ _ __ | |_ _ __ ___ | | / ___|___ _ __ | |_ ___ _ __ / /
| | | | / _ \| '_ \| __| '__/ _ \| | | | / _ \ '_ \| __/ _ \ '__| | |
> > | |__| (_) | | | | |_| | | (_) | | | |__| __/ | | | || __/ | < <
| | \____\___/|_| |_|\__|_| \___/|_| \____\___|_| |_|\__\___|_| | |
/_/ \_\
:: }> Control Center :: Running Spring Boot 3.3.4 :: Startup profile(s) ${spring.profiles.active} ::
2024-10-24T04:21:12.462Z INFO 7 --- [control-center] [ main] b.c.PropertySourceBootstrapConfiguration : Located property source: [BootstrapPropertySource {name='bootstrapProperties-configmap.control-center.control-center'}]
2024-10-24T04:21:12.502Z INFO 7 --- [control-center] [ main] c.v.c.ControlCenterApplication : The following 1 profile is active: "kubernetes"
2024-10-24T04:21:17.556Z INFO 7 --- [control-center] [ main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode.
2024-10-24T04:21:18.251Z INFO 7 --- [control-center] [ main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 651 ms. Found 3 JPA repository interfaces.
2024-10-24T04:21:19.849Z INFO 7 --- [control-center] [ main] o.s.cloud.context.scope.GenericScope : BeanFactory id=d73cf596-f0ff-38ac-8487-cdc39303a55c
2024-10-24T04:21:22.272Z INFO 7 --- [control-center] [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port 8080 (http)
2024-10-24T04:21:22.301Z INFO 7 --- [control-center] [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2024-10-24T04:21:22.302Z INFO 7 --- [control-center] [ main] o.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/10.1.30]
2024-10-24T04:21:22.389Z INFO 7 --- [control-center] [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2024-10-24T04:21:22.392Z INFO 7 --- [control-center] [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 9789 ms
2024-10-24T04:21:26.037Z INFO 7 --- [control-center] [ main] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default]
2024-10-24T04:21:26.441Z INFO 7 --- [control-center] [ main] org.hibernate.Version : HHH000412: Hibernate ORM core version 6.5.3.Final
2024-10-24T04:21:26.656Z INFO 7 --- [control-center] [ main] o.h.c.internal.RegionFactoryInitiator : HHH000026: Second-level cache disabled
2024-10-24T04:21:29.186Z INFO 7 --- [control-center] [ main] o.s.o.j.p.SpringPersistenceUnitInfo : No LoadTimeWeaver setup: ignoring JPA class transformer
2024-10-24T04:21:29.366Z WARN 7 --- [control-center] [ main] org.hibernate.orm.deprecation : HHH90000025: PostgreSQLDialect does not need to be specified explicitly using 'hibernate.dialect' (remove the property setting and it will be selected by default)
2024-10-24T04:21:33.255Z INFO 7 --- [control-center] [ main] o.h.e.t.j.p.i.JtaPlatformInitiator : HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration)
2024-10-24T04:21:33.267Z INFO 7 --- [control-center] [ main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'
2024-10-24T04:21:35.305Z INFO 7 --- [control-center] [ main] o.s.d.j.r.query.QueryEnhancerFactory : Hibernate is in classpath; If applicable, HQL parser will be used.
2024-10-24T04:21:38.698Z WARN 7 --- [control-center] [ main] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning
2024-10-24T04:21:40.294Z INFO 7 --- [control-center] [ main] o.s.b.a.e.web.EndpointLinksResolver : Exposing 1 endpoint beneath base path '/actuator'
2024-10-24T04:21:43.414Z INFO 7 --- [control-center] [ main] Fabric8EventBasedConfigMapChangeDetector : Kubernetes event-based configMap change detector activated
2024-10-24T04:21:44.154Z INFO 7 --- [control-center] [ main] org.atmosphere.cpr.AtmosphereFramework : Installed AtmosphereHandler com.vaadin.flow.server.communication.PushAtmosphereHandler mapped to context-path: /*
2024-10-24T04:21:44.154Z INFO 7 --- [control-center] [ main] org.atmosphere.cpr.AtmosphereFramework : Installed the following AtmosphereInterceptor mapped to AtmosphereHandler com.vaadin.flow.server.communication.PushAtmosphereHandler
2024-10-24T04:21:44.294Z INFO 7 --- [control-center] [ main] org.atmosphere.cpr.AtmosphereFramework : Atmosphere is using org.atmosphere.util.VoidAnnotationProcessor for processing annotation
2024-10-24T04:21:44.316Z INFO 7 --- [control-center] [ main] org.atmosphere.util.ForkJoinPool : Using ForkJoinPool java.util.concurrent.ForkJoinPool. Set the org.atmosphere.cpr.broadcaster.maxAsyncWriteThreads to -1 to fully use its power.
2024-10-24T04:21:44.331Z INFO 7 --- [control-center] [ main] org.atmosphere.cpr.AtmosphereFramework : Installed WebSocketProtocol org.atmosphere.websocket.protocol.SimpleHttpProtocol
2024-10-24T04:21:44.345Z INFO 7 --- [control-center] [ main] o.a.container.JSR356AsyncSupport : JSR 356 Mapping path /VAADIN/push
2024-10-24T04:21:44.371Z INFO 7 --- [control-center] [ main] org.atmosphere.cpr.AtmosphereFramework : Installing Default AtmosphereInterceptors
2024-10-24T04:21:44.373Z INFO 7 --- [control-center] [ main] org.atmosphere.cpr.AtmosphereFramework : org.atmosphere.interceptor.CorsInterceptor : CORS Interceptor Support
2024-10-24T04:21:44.373Z INFO 7 --- [control-center] [ main] org.atmosphere.cpr.AtmosphereFramework : org.atmosphere.interceptor.CacheHeadersInterceptor : Default Response's Headers Interceptor
2024-10-24T04:21:44.375Z INFO 7 --- [control-center] [ main] org.atmosphere.cpr.AtmosphereFramework : org.atmosphere.interceptor.PaddingAtmosphereInterceptor : Browser Padding Interceptor Support
2024-10-24T04:21:44.375Z INFO 7 --- [control-center] [ main] org.atmosphere.cpr.AtmosphereFramework : org.atmosphere.interceptor.AndroidAtmosphereInterceptor : Android Interceptor Support
2024-10-24T04:21:44.376Z INFO 7 --- [control-center] [ main] org.atmosphere.cpr.AtmosphereFramework : org.atmosphere.interceptor.HeartbeatInterceptor : Heartbeat Interceptor Support
2024-10-24T04:21:44.377Z INFO 7 --- [control-center] [ main] org.atmosphere.cpr.AtmosphereFramework : org.atmosphere.interceptor.SSEAtmosphereInterceptor : SSE Interceptor Support
2024-10-24T04:21:44.378Z INFO 7 --- [control-center] [ main] org.atmosphere.cpr.AtmosphereFramework : org.atmosphere.interceptor.JSONPAtmosphereInterceptor : JSONP Interceptor Support
2024-10-24T04:21:44.379Z INFO 7 --- [control-center] [ main] org.atmosphere.cpr.AtmosphereFramework : org.atmosphere.interceptor.JavaScriptProtocol : Atmosphere JavaScript Protocol
2024-10-24T04:21:44.380Z INFO 7 --- [control-center] [ main] org.atmosphere.cpr.AtmosphereFramework : org.atmosphere.interceptor.WebSocketMessageSuspendInterceptor : org.atmosphere.interceptor.WebSocketMessageSuspendInterceptor
2024-10-24T04:21:44.381Z INFO 7 --- [control-center] [ main] org.atmosphere.cpr.AtmosphereFramework : org.atmosphere.interceptor.OnDisconnectInterceptor : Browser disconnection detection
2024-10-24T04:21:44.382Z INFO 7 --- [control-center] [ main] org.atmosphere.cpr.AtmosphereFramework : org.atmosphere.interceptor.IdleResourceInterceptor : org.atmosphere.interceptor.IdleResourceInterceptor
2024-10-24T04:21:44.382Z INFO 7 --- [control-center] [ main] org.atmosphere.cpr.AtmosphereFramework : Set org.atmosphere.cpr.AtmosphereInterceptor.disableDefaults to disable them.
2024-10-24T04:21:44.383Z INFO 7 --- [control-center] [ main] org.atmosphere.cpr.AtmosphereFramework : Installed AtmosphereInterceptor CORS Interceptor Support with priority FIRST_BEFORE_DEFAULT
2024-10-24T04:21:44.384Z INFO 7 --- [control-center] [ main] org.atmosphere.cpr.AtmosphereFramework : Installed AtmosphereInterceptor Default Response's Headers Interceptor with priority AFTER_DEFAULT
2024-10-24T04:21:44.385Z INFO 7 --- [control-center] [ main] org.atmosphere.cpr.AtmosphereFramework : Installed AtmosphereInterceptor Browser Padding Interceptor Support with priority AFTER_DEFAULT
2024-10-24T04:21:44.386Z INFO 7 --- [control-center] [ main] org.atmosphere.cpr.AtmosphereFramework : Installed AtmosphereInterceptor Android Interceptor Support with priority AFTER_DEFAULT
2024-10-24T04:21:44.386Z INFO 7 --- [control-center] [ main] o.a.interceptor.HeartbeatInterceptor : HeartbeatInterceptor configured with padding value 'X', client frequency 0 seconds and server frequency 60 seconds
2024-10-24T04:21:44.386Z INFO 7 --- [control-center] [ main] org.atmosphere.cpr.AtmosphereFramework : Installed AtmosphereInterceptor Heartbeat Interceptor Support with priority AFTER_DEFAULT
2024-10-24T04:21:44.386Z INFO 7 --- [control-center] [ main] org.atmosphere.cpr.AtmosphereFramework : Installed AtmosphereInterceptor SSE Interceptor Support with priority AFTER_DEFAULT
2024-10-24T04:21:44.386Z INFO 7 --- [control-center] [ main] org.atmosphere.cpr.AtmosphereFramework : Installed AtmosphereInterceptor JSONP Interceptor Support with priority AFTER_DEFAULT
2024-10-24T04:21:44.387Z INFO 7 --- [control-center] [ main] org.atmosphere.cpr.AtmosphereFramework : Installed AtmosphereInterceptor Atmosphere JavaScript Protocol with priority AFTER_DEFAULT
2024-10-24T04:21:44.387Z INFO 7 --- [control-center] [ main] org.atmosphere.cpr.AtmosphereFramework : Installed AtmosphereInterceptor org.atmosphere.interceptor.WebSocketMessageSuspendInterceptor with priority AFTER_DEFAULT
2024-10-24T04:21:44.387Z INFO 7 --- [control-center] [ main] org.atmosphere.cpr.AtmosphereFramework : Installed AtmosphereInterceptor Browser disconnection detection with priority AFTER_DEFAULT
2024-10-24T04:21:44.388Z INFO 7 --- [control-center] [ main] org.atmosphere.cpr.AtmosphereFramework : Installed AtmosphereInterceptor org.atmosphere.interceptor.IdleResourceInterceptor with priority BEFORE_DEFAULT
2024-10-24T04:21:44.388Z INFO 7 --- [control-center] [ main] org.atmosphere.cpr.AtmosphereFramework : Using EndpointMapper class org.atmosphere.util.DefaultEndpointMapper
2024-10-24T04:21:44.389Z INFO 7 --- [control-center] [ main] org.atmosphere.cpr.AtmosphereFramework : Using BroadcasterCache: org.atmosphere.cache.UUIDBroadcasterCache
2024-10-24T04:21:44.389Z INFO 7 --- [control-center] [ main] org.atmosphere.cpr.AtmosphereFramework : Default Broadcaster Class: org.atmosphere.cpr.DefaultBroadcaster
2024-10-24T04:21:44.389Z INFO 7 --- [control-center] [ main] org.atmosphere.cpr.AtmosphereFramework : Broadcaster Shared List Resources: false
2024-10-24T04:21:44.389Z INFO 7 --- [control-center] [ main] org.atmosphere.cpr.AtmosphereFramework : Broadcaster Polling Wait Time 100
2024-10-24T04:21:44.389Z INFO 7 --- [control-center] [ main] org.atmosphere.cpr.AtmosphereFramework : Shared ExecutorService supported: true
2024-10-24T04:21:44.389Z INFO 7 --- [control-center] [ main] org.atmosphere.cpr.AtmosphereFramework : Messaging ExecutorService Pool Size unavailable - Not instance of ThreadPoolExecutor
2024-10-24T04:21:44.389Z INFO 7 --- [control-center] [ main] org.atmosphere.cpr.AtmosphereFramework : Async I/O Thread Pool Size: 200
2024-10-24T04:21:44.389Z INFO 7 --- [control-center] [ main] org.atmosphere.cpr.AtmosphereFramework : Using BroadcasterFactory: org.atmosphere.cpr.DefaultBroadcasterFactory
2024-10-24T04:21:44.389Z INFO 7 --- [control-center] [ main] org.atmosphere.cpr.AtmosphereFramework : Using AtmosphereResurceFactory: org.atmosphere.cpr.DefaultAtmosphereResourceFactory
2024-10-24T04:21:44.389Z INFO 7 --- [control-center] [ main] org.atmosphere.cpr.AtmosphereFramework : Using WebSocketProcessor: org.atmosphere.websocket.DefaultWebSocketProcessor
2024-10-24T04:21:44.395Z INFO 7 --- [control-center] [ main] org.atmosphere.cpr.AtmosphereFramework : Invoke AtmosphereInterceptor on WebSocket message true
2024-10-24T04:21:44.395Z INFO 7 --- [control-center] [ main] org.atmosphere.cpr.AtmosphereFramework : HttpSession supported: true
2024-10-24T04:21:44.395Z INFO 7 --- [control-center] [ main] org.atmosphere.cpr.AtmosphereFramework : Atmosphere is using org.atmosphere.inject.InjectableObjectFactory for dependency injection and object creation
2024-10-24T04:21:44.395Z INFO 7 --- [control-center] [ main] org.atmosphere.cpr.AtmosphereFramework : Atmosphere is using async support: org.atmosphere.container.JSR356AsyncSupport running under container: Apache Tomcat/10.1.30 using jakarta.servlet/3.0 and jsr356/WebSocket API
2024-10-24T04:21:44.395Z INFO 7 --- [control-center] [ main] org.atmosphere.cpr.AtmosphereFramework : Atmosphere Framework 3.0.5.slf4jvaadin1 started.
2024-10-24T04:21:44.403Z INFO 7 --- [control-center] [ main] org.atmosphere.cpr.AtmosphereFramework : Installed AtmosphereInterceptor Track Message Size Interceptor using | with priority BEFORE_DEFAULT
2024-10-24T04:21:44.514Z INFO 7 --- [control-center] [ main] c.v.f.s.DefaultDeploymentConfiguration : Vaadin is running in production mode.
2024-10-24T04:21:44.603Z INFO 7 --- [control-center] [ main] c.vaadin.flow.spring.SpringInstantiator : The number of beans implementing 'I18NProvider' is 0. Cannot use Spring beans for I18N, falling back to the default behavior
2024-10-24T04:21:44.659Z INFO 7 --- [control-center] [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port 8080 (http) with context path '/'
2024-10-24T04:21:44.734Z INFO 7 --- [control-center] [ main] c.v.c.ControlCenterApplication : Started ControlCenterApplication in 40.204 seconds (process running for 42.837)
2024-10-24T04:21:53.078Z INFO 7 --- [control-center] [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet'
2024-10-24T04:21:53.079Z INFO 7 --- [control-center] [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'
2024-10-24T04:21:53.081Z INFO 7 --- [control-center] [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 2 ms
Everything looks fine, but Control Center is not yet available at http://localhost:8080.
If a have a look at the status of the pod control-center
, I can see the following:
$ kubectl describe pod control-center-687bc546fc-bfmhn
Name: control-center-687bc546fc-bfmhn
Namespace: control-center
Priority: 0
Service Account: control-center
Node: minikube/192.168.49.2
Start Time: Thu, 24 Oct 2024 06:13:32 +0200
Labels: app.kubernetes.io/instance=control-center
app.kubernetes.io/managed-by=Helm
app.kubernetes.io/name=control-center
app.kubernetes.io/version=1.0.0
helm.sh/chart=control-center-1.0.0
pod-template-hash=687bc546fc
Annotations: <none>
Status: Running
IP: 10.244.0.4
IPs:
IP: 10.244.0.4
Controlled By: ReplicaSet/control-center-687bc546fc
Containers:
app:
Container ID: docker://56f101d222883754e34f739af790425e3a9e332e36e9ac3e837b11cf99a53512
Image: vaadin/control-center-app:1.0.0
Image ID: docker-pullable://vaadin/control-center-app@sha256:8a75e183f0126f3054cf1211586e2a2c1fafc343d460c11be37a7dee5a0ce5bb
Port: 8080/TCP
Host Port: 0/TCP
State: Waiting
Reason: CrashLoopBackOff
Last State: Terminated
Reason: Error
Exit Code: 137
Started: Thu, 24 Oct 2024 06:24:50 +0200
Finished: Thu, 24 Oct 2024 06:25:43 +0200
Ready: False
Restart Count: 7
Liveness: http-get http://:http/actuator/health/liveness delay=0s timeout=1s period=10s #success=1 #failure=3
Readiness: http-get http://:http/actuator/health/readiness delay=0s timeout=1s period=10s #success=1 #failure=3
Environment:
SPRING_APPLICATION_NAME: control-center
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-g477l (ro)
Conditions:
Type Status
Initialized True
Ready False
ContainersReady False
PodScheduled True
Volumes:
kube-api-access-g477l:
Type: Projected (a volume that contains injected data from multiple sources)
TokenExpirationSeconds: 3607
ConfigMapName: kube-root-ca.crt
ConfigMapOptional: <nil>
DownwardAPI: true
QoS Class: BestEffort
Node-Selectors: <none>
Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 13m default-scheduler Successfully assigned control-center/control-center-687bc546fc-bfmhn to minikube
Normal Killing 12m kubelet Container app failed liveness probe, will be restarted
Normal Pulled 12m (x2 over 13m) kubelet Container image "vaadin/control-center-app:1.0.0" already present on machine
Normal Created 12m (x2 over 13m) kubelet Created container app
Warning Unhealthy 11m (x12 over 13m) kubelet Readiness probe failed: Get "http://10.244.0.4:8080/actuator/health/readiness": dial tcp 10.244.0.4:8080: connect: connection refused
Warning Unhealthy 11m (x6 over 13m) kubelet Liveness probe failed: Get "http://10.244.0.4:8080/actuator/health/liveness": dial tcp 10.244.0.4:8080: connect: connection refused
Normal Started 8m16s (x6 over 13m) kubelet Started container app
Warning BackOff 3m16s (x19 over 7m16s) kubelet Back-off restarting failed container app in pod control-center-687bc546fc-bfmhn_control-center(369fc720-1fb8-48f7-a61c-280cfd3480fb)
I can see, that the readiness and liveness probes failed, because Kubernetes is not able to connect to the pod.
Any ideas what the problem could be?