【问题标题】:Customizing kubectl output with go templates using custom function使用自定义函数使用 go 模板自定义 kubectl 输出
【发布时间】:2022-01-10 15:38:04
【问题描述】:

我正在尝试在 Go 模板中添加一个自定义函数,用于解析 PodStatus 中的时间并获取它的绝对时间。

自定义函数示例:

PodScheduled, _ := time.Parse(time.RFC3339, "2021-12- 23T20:20:36Z")
Ready, _ := time.Parse(time.RFC3339, "2021-12-31T07:36:11Z")

difference := Ready.Sub(PodScheduled)
fmt.Printf("difference = %v\n", difference)

我可以使用内置函数。

如何在 kubectl 中使用自定义函数?

例如这个库: https://github.com/Masterminds/sprig

谢谢:)

【问题讨论】:

  • 我做了一个简单的程序,它读取输入和模板,并用 go text/template + sprig 函数渲染它。您可以使用 kubectl 输出 json 并将其通过管道输入github.com/bluebrown/jpipe

标签: go kubernetes kubectl go-templates


【解决方案1】:

IIUC 你有(至少)3 个选项:

  1. 不鼓励:编写您自己的客户端(而不是 kubectl)来提供该功能;
  2. 鼓励:使用 shell 对来自例如的输出进行后处理。 kubectl get pods --output=json) 通过管道将结果通过:
    • 从标准输入读取的 Golang 二进制文件
    • 或者更好的通用 JSON 处理工具,例如 jq,可以做到这一点(还有更多!)
  3. 为了完整起见,kubectl 支持输出格式(--output=jsonpath...);尽管JSONPath 可能不足以满足这种需求;

请参阅 jq 的 Dates 文档

【讨论】:

  • 感谢您分享您的见解。我的任务:获取有关 Pod 启动所需时间的报告。我们决定使用来自 PodStatus 的信息:Ready-PodScheduled=absolute delta What
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-11
  • 1970-01-01
  • 2013-06-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多