我是否需要为每个微服务容器应用程序创建叠加层

时间:2021-07-02 15:24:39

标签: kubernetes kustomize

我有大约 20 个容器应用程序,每个应用程序都有 deployment.yaml,现在假设我想为每个应用程序放置不同的 replicas。下图表明我需要匹配 metadata:name

这是否意味着我需要为一个容器应用分别创建 20 个 overlay.yaml?我可以使用单个叠加文件管理所有应用吗?

enter image description here

1 个答案:

答案 0 :(得分:2)

这可以通过使用 patches 解决。您将能够在每个环境中使用一个覆盖文件来管理所有部署,您可以在其中为每个部署明确设置副本数量。


这是一个简单的例子:

我有两个环境:devstage。两者都有 kustomization.yamlpatches 用于特定部署和副本数量(两种环境不同)。

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

有用的链接:

相关问题