如何通过配置文件为Kubernetes/Crossplane YAML传递参数
在Crossplane中实现配置变量注入的几种方式
1. 使用Kubernetes ConfigMap + Crossplane Composition(推荐)
通过Composition将ConfigMap中的配置值注入到资源字段,实现类似配置文件的管理机制:
步骤1:创建存储配置的ConfigMap
apiVersion: v1 kind: ConfigMap metadata: name: vcn-config data: vcn-name: "my-custom-vcn" compartment-name: "my-prod-compartment" display-name: "Production VCN"
步骤2:编写Composition绑定ConfigMap值
定义Composition模板,从ConfigMap读取值并填充到VCN资源的对应字段:
apiVersion: apiextensions.crossplane.io/v1 kind: Composition metadata: name: compositevcns.example.org spec: compositeTypeRef: apiVersion: example.org/v1alpha1 kind: CompositeVcn resources: - name: vcn base: apiVersion: core.oci.upbound.io/v1alpha1 kind: Vcn spec: forProvider: cidrBlocks: ["10.0.0.0/16"] patches: # 从ConfigMap取vcn-name填充metadata.name - type: FromCompositeFieldPath fromFieldPath: spec.config.vcnName toFieldPath: metadata.name # 从ConfigMap取compartment-name填充compartmentIdRef.name - type: FromCompositeFieldPath fromFieldPath: spec.config.compartmentName toFieldPath: spec.forProvider.compartmentIdRef.name # 从ConfigMap取display-name填充displayName - type: FromCompositeFieldPath fromFieldPath: spec.config.displayName toFieldPath: spec.forProvider.displayName connectionDetails: - name: config fromConfigMap: name: vcn-config keys: - vcn-name - compartment-name - display-name
步骤3:创建CompositeResource引用配置
通过CompositeResource实例关联ConfigMap中的配置:
apiVersion: example.org/v1alpha1 kind: CompositeVcn metadata: name: prod-vcn spec: config: vcnName: $(config.vcn-name) compartmentName: $(config.compartment-name) displayName: $(config.display-name)
2. 使用环境变量 + Crossplane ProviderConfig
如果需要通过环境变量传递(类似Terraform的TF_VAR机制),可以在ProviderConfig中引用环境变量,再通过资源关联注入:
步骤1:配置ProviderConfig引用环境变量
apiVersion: oci.upbound.io/v1beta1 kind: ProviderConfig metadata: name: oci-prod spec: credentials: source: Environment environment: variable: OCI_CREDENTIALS # 自定义字段存储变量 configuration: variables: vcnName: ${VCN_NAME} compartmentName: ${COMPARTMENT_NAME} displayName: ${DISPLAY_NAME}
步骤2:在VCN资源中引用ProviderConfig变量
通过Crossplane补丁机制或模板渲染工具替换环境变量值:
apiVersion: core.oci.upbound.io/v1alpha1 kind: Vcn metadata: name: ${VCN_NAME} spec: providerConfigRef: name: oci-prod forProvider: compartmentIdRef: name: ${COMPARTMENT_NAME} displayName: ${DISPLAY_NAME} cidrBlocks: ["10.0.0.0/16"]
3. 使用Kustomize Vars(轻量方案)
如果不想用Composition,直接用Kustomize的变量替换功能实现配置注入:
步骤1:创建kustomization.yaml定义变量
apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: - vcn.yaml replacements: - source: fieldPath: data.vcn-name kind: ConfigMap name: vcn-config targets: - fieldPath: metadata.name kind: Vcn name: vcn-via-crossplane - source: fieldPath: data.compartment-name kind: ConfigMap name: vcn-config targets: - fieldPath: spec.forProvider.compartmentIdRef.name kind: Vcn name: vcn-via-crossplane - source: fieldPath: data.display-name kind: ConfigMap name: vcn-config targets: - fieldPath: spec.forProvider.displayName kind: Vcn name: vcn-via-crossplane
步骤2:应用Kustomize配置
执行命令生成并应用最终的VCN资源:
kustomize build . | kubectl apply -f -
内容的提问来源于stack exchange,提问作者Shubham Jain
相关产品推荐
相关产品推荐

