构建自定义 Go 插件

Building custom Go Plugin

我正在为 kustomize 创建自定义转换器。但是,即使是最基本的 Go 插件,我也会 运行 遇到问题。我正在尝试按照此处的这些步骤进行操作 https://github.com/kubernetes-sigs/kustomize/blob/master/docs/plugins/goPluginGuidedExample.md

我正在使用主线 kustomize 中的插件之一,即。 secretsfromdatabase[1]

根据文档,我遵循的说明是:

tmpGoPath=$(mktemp -d)
GOPATH=$tmpGoPath go install sigs.k8s.io/kustomize/kustomize
GOPATH=$tmpGoPath go build -buildmode plugin -o SecretsFromDatabase.so SecretsFromDatabase.go
cp SecretsFromDatabase.so ~/.config/kustomize/plugin/mygenerators/sopsencodedsecrets/SopsEncodedSecrets

现在,当我 运行 kustomize 时,出现以下错误:

Error: accumulating resources: recursed accumulation [...] fails to load: plugin.Open("$HOME/.config/kustomize/plugin/mygenerators/sopsencodedsecrets/SopsEncodedSecrets"): plugin was built with a different version of package internal/cpu

奇怪的是我在 git 中使用的标签与我系统上安装的版本相同。

kustomize version                                                                                                                                                     tags/kustomize/v3.5.4^0
{Version:3.5.4 GitCommit:3af514fa9f85430f0c1557c4a0291e62112ab026 BuildDate:2020-01-17T14:23:25+00:00 GoOs:darwin GoArch:amd64}

[1] https://github.com/kubernetes-sigs/kustomize/tree/master/plugin/someteam.example.com/v1/secretsfromdatabase

至于现在插件很难编写和支持,因为环境应该是相同的,而且实际上只有原始构建系统才能可靠地构建插件。结果,很多像您一样的人在他们的构建环境中发现了很小的差异。我认为从设计上来说这是个坏主意,强烈建议熟悉 Reddit 讨论 here