Kubernetes + Minikube - How to see all stdout output?

10/18/2018

I'm running a Ruby app on Kubernetes with Minikube.

However, whenever I look at the logs I don't see the output I would have seen in my terminal when running the app locally.

I presume it's because it only shows stderr?

What can I do to see all types of console logs (e.g. from puts or raise)?

On looking around is this something to do with it being in detached mode - see the Python related issue: Logs in Kubernetes Pod not showing up

Thanks.

\=

As requested - here is the deployment.yaml

apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: sample
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: sample
    spec:
      containers:
        - name: sample
          image: someregistry
          imagePullPolicy: Always
          command: ["/bin/sh","-c"]
          args: ["bundle exec rake sample:default --trace"]
          envFrom:
          - configMapRef:
              name: sample
          - secretRef:
              name: sample
          ports:
            - containerPort: 3000
      imagePullSecrets:
        - name: regsecret
-- userMod2
kubernetes
minikube
ruby

2 Answers

10/18/2018

I presume it's because it only shows stderr?

Not really, unless something specific is disabled in your container or pod spec. I assume you are using Docker so then the default it's to output stdout and stderr and that's what you see when you do a kubectl logs <pod-name>

What can I do to see all types of console logs (e.g. from puts or raise)?

You should see them in the container logs. It would help to post your pod or deployment definition.

-- Rico
Source: StackOverflow

10/18/2018

As shown in this article, kubectl logs pod apod should show you stdout and stderr for a pod deployed in a minikube.

By default in Kubernetes, Docker is configured to write a container's stdout and stderr to a file under /var/log/containers on the host system

Kubernetes adds:

There are two types of system components: those that run in a container and those that do not run in a container.
For example:

  • The Kubernetes scheduler and kube-proxy run in a container.
  • The kubelet and container runtime, for example Docker, do not run in containers.

And:

  • On machines with systemd, the kubelet and container runtime write to journald.
  • If systemd is not present, they write to .log files in the /var/log directory.

Similarly to the container logs, system component logs in the /var/log directory should be rotated.
In Kubernetes clusters brought up by the kube-up.sh script, those logs are configured to be rotated by the logrotate tool daily or once the size exceeds 100MB.

https://d33wubrfki0l68.cloudfront.net/59b1aae2adcfe4f06270b99a2789012ed64bec1f/4d0ad/images/docs/user-guide/logging/logging-node-level.png

-- VonC
Source: StackOverflow