有没有办法扩展 kustomize 图像转换器以将更多键识别为图像说明符?像nameReference变压器确实是为了namePrefix
and nameSuffix
变压器。
定制化images:变压器对于 k8s 清单中的图像替换和注册表重命名非常有用。
But it 仅支持嵌入的类型PodTemplate也许还有一些硬编码类型。不使用的卡PodTemplate
尽管它们被处理,但没有被处理very常见的。例子包括kube-prometheus
Prometheus
and AlertManager
资源和opentelemetry-operator
OpenTelemetryCollector
资源。
因此,您必须维护一堆混乱的战略合并或 json 补丁,以使用受信任的注册表等为此类图像添加前缀。
这是目前问题的一个例子。假设我必须部署前缀为的所有内容mytrusted.registry
与images:
变压器清单。为了简洁起见,我将使用一个虚拟图像来替换所有匹配的图像MATCHED
,所以我不必将它们全部列出:
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- "https://github.com/prometheus-operator/kube-prometheus"
images:
- name: "(.*)"
newName: "MATCHED"
newTag: "fake"
您可能期望结果中唯一的图像是“MATCHED: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
and kind: AlertManager
资源不会匹配,因为它们不是PodTemplate
.
你必须为这些编写一个自定义补丁,这会造成这样的混乱kustomization.yaml
内容:
patches:
- path: prometheus_image.yaml
target:
kind: Prometheus
- path: alertmanager_image.yaml
target:
kind: Alertmanager
with prometheus_image.yaml
:
apiVersion: monitoring.coreos.com/v1
kind: Prometheus
metadata:
name: ignored
spec:
image: "MATCHED:fake"
and alertmanager_image.yaml
:
apiVersion: monitoring.coreos.com/v1
kind: Alertmanager
metadata:
name: ignored
spec:
image: "MATCHED:fake"
在我看来,这是可怕的。
What I want能够做的就是告诉Kustomize
的图像转换器,就像它可以使用自定义配置映射生成器等进行扩展,如下所示不支持的和虚构的伪代码仿照现有的nameReference变压器
imageReference:
- kind: Prometheus
fieldSpecs:
- spec/image