如何使用 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/
我使用 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/