1

这就是我不断得到的:

al8-1@al8-1:~/kuber_test/pod_nginx$ kubectl get pods
NAME         READY   STATUS             RESTARTS   AGE
nginx        1/1     Running            0          6d2h
pod-apigw2   0/1     CrashLoopBackOff   1          15s

以下是“kubectl describe pods pod-apigw2”的输出

Name:         pod-apigw2
Namespace:    default
Priority:     0
Node:         al8-2/192.168.15.59
Start Time:   Wed, 26 Feb 2020 16:33:30 +0900
Labels:       <none>
Annotations:  cni.projectcalico.org/podIP: 192.168.4.55/32
Status:       Running
IP:           192.168.4.55
IPs:
  IP:  192.168.4.55
Containers:
  apigw2:
    Container ID:   docker://f684ef44ae53fd3176ddd7c051c9670da65da4bec84a1402359561abc646d85d
    Image:          parkdongwoo/apigw_test:v1
    Image ID:       docker-pullable://parkdongwoo/apigw_test@sha256:a447f131f0c9e63bb02a74708f4cbc2f6dd4551b0ba8f737b09072a8cc74c759
Port:           8080/TCP
Host Port:      0/TCP
State:          Waiting
  Reason:       CrashLoopBackOff
Last State:     Terminated
  Reason:       Completed
  Exit Code:    0
  Started:      Wed, 26 Feb 2020 16:37:00 +0900
  Finished:     Wed, 26 Feb 2020 16:37:00 +0900
Ready:          False
Restart Count:  5
Environment:    <none>
Mounts:
  /var/run/secrets/kubernetes.io/serviceaccount from default-token-z72r6 (ro)
Conditions:
  Type              Status
  Initialized       True
  Ready             False
  ContainersReady   False
  PodScheduled      True
Volumes:
  default-token-z72r6:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  default-token-z72r6
Optional:    false
QoS Class:       BestEffort
Node-Selectors:  <none>
Tolerations:     node.kubernetes.io/not-ready:NoExecute for 300s
             node.kubernetes.io/unreachable:NoExecute for 300s
Events:
Type     Reason     Age                    From               Message
  ----     ------     ----                   ----               -------
  Normal   Scheduled  <unknown>              default-scheduler  Successfully assigned default/pod-apigw2 to al8-2
  Normal   Pulled     4m26s (x4 over 5m23s)  kubelet, al8-2     Successfully pulled image "parkdongwoo/apigw_test:v1"
  Normal   Created    4m26s (x4 over 5m22s)  kubelet, al8-2     Created container apigw2
  Normal   Started    4m25s (x4 over 5m21s)  kubelet, al8-2     Started container apigw2
  Normal   Pulling    3m38s (x5 over 5m26s)  kubelet, al8-2     Pulling image "parkdongwoo/apigw_test:v1"
  Warning  BackOff    19s (x24 over 5m16s)   kubelet, al8-2     Back-off restarting failed container

但是当我试图查看日志时,什么也没有出现

al8-1@al8-1:~/kuber_test/pod_nginx$ kubectl logs pod-apigw2
al8-1@al8-1:~/kuber_test/pod_nginx$ kubectl logs pod-apigw2 -p
al8-1@al8-1:~/kuber_test/pod_nginx$

这是我的 yaml 文件

apiVersion: v1
kind: Pod
metadata:
  name: pod-apigw2
spec:
  selector:
      app: apigw2
  containers:
      - name: apigw2
        image: parkdongwoo/apigw_test:v1
        imagePullPolicy: Always
        ports:
                - name: port-apigw2
                  containerPort: 8080

如果我通过“docker run”运行 docker 映像,我可以毫无问题地运行该映像,但只有通过 kubernetes 我才会崩溃。

有人可以帮我吗,我如何在没有看到任何日志的情况下进行调试?

4

3 回答 3

0

这里的问题是您的 pod 中的容器映像提供的默认命令和参数已完成并使用 code 退出0。然后 kubernetes 看到容器没有运行,所以它重新启动它并最终重复这个循环,这个循环由 pod status: 表示CrashLoopBackOff

这是因为 Kubernetes 容器的处理方式与 docker 中的略有不同。因此,并非所有在 docker 中正常工作的 docker 镜像从一开始就与 kubernetes 兼容。

根据Kubernetes文档:

创建 Pod 时定义命令和参数

创建 Pod 时,您可以为在 Pod 中运行的容器定义命令和参数。要定义命令,请 command 在配置文件中包含该字段。要为命令定义参数,请 args 在配置文件中包含该字段。您定义的命令和参数在 Pod 创建后无法更改。

您在配置文件中定义的命令和参数会覆盖容器映像提供的默认命令和参数。如果您定义 args 但未定义命令,则默认命令将与您的新参数一起使用。

因此,为了调试此问题,您需要查看您正在使用的 docker 映像。它很可能需要对 docker 文件稍作修改,以便默认进程(命令)实际上是 Web 应用程序服务器进程。

希望这可以帮助。

于 2020-02-26T11:37:32.027 回答
0

嗨,您能否提供命令输出:

kubectl logs pod-apigw2 -c apigw2

或者更好地安装 stern,这是日志查看器,您可以实时查看 pod 及其容器的日志;)。只需复制二进制文件,更改权限,以便您可以执行并运行它。

https://github.com/wercker/stern

于 2020-02-26T08:42:38.333 回答
0

您正在使用的 docker 映像的主要进程刚刚完成它的工作并完成。您很可能需要找到此 docker 映像中使用的脚本来启动服务。

然后在您的 pod 定义中,您可以通过commandand调用此命令args。请参阅此示例

于 2020-02-27T09:41:41.763 回答