我有以下结构:
├───base
│ └───redis
│ kustomization.yaml
│ release.yaml
│
├───components
│ └───target-namespace
│ kustomization.yaml
│
└───prod
└───redis
kustomization.yaml
Redis 覆盖看起来像这样:
kind: Kustomization
namespace: flux-system
resources:
- ../../base/redis
components:
- ../base/components/target-namespace
apiVersion: kustomize.config.k8s.io/v1alpha1
kind: Component
patches:
- patch: |-
apiVersion: helm.toolkit.fluxcd.io/v2beta1
kind: HelmRelease
metadata:
name: not-used
spec:
targetNamespace: default
target:
kind: HelmRelease
When I run kustomize
build .\prod\redis\
本地有效! 但是当我将它推送到 FluxCD 并期望它能够工作时,它给了我以下错误:
/components/target-namespace 是一个目录': 预期类型 != 'Component'
有人遇到这个问题吗?
根据 FluxCD 官方文档 1
是一个可选列表,用于指定 Kustomize 组件。这允许使用可重复使用的配置逻辑,这些配置逻辑可以包含在多个覆盖中。.spec.components
虽然您没有在问题中提供 FluxCD Kustomize CRD 定义,但我想说您的问题在于引用目标组件的路径。
我想说的是,您在
components
中指定的任何路径都是相对于 kustomization.yaml
的。
本质上,这意味着在您的
prod/redis/kustomization.yaml
中,您需要将 components
修改为以下内容才能使其正常工作:
kind: Kustomization
namespace: flux-system
resources:
- ../../base/redis
components:
- ../../base/components/target-namespace # <- change this
再次强调,您在
components
中指定的任何路径都是相对于 kustomization.yaml
的,并且应该像普通 cd
命令一样可以访问。