Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Kubernetes + Minikube - How to see all stdout output?

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
like image 502
userMod2 Avatar asked Oct 18 '18 04:10

userMod2


People also ask

Where is stdout stored Kubernetes?

Everything that a containerized application writes to stdout or stderr is streamed somewhere by the container engine – in Docker's case, for example, to a logging driver. These logs are usually located in the /var/log/containers directory on your host.

What command is used to show all Kubernetes objects?

The most basic command for viewing Kubernetes objects via kubectl is get . If you run kubectl get <resource-name> you will get a listing of all resources in the current namespace. If you want to get a specific resource, you can use kubectl get <resource-name> <object-name> .


1 Answers

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

like image 93
VonC Avatar answered Sep 28 '22 06:09

VonC