Skip to content

Commit 53feb82

Browse files
committed
Fix #25102: log kubernetes warnings when pod fails to start
1 parent 6b35427 commit 53feb82

1 file changed

Lines changed: 23 additions & 0 deletions

File tree

src/main/java/eu/openanalytics/containerproxy/backend/kubernetes/KubernetesBackend.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -323,6 +323,7 @@ protected Container startContainer(Authentication user, Container initialContain
323323
if (!podReady) {
324324
// check a final time whether the pod is ready
325325
if (!Readiness.getInstance().isReady(kubeClient.resource(startedPod).fromServer().get())) {
326+
logKubernetesWarnings(proxy, startedPod);
326327
throw new ContainerFailedToStartException("Container did not become ready in time", null, rContainerBuilder.build());
327328
}
328329
}
@@ -372,6 +373,28 @@ protected Container startContainer(Authentication user, Container initialContain
372373
}
373374
}
374375

376+
private void logKubernetesWarnings(Proxy proxy, Pod pod) {
377+
List<Event> events;
378+
try {
379+
events = kubeClient.v1().events().withInvolvedObject(new ObjectReferenceBuilder()
380+
.withKind("Pod")
381+
.withName(pod.getMetadata().getName())
382+
.withNamespace(pod.getMetadata().getNamespace())
383+
.build()).list().getItems();
384+
} catch (KubernetesClientException ex) {
385+
if (ex.getCode() == 403) {
386+
log.warn("Cannot parse events of pod because of insufficient permissions. Give the ShinyProxy ServiceAccount permission to get events of pods in order to show Kubernetes warnings in ShinyProxy logs.");
387+
return;
388+
}
389+
throw ex;
390+
}
391+
for (Event event : events) {
392+
if (event.getType().equals("Warning")) {
393+
slog.warn(proxy, "Kubernetes warning: " + event.getMessage());
394+
}
395+
}
396+
}
397+
375398
private LocalDateTime getEventTime(Event event) {
376399
if (event.getEventTime() != null && event.getEventTime().getTime() != null) {
377400
return ZonedDateTime.parse(event.getEventTime().getTime()).toLocalDateTime();

0 commit comments

Comments
 (0)