我正在构建.NET核心控制台微服务,并且架构师建议使用TCP健康检查而不是HTTP健康检查。因此,为了实施TCP运行状况检查,请找到我在OCP文件(deploymentconfig部分)中添加的以下配置。 Jenkins构建成功,并且部署配置成功部署。
查询:
是否有任何语法可以使用TCP运行状况检查显式检查容器运行状况。
readinessProbe:
tcpSocket:
port: 8080
initialDelaySeconds: "${{READINESS_DELAY}}"
periodSeconds: "${{READINESS_TIMEOUT}}"
timeoutSeconds: "${{READINESS_TIMEOUT}}"
livenessProbe:
tcpSocket:
port: 8080
initialDelaySeconds: "${{LIVENESS_DELAY}}"
periodSeconds: "${{LIVENESS_TIMEOUT}}"
timeoutSeconds: "${{LIVENESS_TIMEOUT}}"
答案 0 :(得分:0)
探针的输出保存到每个节点上的kubelet组件中。
在Kubernetes中作为默认设置,您可以检查Probes是否描述pod。例如,对于Pod,一切正常运行,您将找不到与此有关的任何信息。它仅显示相关事件,例如Unhealthy
或Killing
等。
要检查此容器是否使用任何LivenessProbe
或ReadinessProbe,您需要describe
吊舱并找到: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
这意味着超过3分6秒有10项检查全部失败,状态为Unhealthy
。
另一个默认选项是使用$ kubectl get events
使用事件。输出将是微笑的,但它将收集群集中的所有事件。您可以指定namespace
等。
如何检查成功的探针
在默认设置下,任何地方都不会记录成功探测的输出。您需要将Kubelet
日志记录级别--verbosity
至少更改为调试模式(4)。
要做到这一点,您必须:
/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
。 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时,您将获得大量日志。我创建了另一个具有相似配置但名称为tetest
的容器容器名称goproxy
,更易于查找。
$ 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上进行了测试。
希望这会有所帮助