如何使用 kustomize 共享具有多个覆盖的资源/补丁?

Red*_*Kun 7 kubernetes kustomize

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

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

理想情况下,我希望避免更改基础,因为它是在我的存储库之外声明的,并保持干燥,而不是在各处复制相同的配置。

有办法实现这一点吗?

文件夹结构:

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

Run Code Online (Sandbox Code Playgroud)

Red*_*Kun 9

正确的方法是使用组件

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

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

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
Run Code Online (Sandbox Code Playgroud)

这是组件:

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
Run Code Online (Sandbox Code Playgroud)

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