为了探测其他节点Pod中容器的健康状态,k8s提供了以下三种探活方式:

  • HTTP
  • TCP
  • Exec命令

HTTP方式就是通过容器的IP地址和端口号及及路径调用HTTP Get方法,如果响应的状态码在200到400之间,就认为容器状态健康。

TCP通过容器的IP地址和端口号执行TCP检查,如果端口号能被访问,则认为容器状态健康。

Exec:在容器中执行一个命令,如果该命令的退出码为0,则表明容器健康。

 

那么kubeedge如果实现探活呢?

定位到kubeedge源码:https://github.com/kubeedge/kubeedge/blob/master/edge/pkg/edged/edged.go

可以看出kubeedge的边缘端edgecore中的edged模块其实就是个mini版的kubelet,而在k8s集群中kubelet的作用就是用来探测其自身节点中容器的健康状态并向master汇报的。

其中最重要的就是引入了这几个头文件

这种引入头文件方式和之前写C++代码引入头文件的方式还不大一样,因为C++都是事先将一些需要引用的外部头文件加入到本地。

这是go语言的一种方式,查看go.mod文件可以看到:

编译的时候,go会使用go get去拉取这些三方代码。将会下载到本地的$GOPATH路径下:

kubeedge然后在自己的edged中加入kubelet的探活模块,就可以实现类似kubelet中对容器的探活功能:

 

我在edged文件夹中搜索probe,可以看到kubeedge直接使用的k8s提供的API实现了探针的功能,也可以看看到探针管理器其实是Pod的上级。

 

kubenetes中的探活模块:https://github.com/kubernetes/kubernetes/blob/master/pkg/kubelet/prober/prober.go

 

-----------------------------------------------------------------------------------------------------------------------------------------------------------------

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐