深入k8s监控检查源码之手写ping指令

深入k8s监控检查源码之手写ping指令

引言:

Ping的基本原理是发送和接受ICMP请求回显报文,利用Go语言可以轻松实现这一过程,较之C/C++/Java之类的语言,Go的实现过程十分简单,效率和安全性也十分完美。
本文会带大家从TCP/IP ICMP基本原理结构 到 Request实现 Respose回显 ,最后也会给大家拓展几个参数以及统计等

k8s源码第一步cmd命令脚手架

众所皆知 k8s作为云原生核心,虽然我们今天不讲其综合应用和原理源码,但可以先参看下我之前在VIP中讲其整体架构时画的一个系统架构图。
K8S 枫叶云笔记 (整体架构)
至于源码由于文章篇幅限制。我这里只能先给大家截概览图了

深入k8s监控检查源码之手写ping指令_第1张图片

image-1666256787401


大家可以进入可以发现不论哪个服务的启动都得先借助cobra来完成命令行得运行。

Cobra既是一个用来创建强大的现代命令行应用的库,又是一个用来生成应用和命令文件的脚手架。
cobra是一种创建强大的现代CLI应用程序的库。
很多流行的Go项目都使用Cobra,例如Kubernetes, Hugo, rkt, etcd, Moby (former Docker), Docker (distribution), OpenShift, Delve, GopherJS, CockroachDB, Bleve, ProjectAtomic (enterprise), Giant Swarm’s gsctl, Nanobox/Nanopack, rclone, nehm, Pouch, Istio, Prototool, mattermost-server, Gardener, Linkerd等。

从官方文档 延续阅读-可观察性
监控探测方式:(三种探测机制)
第一种是 httpGet。它是通过发送 http Get 请求来进行判断的,当返回码是 200-399 之间的状态码时,标识这个应用是健康的;其他错误码则重启
第二种探测方式是 Exec。它是通过执行容器中的一个命令来判断当前的服务是否是正常的,当命令行的返回结果是 0,则标识容器是健康的;
第三种探测方式是 tcpSocket 。它是通过探测容器的 IP 和 Port 进行 TCP 健康检查,如果这个 TCP 的链接能够正常被建立,那么标识当前这个容器是健康的

本文重点关注其监控检查Exec 的ping,后续httpGet,和tcpSocket的方式也会讲到。
对k8s有一定了解的应该知道默认情况下,当某个容器终止退出之后,k8s会尝试重启该容器。这也就是我们

  • 默认的RestartPolicy策略 Always。
    当然除此之外还有两种 分别是
  • Onfailure :当容器异常退出时(退出码为非0),重启容器
  • Never:当容器终止退出时,不重启容器
    可在K8S 配置存活

(CKA 考证这个部分也是重要模块之一)
多久检测一次,检测频率?
你可以访问 s

你可能感兴趣的:(Golang,云原生,kubernetes,docker,运维)