如何使用 kustomize 与多个覆盖共享 resources/patches?

How to share resources/patches with multiple overlays using kustomize?

我使用 kustomize 将 kube-prometheus 部署到多个环境。

kube-prometheus 是一个基础,每个环境都是一个覆盖。 假设我想将仪表板部署到叠加层,这意味着我需要为每个叠加层部署相同的 ConfigMaps 和相同的补丁。

理想情况下,我想避免更改基础,因为它是在我的存储库之外声明的,并且要保持内容干燥,而不是在所有地方复制相同的配置。

有办法实现吗?

文件夹结构:

/base/
     /kube-prometheus/
/overlays/
     /qa/       <--- 
     /dev/      <--- I want to share resources+patches between those
     /staging/  <---

在您的主要 kustomization 或一些顶级覆盖中,您应该能够调用公共文件夹或存储库。

你有没有尝试过这样的事情:

resources:
  - github.com/project/repo?ref=x.y.z

如果这不能回答您的问题,能否请您编辑您的 post 并给我们一些背景信息?

正确的方法是使用 components.

组件可以将资源和补丁封装在一起。 就我而言,我想添加 ConfigMaps(资源)并将此 ConfigMaps 安装到我的 Deployment(补丁)而不重复补丁。

所以我的叠加层看起来像这样:

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

resources:
  - ../../base/kube-prometheus/ # Base

components:
  - ../../components/grafana-aws-dashboards/ # Folder with kustomization.yaml that includes both resources and patches

这是组件:

apiVersion: kustomize.config.k8s.io/v1alpha1
kind: Component

resources:
- grafana-dashboard-aws-apigateway.yaml
- grafana-dashboard-aws-auto-scaling.yaml
- grafana-dashboard-aws-ec2-jwillis.yaml
- grafana-dashboard-aws-ec2.yaml
- grafana-dashboard-aws-ecs.yaml
- grafana-dashboard-aws-elasticache-redis.yaml
- grafana-dashboard-aws-elb-application-load-balancer.yaml
- grafana-dashboard-aws-elb-classic-load-balancer.yaml
- grafana-dashboard-aws-lambda.yaml
- grafana-dashboard-aws-rds-os-metrics.yaml
- grafana-dashboard-aws-rds.yaml
- grafana-dashboard-aws-s3.yaml
- grafana-dashboard-aws-storagegateway.yaml

patchesStrategicMerge:
- grafana-mount-aws-dashboards.yaml

此方法记录在此处:
https://kubectl.docs.kubernetes.io/guides/config_management/components/