【问题标题】:Check if a pod is running on a k8s cluster in a go program在 go 程序中检查 pod 是否在 k8s 集群上运行
【发布时间】:2019-12-02 21:22:27
【问题描述】:

我正在用 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工具。

【问题讨论】:

  • 没有理由add tags to your title。这只是多余的混乱。
  • 还用有意义的名称注释/标记您的 pod。所以不要使用 grep - 而是按标签搜索 pods/deployments/services。

标签: go kubernetes


【解决方案1】:

kubectl 实用程序只是一个便利的包装器,它使用沼泽标准 HTTP 与 Kubernetes API 对话。 Go 标准库有一个很棒的http package。非常适合您想要完成的工作。

事实上,您可以直接使用 Kubernetes 项目本身的 this official client package

【讨论】:

  • 还可以使用RBAC 授予您的 pod 只读view 类型访问权限等。
【解决方案2】:

但是,鉴于我使用的是 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 包用于设置身份验证和 开始连接。
  • tools/cache 包对编写很有用 控制器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-05
    • 2022-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-28
    相关资源
    最近更新 更多