在Go程序中检查Pod是否在k8s集群上运行

时间:2019-11-30 21:37:27

标签: go kubernetes

我正在用Go语言编写一个命令行工具,该工具将根据特定命名空间中k8s集群上特定pod的存在来执行操作。

我可以通过go程序中的命令行(shell)调用来完成

kubectl get pods -n mynapespace l app=myapp

或者如果我不确定这些标签,那么甚至会变得更优雅:

kubectl get pods -n mynapespace | grep -i somepatternIamcertainabout

但是,考虑到我使用的是k8s本地语言(Go),我想知道是否可能有更多的Go本地/特定方式来向k8s api服务器进行此类查询,而不求助于我内部的shell调用cli工具。

2 个答案:

答案 0 :(得分:1)

kubectl实用程序只是一个便捷包装,它使用沼泽标准HTTP与Kubernetes API进行通信。 Go标准库具有出色的http package。非常适合您要完成的工作。

实际上,您可以只使用Kubernetes项目本身中的this official client package

答案 1 :(得分:1)

  

但是,考虑到我使用的是k8s母语(Go),   想知道是否可能有更多的Go原生/特定方式   向k8s api服务器进行此类查询,而无需诉诸   我的cli工具中的shell调用。

如果您想在以 go 编写的程序中与 k8s集群对话,而无需诉诸Shell调用,则可以使用client-go库。它包含您在go程序中查询k8s api服务器所需的一切。

  

包含的内容

     
      
  • kubernetes软件包中包含用于   访问Kubernetes API。
  •   
  • discovery软件包用于发现API   Kubernetes API服务器支持。
  •   
  • dynamic软件包中包含一个   可以对任意对象执行通用操作的动态客户端   Kubernetes API对象。
  •   
  • plugin/pkg/client/auth软件包包含   可选的身份验证插件,用于从中获取凭据   外部资源。
  •   
  • transport软件包用于设置auth和   开始连接。
  •   
  • tools/cache软件包对于编写非常有用   控制器。
  •