我已经用新镜像更新了正在运行的群集,不幸的是它崩溃了。我想登录到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/

10-10 14:02