我有大约 20 个容器应用程序,每个应用程序都有 deployment.yaml
,现在假设我想为每个应用程序放置不同的 replicas
。下图表明我需要匹配 metadata:name
。
这是否意味着我需要为一个容器应用分别创建 20 个 overlay.yaml
?我可以使用单个叠加文件管理所有应用吗?
答案 0 :(得分:2)
这可以通过使用 patches
解决。您将能够在每个环境中使用一个覆盖文件来管理所有部署,您可以在其中为每个部署明确设置副本数量。
这是一个简单的例子:
我有两个环境:dev
和 stage
。两者都有 kustomization.yaml
和 patches
用于特定部署和副本数量(两种环境不同)。
tree command:
.
├── base
│ ├── app-1.yaml
│ ├── app-2.yaml
│ └── kustomization.yaml
└── overlays
├── dev
│ └── kustomization.yaml
└── stage
└── kustomization.yaml
部署 - app-1.yaml:
(第二个几乎相同,不同的名称和图像)
apiVersion: apps/v1
kind: Deployment
metadata:
name: example-1
spec:
template:
spec:
containers:
- name: example-1
image: example:1.0
下面是来自 overlays/dev/kustomization.yaml
的片段:
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- ../../base
patches:
- patch: |-
- op: replace
path: /spec/replicas
value: 2
target:
group: apps
version: v1
kind: Deployment
name: example-1
- patch: |-
- op: replace
path: /spec/replicas
value: 3
target:
group: apps
version: v1
kind: Deployment
name: example-2
实际结果:
$ kubectl kustomize overlays/dev
apiVersion: apps/v1
kind: Deployment
metadata:
name: example-1
spec:
replicas: 2
template:
spec:
containers:
- image: example:1.0
name: example-1
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: example-2
spec:
replicas: 3
template:
spec:
containers:
- image: example:2.0
name: example-2
有用的链接: