为新类型扩展 kustomize 图像转换器
Extend kustomize image transformer for new types
有没有办法扩展 kustomize 图像转换器以将更多键识别为图像说明符? 就像 nameReference
transformer 对 namePrefix
和 nameSuffix
变形金刚
The Kustomize images:
transformer对于k8s清单中的镜像替换和registry重命名非常有用。
但它 only supports types that embed PodTemplate
和一些硬编码类型。尽管 非常 常见,但不使用 PodTemplate
的 CRD 不会被处理。示例包括 kube-prometheus
Prometheus
和 AlertManager
资源以及 opentelemetry-operator
OpenTelemetryCollector
资源。
因此,您不得不维护一堆杂乱的战略合并或 json 补丁,以便在这些图像前面加上可信的注册表等。
这里有一个问题的例子。假设我必须使用 images:
转换器列表部署以 mytrusted.registry
为前缀的所有内容。为了简洁起见,我将使用一个虚拟图像,将所有匹配的图像替换为 MATCHED
,因此我不必将它们全部列出:
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- "https://github.com/prometheus-operator/kube-prometheus"
images:
- name: "(.*)"
newName: "MATCHED"
newTag: "fake"
您希望结果中的唯一图像是“匹配的:假的”,但实际上:
$ kustomize build | grep 'image: .*' | sort | uniq -c
12 image: MATCHED:fake
1 image: quay.io/prometheus/alertmanager:v0.24.0
1 image: quay.io/prometheus/prometheus:v2.34.0
kind: Prometheus
和 kind: AlertManager
资源中的图像不匹配,因为它们不是 PodTemplate
。
你必须为这些编写一个自定义补丁,这会造成像这样的混乱kustomization.yaml
内容:
patches:
- path: prometheus_image.yaml
target:
kind: Prometheus
- path: alertmanager_image.yaml
target:
kind: Alertmanager
与 prometheus_image.yaml
:
apiVersion: monitoring.coreos.com/v1
kind: Prometheus
metadata:
name: ignored
spec:
image: "MATCHED:fake"
和alertmanager_image.yaml
:
apiVersion: monitoring.coreos.com/v1
kind: Alertmanager
metadata:
name: ignored
spec:
image: "MATCHED:fake"
IMO 太可怕了。
我希望能够做的是告诉Kustomize
的图像转换器它,就像它可以用自定义配置映射生成器等扩展一样,就像以下 不受支持的虚构伪代码 以现有 nameReference
transformer
为模型
imageReference:
- kind: Prometheus
fieldSpecs:
- spec/image
写完这篇文章后,我终于偶然发现了答案:Kustomize 确实支持 image transformer configs。
表达上述内容的正确方法是 image_transformer_config.yaml
文件包含:
images:
- path: spec/image
kind: Prometheus
- path: spec/image
kind: Alertmanager
和一个引用它的 kustomization.yaml
条目,例如
configurations:
- image_transformer_config.yaml
当作为 Component
导入时,这似乎也能正常工作。
甚至 pointed out by the transformer docs 所以我要怪这个人瞎了。
有没有办法扩展 kustomize 图像转换器以将更多键识别为图像说明符? 就像 nameReference
transformer 对 namePrefix
和 nameSuffix
变形金刚
The Kustomize images:
transformer对于k8s清单中的镜像替换和registry重命名非常有用。
但它 only supports types that embed PodTemplate
和一些硬编码类型。尽管 非常 常见,但不使用 PodTemplate
的 CRD 不会被处理。示例包括 kube-prometheus
Prometheus
和 AlertManager
资源以及 opentelemetry-operator
OpenTelemetryCollector
资源。
因此,您不得不维护一堆杂乱的战略合并或 json 补丁,以便在这些图像前面加上可信的注册表等。
这里有一个问题的例子。假设我必须使用 images:
转换器列表部署以 mytrusted.registry
为前缀的所有内容。为了简洁起见,我将使用一个虚拟图像,将所有匹配的图像替换为 MATCHED
,因此我不必将它们全部列出:
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- "https://github.com/prometheus-operator/kube-prometheus"
images:
- name: "(.*)"
newName: "MATCHED"
newTag: "fake"
您希望结果中的唯一图像是“匹配的:假的”,但实际上:
$ kustomize build | grep 'image: .*' | sort | uniq -c
12 image: MATCHED:fake
1 image: quay.io/prometheus/alertmanager:v0.24.0
1 image: quay.io/prometheus/prometheus:v2.34.0
kind: Prometheus
和 kind: AlertManager
资源中的图像不匹配,因为它们不是 PodTemplate
。
你必须为这些编写一个自定义补丁,这会造成像这样的混乱kustomization.yaml
内容:
patches:
- path: prometheus_image.yaml
target:
kind: Prometheus
- path: alertmanager_image.yaml
target:
kind: Alertmanager
与 prometheus_image.yaml
:
apiVersion: monitoring.coreos.com/v1
kind: Prometheus
metadata:
name: ignored
spec:
image: "MATCHED:fake"
和alertmanager_image.yaml
:
apiVersion: monitoring.coreos.com/v1
kind: Alertmanager
metadata:
name: ignored
spec:
image: "MATCHED:fake"
IMO 太可怕了。
我希望能够做的是告诉Kustomize
的图像转换器它,就像它可以用自定义配置映射生成器等扩展一样,就像以下 不受支持的虚构伪代码 以现有 nameReference
transformer
imageReference:
- kind: Prometheus
fieldSpecs:
- spec/image
写完这篇文章后,我终于偶然发现了答案:Kustomize 确实支持 image transformer configs。
表达上述内容的正确方法是 image_transformer_config.yaml
文件包含:
images:
- path: spec/image
kind: Prometheus
- path: spec/image
kind: Alertmanager
和一个引用它的 kustomization.yaml
条目,例如
configurations:
- image_transformer_config.yaml
当作为 Component
导入时,这似乎也能正常工作。
甚至 pointed out by the transformer docs 所以我要怪这个人瞎了。