我正在用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工具。
答案 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
软件包对于编写非常有用 控制器。