Kubernetes TCP健康检查

Kubernetes TCP健康检查,tcp,kubernetes-health-check,Tcp,Kubernetes Health Check,我正在构建.NET核心控制台微服务,架构师建议使用TCP健康检查而不是HTTP健康检查。因此,为了实现TCP健康检查,请查找我在OCP文件(deploymentconfig部分)中添加的以下配置。Jenkins构建成功,部署配置推出也成功 查询: 如何确保探针正常工作。是否有方法通过TCP健康检查定期验证探针的就绪性和活性 是否有任何语法可用于使用TCP健康检查显式检查容器健康状态 readinessProbe: tcpSocket: port: 8080

我正在构建.NET核心控制台微服务,架构师建议使用TCP健康检查而不是HTTP健康检查。因此,为了实现TCP健康检查,请查找我在OCP文件(deploymentconfig部分)中添加的以下配置。Jenkins构建成功,部署配置推出也成功

查询:

  • 如何确保探针正常工作。是否有方法通过TCP健康检查定期验证探针的就绪性和活性
  • 是否有任何语法可用于使用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}}"
    

  • 探测器的输出保存到每个节点上的组件

    在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 name
    tetest
    和container name
    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上测试


    希望这将有助于将探头的输出保存到每个节点上的组件

    在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 name
    tetest
    和container name
    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上测试


    希望对您有所帮助

    请详细说明您的问题,并提供您的详细信息