Minikubeを使用してKubernetesでRubyアプリを実行しています。
ただし、ログを見ると、アプリをローカルで実行したときにターミナルに表示される出力が表示されません。
Stderrしか表示されないからだと思いますか?
すべてのタイプのコンソールログを表示するにはどうすればよいですか(たとえば、puts
またはraise
から)?
見回すと、これはデタッチモードになっていることと関係があります-Python関連の問題を参照してください: Kubernetesポッドのログが表示されない
ありがとう。
=
リクエストに応じて-これが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
この記事に示されているように、kubectl logs pod apod
は、ミニクベにデプロイされたポッドのstdoutとstderrを表示するはずです。
Kubernetesのデフォルトでは、Dockerはコンテナのstdoutとstderrをホストシステムの/ var/log/containersの下のファイルに書き込むように設定されています
システムコンポーネントには、コンテナ内で実行されるものとコンテナ内で実行されないものの2種類があります。
例えば:
- Kubernetesスケジューラとkube-proxyはコンテナで実行されます。
- Dockerなどのkubeletとコンテナーランタイムは、コンテナーでは実行されません。
そして:
- Systemdを搭載したマシンでは、kubeletとコンテナのランタイムがjournaldに書き込みます。
- Systemdが存在しない場合は、
.log
ディレクトリの/var/log
ファイルに書き込みます。コンテナログと同様に、/ var/logディレクトリのシステムコンポーネントログはローテーションする必要があります。
kube-up.shスクリプトによって起動されたKubernetesクラスターでは、これらのログは、logrotateツールによって毎日またはサイズが100MBを超えるとローテーションされるように構成されています。
Stderrしか表示されないからだと思いますか?
コンテナまたはポッドの仕様で特定の何かが無効にされていない限り、実際にはそうではありません。 Dockerを使用していると仮定しているので、デフォルトでは出力 stdout and stderr であり、これを実行すると表示されます kubectl logs <pod-name>
すべてのタイプのコンソールログ(プットやレイズなど)を表示するにはどうすればよいですか?
コンテナログに表示されます。ポッドまたはデプロイメントの定義を投稿すると便利です。