繁体   English   中英

是否可以获得 pod 在崩溃之前的 IP 地址?

[英]Is it possible to get the IP address a pod had prior to crashing?

在 Pod 崩溃并重新启动后,是否可以检索崩溃前 Pod 的 IP 地址?

这是一个非常广泛的问题,因为无法确定 pod 崩溃的确切位置和原因。 但是,我将展示在不同情况下可以做些什么。

  • Pod 的容器崩溃然后自行重启:

在这种情况下,pod 将保存其 IP 地址。 最简单的方法是运行kubectl get pods -o wide

Output 会像

NAME                                        READY   STATUS    RESTARTS   AGE   IP            NODE      NOMINATED NODE   READINESS GATES
nginx-deployment-699f9b54d-g2w97            0/1     CrashLoopBackOff   2          55s   10.244.1.53   worker1   <none>           <none>

如您所见,即使容器崩溃,pod 也已分配 IP 地址

也可以添加initContainers并添加一个命令,该命令将获取 pod 的 IP 地址(取决于您将使用的图像,有不同的选项,如ip aifconfig -a等。

这是一个如何添加它的简单示例:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      initContainers: # here is where to add initContainer section
      - name: init-container
        image: busybox
        args: [/bin/sh, -c, "echo IP ADDRESS ; ifconfig -a"]
      containers:
      - name: nginx
        image: nginx:latest
        ports:
        - containerPort: 80
        command: ["/sh", "-c", "nginx --version"] #this is to make nginx image failing

在您的主容器启动之前,此init-container将运行ifconfig -a命令并将其结果放入日志中。

您可以通过以下方式进行检查:

kubectl logs %pod_name% -c init-container

Output 将是:

IP ADDRESS
eth0 Link encap:Ethernet HWaddr F6:CB:AD:D0:7E:7E inet addr:10.244.1.52 Bcast:10.244.1.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1410 Metric:1 RX packets:5 errors:0 dropped:0 overruns:0 frame:0 TX packets:1 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:398 (398.0 B) TX bytes:42 (42.0 B)
lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

您还可以通过在上面的命令中添加--previous来检查以前运行的 pod 版本的日志。

  • Pod 崩溃然后重新创建 在这种情况下,新的 Pod 被创建,这意味着本地日志消失了。 您需要考虑将它们与 pod 分开保存。 对于这个问题,您可以使用volumes 例如hostPath将日志存储在 pod 运行的节点上,或者nfs可以附加到不同的 pod 并被访问。
  • 控制平面在 pod 仍在运行时崩溃您无法使用控制平面和kubectl访问日志,但是您的容器仍将在节点上运行。 要直接从运行容器的节点获取日志,请根据运行时使用dockercrictl

这种情况的理想解决方案是使用监控系统,例如prometheuselasticseach 它将需要额外设置fluentdkube-state-metrics

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM