Kubernetes TCP健康检查
我正在构建.NET核心控制台微服务,架构师建议使用TCP健康检查而不是HTTP健康检查。因此,为了实现TCP健康检查,请查找我在OCP文件(deploymentconfig部分)中添加的以下配置。Jenkins构建成功,部署配置推出也成功 查询:Kubernetes TCP健康检查,tcp,kubernetes-health-check,Tcp,Kubernetes Health Check,我正在构建.NET核心控制台微服务,架构师建议使用TCP健康检查而不是HTTP健康检查。因此,为了实现TCP健康检查,请查找我在OCP文件(deploymentconfig部分)中添加的以下配置。Jenkins构建成功,部署配置推出也成功 查询: 如何确保探针正常工作。是否有方法通过TCP健康检查定期验证探针的就绪性和活性 是否有任何语法可用于使用TCP健康检查显式检查容器健康状态 readinessProbe: tcpSocket: port: 8080
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}}"
探测器的输出保存到每个节点上的组件 在Kubernetes中,默认情况下,如果要描述pod,可以检查探测器。例如,在pod中,所有部件都正常工作,您将找不到有关此的任何信息。它只显示相关事件,如
不健康
或杀戮
等
要检查此容器是否正在使用任何livenssprobe
或ReadinessProbe,您需要描述pod并找到:容器..活动性和容器..就绪性
下面的示例基于,但有额外的更改,这将保证它将失败
增加:
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次检查全部失败,状态为不健康
另一个默认选项是使用$kubectl get events
使用事件。输出将是smillar,但它将从集群收集所有事件。您可以指定命名空间
等
检查如何成功探测
默认设置中的任何位置都不会记录成功探测的输出。您需要将Kubelet
日志记录级别,--verbosity
至少更改为调试模式(4)
为此,您必须:
- ssh到主节点
- 编辑文件
/var/lib/kubelet/kubeadm flags.env
(在ubuntu上,您需要sudo权限才能执行此操作$sudo su
)。
默认输出类似于KUBELET\u KUBEADM\u ARGS=“--cgroup driver=cgroupfs--network plugin=cni--pod infra container image=k8s.gcr.io/pause:3.1--resolv conf=/run/systemd/resolv/resolv.conf”
您必须在末尾添加--v=4
根据您未来的需要,您可以选择更高的日志级别。可以找到更多信息。
在kubeadm flags.env
中所需的值如下所示:
KUBELET_KUBEADM_ARGS=“--cgroup-driver=cgroup-fs--network-plugin=cni--pod-infra-container-image=k8s.gcr.io/pause:3.1--resolv conf=/run/systemd/resolv/resolv.conf--v=4”
- 之后,您需要重新启动
kubelet
,以应用此新的日志记录级别。您可以使用sudo systemctl restart kubelet执行此操作
下一步是使用journactl
检查kubelet日志
$journalctl-u kubelet
您也可以对其进行grep,因为当--v
设置为4时,您将获得大量日志。我已经创建了另一个具有类似配置的pod,但是具有pod nametetest
和container namegoproxy
,更容易找到
$ 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上测试
希望这将有助于将探头的输出保存到每个节点上的组件
在Kubernetes中,默认情况下,如果要描述pod,可以检查探测器。例如,在pod中,所有部件都正常工作,您将找不到有关此的任何信息。它只显示相关事件,如不健康
或杀戮
等
要检查此容器是否正在使用任何livenssprobe
或ReadinessProbe,您需要描述pod并找到:容器..活动性和容器..就绪性
下面的示例基于,但有额外的更改,这将保证它将失败
增加:
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次检查全部失败,状态为不健康
另一个默认选项是使用$kubectl get events
使用事件。输出将是smillar,但它将从集群收集所有事件。您可以指定命名空间
等
检查如何成功探测
默认设置中的任何位置都不会记录成功探测的输出。您需要将Kubelet
日志记录级别,--verbosity
至少更改为调试模式(4)
为此,您必须:
- ssh到主节点
- 编辑文件
/var/lib/kubelet/kubeadm flags.env
(在ubuntu上,您需要sudo权限才能执行此操作$sudo su
)。
默认输出类似于KUBELET\u KUBEADM\u ARGS=“--cgroup driver=cgroupfs--network plugin=cni--pod infra container image=k8s.gcr.io/pause:3.1--resolv conf=/run/systemd/resolv/resolv.conf”
您必须在末尾添加--v=4
根据您未来的需要,您可以选择更高的日志级别。可以找到更多信息。
在kubeadm flags.env
中所需的值如下所示:
KUBELET_KUBEADM_ARGS=“--cgroup-driver=cgroup-fs--network-plugin=cni--pod-infra-container-image=k8s.gcr.io/pause:3.1--resolv conf=/run/systemd/resolv/resolv.conf--v=4”
- 之后,您需要重新启动
kubelet
,以应用此新的日志记录级别。您可以使用sudo systemctl restart kubelet执行此操作
下一步是使用journactl
检查kubelet日志
$journalctl-u kubelet
您也可以对其进行grep,因为当--v
设置为4时,您将获得大量日志。我已经创建了另一个具有类似配置的pod,但是具有pod nametetest
和container namegoproxy
,更容易找到
$ 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上测试
希望对您有所帮助请详细说明您的问题,并提供您的详细信息