探测的输出保存到每个节点上的kubelet组件。
作为 Kubernetes 的默认设置,如果您要描述 pod,则可以检查 Probes。例如,对于一切正常工作的 pod,您将找不到任何有关此的信息。它仅显示相关事件,例如 Unhealthy 或 Killing 等。
要检查此容器是否使用任何LivenessProbe 或ReadinessProbe,您需要describe pod 并找到:Containers.<containerName>.Liveness 和Containers.<containerName>.Readiness。
下面的示例基于docs,但进行了额外的更改以保证它会失败。
添加:
livenessProbe:
exec:
command:
- cat
- /tmp/healthy
输出:
$ kubectl describe pod goproxy-fail
...
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 3m38s default-scheduler Successfully assigned default/goproxy-fail to kubeadm-16
Normal Pulled 26s (x4 over 3m37s) kubelet, kubeadm-16 Container image "k8s.gcr.io/goproxy:0.1" already present on machine
Normal Created 26s (x4 over 3m37s) kubelet, kubeadm-16 Created container goproxy
Normal Killing 26s (x3 over 2m26s) kubelet, kubeadm-16 Container goproxy failed liveness probe, will be restarted
Normal Started 25s (x4 over 3m36s) kubelet, kubeadm-16 Started container goproxy
Warning Unhealthy 6s (x10 over 3m6s) kubelet, kubeadm-16 Liveness probe failed: OCI runtime exec failed: exec failed: container_linux.go:346: starting container process caused "exec: \"cat\": executable file not found in $PATH": unknown
这意味着超过 3m6s 有 10 次检查全部失败,状态为 Unhealthy。
另一个默认选项是使用$ kubectl get events 的事件。输出将是 smilar,但它会从集群中收集所有事件。您可以指定namespace等。
如何检查成功探测
成功探测的输出不会记录在默认设置中的任何位置。您需要将Kubelet 日志记录级别、--verbosity 更改为至少调试模式 (4)。
要做到这一点,你必须:
- ssh 到主节点
- 编辑文件
/var/lib/kubelet/kubeadm-flags.env(在ubuntu上你需要sudo权限才能做到这一点$ sudo su)。
默认输出看起来像KUBELET_KUBEADM_ARGS="--cgroup-driver=cgroupfs --network-plugin=cni --pod-infra-container-image=k8s.gcr.io/pause:3.1 --resolv-conf=/run/systemd/resolve/resolv.conf",你必须在最后添加--v=4。
根据您未来的需要,您可以采用更高的日志级别。更多信息可以在here 找到。
kubeadm-flags.env 中的所需值如下所示:
KUBELET_KUBEADM_ARGS="--cgroup-driver=cgroupfs --network-plugin=cni --pod-infra-container-image=k8s.gcr.io/pause:3.1 --resolv-conf=/run/systemd/resolve/resolv.conf --v=4"
- 之后,您需要重新启动
kubelet 以应用这个新的日志记录级别。您可以使用 sudo systemctl restart kubelet 进行操作。
下一步是使用 journactl 检查 kubelet 日志。
$ journalctl -u kubelet 你也可以使用 grep 它,因为--v 设置为 4,你会得到大量的日志。我已经创建了另一个具有类似配置但 pod 名称为 tetest 和容器名称为 goproxy 的 pod,更容易找到。
$ journalctl -u kubelet | grep tetest
...
Dec 31 10:29:46 kubeadm-16 kubelet[17767]: I1231 10:29:46.303112 17767 prober.go:129] Readiness probe for "tetest_default(a518f558-9b08-4ce8-86a2-81875f205826):goproxy" succeeded
Dec 31 10:29:55 kubeadm-16 kubelet[17767]: I1231 10:29:55.289330 17767 prober.go:129] Liveness probe for "tetest_default(a518f558-9b08-4ce8-86a2-81875f205826):goproxy" succeeded
Dec 31 10:29:56 kubeadm-16 kubelet[17767]: I1231 10:29:56.303326 17767 prober.go:129] Readiness probe for "tetest_default(a518f558-9b08-4ce8-86a2-81875f205826):goproxy" succeeded
Dec 31 10:30:06 kubeadm-16 kubelet[17767]: I1231 10:30:06.302931 17767 prober.go:129] Readiness probe for "tetest_default(a518f558-9b08-4ce8-86a2-81875f205826):goproxy" succeeded
Dec 31 10:30:15 kubeadm-16 kubelet[17767]: I1231 10:30:15.289462 17767 prober.go:129] Liveness probe for "tetest_default(a518f558-9b08-4ce8-86a2-81875f205826):goproxy" succeeded
Dec 31 10:30:16 kubeadm-16 kubelet[17767]: I1231 10:30:16.303267 17767 prober.go:129] Readiness probe for "tetest_default(a518f558-9b08-4ce8-86a2-81875f205826):goproxy" succeeded
Dec 31 10:30:26 kubeadm-16 kubelet[17767]: I1231 10:30:26.303248 17767 prober.go:129] Readiness probe for "tetest_default(a518f558-9b08-4ce8-86a2-81875f205826):goproxy" succeeded
Dec 31 10:30:35 kubeadm-16 kubelet[17767]: I1231 10:30:35.289164 17767 prober.go:129] Liveness probe for "tetest_default(a518f558-9b08-4ce8-86a2-81875f205826):goproxy" succeeded
Dec 31 10:30:36 kubeadm-16 kubelet[17767]: I1231 10:30:36.303071 17767 prober.go:129] Readiness probe for "tetest_default(a518f558-9b08-4ce8-86a2-81875f205826):goproxy" succeeded
Dec 31 10:30:46 kubeadm-16 kubelet[17767]: I1231 10:30:46.303751 17767 prober.go:129] Readiness probe for "tetest_default(a518f558-9b08-4ce8-86a2-81875f205826):goproxy" succeeded
Dec 31 10:30:49 kubeadm-16 kubelet[17767]: I1231 10:30:49.237565 17767 kubelet.go:1965] SyncLoop (SYNC): 1 pods; tetest_default(a518f558-9b08-4ce8-86a2-81875f205826)
...
在 Kubernetes 1.16.3、操作系统 Ubuntu 18.04 上测试。
希望对你有帮助