kubeedge是如何实现类似kubernetes的探针机制的?
为了探测其他节点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
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
更多推荐
所有评论(0)