我已经用新镜像更新了正在运行的群集,不幸的是它崩溃了。我想登录到Pod来查看日志。这样做的方法是什么?
manuchadha25@cloudshell:~ (copper-frame-262317)$ kubectl get pods
NAME READY STATUS RESTARTS AGE
codingjediweb-7c45484669-czcpk 0/1 CrashLoopBackOff 6 9m34s
codingjediweb-7c45484669-qn4m5 0/1 CrashLoopBackOff 6 9m32s
该应用程序不会生成太多控制台日志。主日志位于文件中。如何访问该文件?manuchadha25@cloudshell:~ (copper-frame-262317)$ kubectl logs codingjediweb-7c45484669-czcpk
Oops, cannot start the server.
play.api.libs.json.JsResult$Exception: {"obj":[{"msg":["Unable to connect with database"],"args":[]}]}
manuchadha25@cloudshell:~ (copper-frame-262317)$ kubectl logs codingjediweb-7c45484669-qn4m5
Oops, cannot start the server.
play.api.libs.json.JsResult$Exception: {"obj":[{"msg":["Unable to connect with database"],"args":[]}]}
更新我试图实现Christoph的建议,即在Pod中使用两个容器-一个用于主要应用程序,另一个用于日志记录。我切换回应用程序的稳定版本,以确保该应用程序已启动/正在运行并正在生成日志。这将有助于测试该模式是否有效。看起来日志记录应用程序保持现有状态或崩溃。
yaml文件
manuchadha25@cloudshell:~ (copper-frame-262317)$ cat codingjediweb-nodes.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: codingjediweb
spec:
replicas: 2
selector:
matchLabels:
app: codingjediweb
template:
metadata:
labels:
app: codingjediweb
spec:
volumes:
- name: shared-logs
emptyDir: {}
containers:
- name: codingjediweb
image: docker.io/manuchadha25/codingjediweb:03072020v2
volumeMounts:
- name: shared-logs
mountPath: /deploy/codingjediweb-1.0/logs/
env:
- name: db.cassandraUri
value: cassandra://xx.yy.xxx.238:9042
- name: db.password
value: 9__something
- name: db.keyspaceName
value: something2
- name: db.username
value: superawesomeuser
ports:
- containerPort: 9000
- name: logging
image: busybox
volumeMounts:
- name: shared-logs
mountPath: /deploy/codingjediweb-1.0/logs/
command: ["tail -f /deploy/codingjediweb-1.0/logs/*.log"]
当我应用配置时,只有一个容器停留manuchadha25@cloudshell:~ (copper-frame-262317)$ kubectl get pods
NAME READY STATUS RESTARTS AGE
busybox 1/1 Running 1 10h
codingjediweb-857c6d584b-n4njp 1/2 CrashLoopBackOff 6 8m46s
codingjediweb-857c6d584b-s2hg2 1/2 CrashLoopBackOff 6 8m46s
进一步检查显示主要应用程序已启动manuchadha25@cloudshell:~ (copper-frame-262317)$ kubectl exec -it codingjediweb-857c6d584b-s2hg2 -c logging -- bash
error: unable to upgrade connection: container not found ("logging")
manuchadha25@cloudshell:~ (copper-frame-262317)$ kubectl exec -it codingjediweb-857c6d584b-s2hg2 -c codingjediweb -- bash
应用程序在正确的路径上生成日志root@codingjediweb-857c6d584b-s2hg2:/deploy# tail -f /deploy/codingjediweb-1.0/logs/*.log
2020-07-07 06:40:37,385 [DEBUG] from com.datastax.driver.core.Connection in codingJediCluster-nio-worker-0 - Connection[/34.91.191.238:9042-2, inFlight=0, closed=false] was inactive for 30 seconds, sending heartbeat
2020-07-07 06:40:37,389 [DEBUG] from com.datastax.driver.core.Connection in codingJediCluster-nio-worker-0 - Connection[/34.91.191.238:9042-2, inFlight=0, closed=false] heartbeat query succeeded
2020-07-07 06:41:07,208 [DEBUG] from com.datastax.driver.core.Connection in codingJediCluster-nio-worker-0 - Connection[/34.91.191.238:9042-1, inFlight=0, closed=false] was inactive for 30 seconds, sending heartbeat
2020-07-07 06:41:07,210 [DEBUG] from com.datastax.driver.core.Connection in codingJediCluster-nio-worker-0 - Connection[/34.91.191.238:9042-1, inFlight=0, closed=false] heartbeat query succeeded
2020-07-07 06:41:07,271 [DEBUG] from com.datastax.driver.core.Connection in codingJediCluster-nio-worker-0 - Connection[/10.44.1.4:9042-1, inFlight=0, closed=false] was inactive for 30 seconds, sending heartbeat
2020-07-07 06:41:07,274 [DEBUG] from com.datastax.driver.core.Connection in codingJediCluster-nio-worker-0 - Connection[/10.44.1.4:9042-1, inFlight=0, closed=false] heartbeat query succeeded
2020-07-07 06:41:07,332 [DEBUG] from com.datastax.driver.core.Connection in codingJediCluster-nio-worker-0 - Connection[/10.44.2.5:9042-1, inFlight=0, closed=false] was inactive for 30 seconds, sending heartbeat
2020-07-07 06:41:07,337 [DEBUG] from com.datastax.driver.core.Connection in codingJediCluster-nio-worker-0 - Connection[/10.44.2.5:9042-1, inFlight=0, closed=false] heartbeat query succeeded
2020-07-07 06:41:07,392 [DEBUG] from com.datastax.driver.core.Connection in codingJediCluster-nio-worker-0 - Connection[/34.91.191.238:9042-2, inFlight=0, closed=false] was inactive for 30 seconds, sending heartbeat
最佳答案
您可以在容器中创建第二个容器进行记录。只需将日志目录安装在两个容器中。第二个容器可以基于busybox图像并执行tail -f xyz.log
。
volumes:
- name: shared-logs
emptyDir: {}
containers:
- name: main-app
image: <your-image>
volumeMounts:
- name: shared-logs
mountPath: <path/to/logs>
- name: logging
image: busybox
volumeMounts:
- name: shared-logs
mountPath: <path/to/logs>
command: ["tail -f <path/to/logs/*.log>"]
现在您可以使用Kubectl logs <podname> -c logging -f
更新由于您的日志文件名是动态的,因此您可以将busybox容器与无限的睡眠命令一起使用,诸如
while true; do sleep 86400; done
之类的命令应如此。现在,日志记录容器不执行任何操作,但仍会挂载您的日志文件。另一个容器将崩溃,但日志记录容器应正在运行。您可以将它SSH入:kubectl exec -it <pod name> -c logging -- sh
或另一个想法:您可以将Pod的日志目录复制到本地系统并调查日志。
kubectl cp <some-pod>:/path/to/logs -c logging /path/to/local/dir
关于kubernetes - 如何在Kubernetes中的Pod中登录,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/62763866/